PyCharm中运行pandas-ta自定义策略报错及索引问题求助
问题解决:pandas-ta运行报错及索引处理
1. 多进程启动的RuntimeError解决
原因
Windows系统下Python多进程启动有强制规范:必须将主执行代码包裹在if __name__ == '__main__':代码块中,否则会触发进程初始化的递归错误。pandas-ta的strategy()方法默认启用多进程加速计算,因此触发了这个报错。
解决办法
两种可选方案:
- 方案一:禁用多进程:调用
strategy()时指定cores=1,强制单进程运行 - 方案二:规范代码结构:把所有执行逻辑放到
if __name__ == '__main__':块内
2. Date列KeyError解决
原因
通过df.ta.ticker("aapl")获取的股票数据,已经自动将Date设为DataFrame的索引(而非普通列),你尝试用df["Date"]访问不存在的列,自然触发KeyError。而且当前索引已经是DatetimeIndex,不需要额外转换。
解决办法
直接删除df.set_index(pd.DatetimeIndex(df["Date"]), inplace=True)这行代码即可。如果确实需要将索引转为列,可先执行df.reset_index(inplace=True)把索引转为Date列再重新设置,但此处完全没必要。
修改后的完整代码
import pandas as pd import pandas_ta as ta if __name__ == '__main__': df = pd.DataFrame() # Empty DataFrame # Load data df = df.ta.ticker("aapl") # 无需额外设置索引,df.ta.ticker返回的DataFrame已用Date作为DatetimeIndex # df.set_index(pd.DatetimeIndex(df["Date"]), inplace=True) # 删除此行 # Calculate Returns and append to the df DataFrame df.ta.log_return(cumulative=True, append=True) df.ta.percent_return(cumulative=True, append=True) # Create your own Custom Strategy CustomStrategy = ta.Strategy( name="Momo and Volatility", description="SMA 50,200, BBANDS, RSI, MACD and Volume SMA 20", ta=[ {"kind": "sma", "length": 50}, {"kind": "sma", "length": 200}, {"kind": "bbands", "length": 20}, {"kind": "rsi"}, {"kind": "macd", "fast": 8, "slow": 21}, {"kind": "sma", "close": "volume", "length": 20, "prefix": "VOLUME"}, ] ) # 方案一:禁用多进程 # df.ta.strategy(CustomStrategy, cores=1) # 方案二:用if __name__包裹后,默认多进程可正常运行 df.ta.strategy(CustomStrategy) # 查看结果 print(df.tail())
内容的提问来源于stack exchange,提问作者Pol Barreiro Font
相关产品推荐
相关产品推荐

