解决方法
删除数据源中close
为空的行;或者更极端一点,删除存在空值的行。
主要查看数据源是否存在缺失值:
- 如果使用Backtrader的默认逻辑,计算
value
会对应收盘价,收盘价不能有缺失值
- 如果使用开盘价购买,则开盘价不能有缺失值
问题解析
程序中计算
在next()
之后,代码跳转到cerebro.py
文件中第1688行,执行self_brokernotify()
然后,跳转到1355行,执行def _brokernotify(self)
然后,跳转到brokers/bbroker.py
文件的第1176行执行def next(self)
最后,跳转到当前文件的第422行,执行def _get_value(self,data=None,lever=False)
在这个函数中,程序计算现金和价值。如果策略中使用self.broker.get_value()
结果显示nan
,在这里调试代码可以找到问题的原因
虽然即便不管,也不影响逻辑,但是此后,self.broker.get_value()
这个函数就将失去其存在的意义