基于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
相关产品推荐
相关产品推荐

