运行日枢轴点策略回测代码报float与method比较TypeError如何解决
问题原因
- 报错核心原因是你自定义的列名
pivot和pandas DataFrame内置的pivot()方法重名了:你使用点语法stock.pivot访问列时,pandas会优先识别为内置的方法对象,而非你新增的pivot列,拿浮点型的stock.Close和方法对象做大小比较,自然抛出类型错误。 - 此外代码还存在一处笔误:最后返回的变量名写为
daily_returns,但你实际定义的收益变量是daily_log_returns,运行会触发NameError。
修复方案
修改两处代码即可:
- 所有访问
pivot列的逻辑全部改用方括号语法(点语法容易和内置属性/方法重名,生产环境建议所有列访问都用方括号语法):
# 原错误写法 stock['long_entry'] = stock.Close > stock.pivot stock['long_exit']= stock.Close < stock.pivot # 修改后写法 stock['long_entry'] = stock.Close > stock['pivot'] stock['long_exit']= stock.Close < stock['pivot']
- 修正返回值的变量名:
# 原错误写法 return daily_returns # 修改后写法 return daily_log_returns
可选优化项
- 收益计算前可以对信号的首个NaN值填充0,避免第一条收益结果为NaN:
daily_log_returns = daily_log_returns.fillna(0)
内容的提问来源于stack exchange,提问作者macazh
相关产品推荐
相关产品推荐

