You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Pandas的POC计算优化:如何纳入成交量因素?

修正POC计算逻辑(纳入成交量权重)

原问题分析

现有金融数据DataFrame包含timestamp、close、security_code、volume字段,原代码通过统计close价位的出现次数确定POC(合约交易量最高价位),但未考虑对应价位的成交量,逻辑不符合POC的定义:

def poc(self, df):
    """ Calculate the POC. """
    return df['close'].expanding().agg({'poc': lambda s:mode(s)[0]})['poc']

修改方案

POC的核心是累计成交量最高的价位,需按价位聚合成交量后取最大值对应的价位,修改后的代码如下:

def poc(self, df):
    """ Calculate the POC (Point of Control) with volume weighting. """
    def weighted_poc(window):
        # 按收盘价分组,累计对应成交量
        price_volume = window.groupby('close')['volume'].sum()
        # 返回累计成交量最高的价位,多价位并列时取第一个
        return price_volume.idxmax()
    
    # 对整个DataFrame做滚动窗口计算,raw=False确保传入的是DataFrame切片
    return df.expanding().apply(weighted_poc, raw=False)

关键说明

  • 替换原有的close列单独扩展聚合为对整个DataFrame的滚动处理,这样能同时获取close和volume数据
  • groupby('close')['volume'].sum()实现了按价位累计成交量,这是POC计算的核心逻辑
  • idxmax()直接定位到累计成交量最大的价位,替代原有的mode()频次统计逻辑

若需处理多个价位成交量并列最大的场景,可在weighted_poc中补充逻辑,比如取最高/最低价位:

# 取成交量最大的所有价位中的最高值
return price_volume[price_volume == price_volume.max()].index.max()

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:04:52