默认情况下,backtrader中发出的订单,如果要成交,会成交全部数量,而与成交那根bar的总成交量(volumn)无关。
比如,在当前bar结束时,创建如下市价买单:
self.buy(size=100)
那么,到下一根bar,会以开盘价全部成交100股,即使下一根bar总成交量是50股也不影响该订单成交100股。
那么,我们能不能改变这种默认行为,让订单成交量与bar的总成交量挂钩呢?至少不要超过总成交量。方法是有的,那就是使用订单履行对象filler。有三种filler,以下分别介绍。
(1)固定数量filler:FixedSize
使用方法如下(假设在策略里创建了100股买单self.buy(size=100),后面2根bar的总成交量分别为90、80):
...
filler = bt.broker.fillers.FixedSize(size=70)
cerebro.broker.set_filler(filler)
cerebro.run()
那么在某bar上订单实际成交数量(不管买单还是卖单)=min(size,bar的总成交量,订单剩余数量)
在这种情况下,订单可能会被分开几次执行完。订单会在第一根bar成交70股,在第2根bar成交30股。
如果filler的参数size设为False,那么相当于size就是bar的总成交量,则在第一根bar成交90,第2根bar成交10股。
(2)固定bar百分比filler:FixedBarPerc
使用方法如下(假设在策略里创建了100股买单self.buy(size=100),后面2根bar的总成交量分别为90、80):
...
filler = b

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



