运行币安量化策略时报'DataFrame' object has no attribute 'Buy'如何解决
'DataFrame' object has no attribute 'Buy' 报错解决方案
该报错是因为代码中调用df.Buy时,对应的DataFrame对象并未成功生成Buy字段,常见触发原因及修复方法如下:
- 问题1:
strategy函数内部未重新生成信号字段
绝大多数这类问题都是因为strategy函数运行时会重新拉取最新的K线数据生成新的DataFrame,但是拉取后没有依次执行applytechnicals计算技术指标、调用Signals类的decide方法生成Buy字段,直接访问df.Buy就会抛出属性不存在的错误。 - 问题2:代码存在HTML转义字符错误
你贴出的代码中条件判断用的<、>是HTML转义后的字符,实际运行要替换为<、>,否则条件判断逻辑失效,Buy字段无法正常生成。 - 问题3:lags参数设置超出有效数据范围
你实例化Signals时传入的lags为100,但是你仅拉取了100根1分钟K线,计算KDJ、RSI、MACD等指标后会丢弃前若干行空值,剩余有效行数不足101行(lags+1),导致gettrigger计算结果异常,无法生成Buy字段。
修复参考
def strategy(symbol, hold_period): # 拉取足够长度的K线,建议至少是lags+30的长度,预留指标计算的空值空间 df = getminutedata(symbol, '1m', '200') # 计算技术指标 applytechnicals(df) # 初始化信号类,lags建议设置为5以内即可,不需要过大 signal_inst = Signals(df, lags=5) # 生成Buy信号字段 signal_inst.decide() # 后续再访问df.Buy就不会报错 current_close = df.Close.iloc[-1] print(f"current Close is {current_close}") if df.Buy.iloc[-1] == 1: # 你的开仓逻辑 pass # 其余逻辑
内容的提问来源于stack exchange,提问作者Emre Oz
相关产品推荐
相关产品推荐

