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:
print("------bar ends ------")
return True
else:
return False
各位看官,如果对您有用,请帮助点赞!点赞!点赞!非常感谢,这是我分享的唯一动力!