怎么判断最后一条K线数据(bar)-backtrader回测中文教程
backtrader本身在回测结束前是不会把持仓全部平仓,所以,就需要我们自己判断什么时候是最后一个K线,在最后一个K线前发出全部平仓命令,以使程序在最后的一条K线执行平仓,从而完成一个完美的回测过程。
目的是在回测结束前把所有仓位都平仓掉。
网络上有的使用调用未来数据data[2]来引发错误来实现。实际测试中,此方案无效。
经过一番研究与测试,得出以下结果:
1、可以使用buflen()来取得总共有多少条K线bar。
2、在每次next中,datas中都包括从一开始到当前的所有数据,这样就可以通过len()来获取当前执行到第几个(K线)bar了。
3、可以通过1、2两项的数据进行对比,就可以知道执行到第几条K线bar了。这样我们就可以提前发出全部平仓指令。
代码如下:
def next(self): # 判断bar是否结束 if self.is_bar_stop(self.datas[0]): return # 判断历史数据是不是结束了.结束则平仓所有持仓 def is_bar_stop(self, data): if len(data) >= data.buflen() - 2: if self.getposition(data).size != 0: self.close(data) print("------ bar ends ------") return True else: return False