天天看點

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)

繼續閱讀