天天看点

backtrader无法满仓交易的问题

bt默认的行为是当天收盘计算交易信号,下一个bar开盘价交易该信号,由此导致的问题,无法计算真正需要的满仓size,默认提供的各种手段,经过测试,也都只能做到最大95%比例开仓,否则就容易报错margin,例如

cerebro.addsizer(bt.sizers.AllInSizer,percents=95)

因此,这里的权宜之计,是直接取下一个bar的数据来参与计算,同时由于bt的机制问题(我认为这是一个逻辑bug,正常讲,应该按照交易bar的数据来判断order是否合理),他会按照当天的bar来判断order是否合理,因此只能取两者最大来近似计算一个满仓数据,否则一旦当天价格大于要交易的价格,就会报错margin

max_price_size = math.floor(self.broker.get_cash() /max(self.dataclose[0],self.dataclose[1]))

self.log('BUY CREATE , %.4f, %.1f' % (self.dataclose[0],max_price_size))

self.buy(size=max_price_size)

继续阅读