在众多的订单中,首先分享一下,backtrader 的订单执行的两个假设,然后分享下市价单的创建及其成交逻辑,最后分享一个小案例测试市价单。
- backtrader 默认只能在每个 bar 结束的时候下单。在这个 bar 结束的时候,你已经有了这个 bar 和以前 bar 的 open,high,low,close,volume 等信息,然后进行判断是否要下单,如果要下单,就需要至少下个 bar 进行成交。
- 成交量不重要。这个假设在实际的交易中是不成立的,每个 bar 的交易量越小,你下市价单造成的市场冲击成本可能越高,下限价单全部成交的时间可能需要更长,所以,要尽可能选择流动性好的资产进行交易。
backtrader 下市价单,简直是太容易了,只需要考虑两个问题就好:在哪个数据(data,可以是某一个股票、期货等资产)进行交易,以及每次交易多少(size)。
# 下市价单,下到默认数据上,即加载到 cerebro 中的第一个数据
order = self.buy()
# 市价单,将会忽略 valid 参数
order = self.buy(valid=datetime.datetime.now() + datetime.timedelta(days=3))
# 市价单,将会忽略 price
order = self.buy(price=self.data.close[0] * 1.02)
# 市价单,将会交易 25 股股票或者 25 手期货
order = self.buy(size=25)
# 取消订单
self.broker.cancel(order)
# 上面都默认的下到第一个数据上,也可以用参数指定数据,如
order = self.buy(data,size = 100)
# 下单比较不常用的一种方式,先继承一个 order,并编写好相应的参数,然后直接提交给 broker,这个可以忽略
order = self.broker.submit(order) 在收盘之后下一个市价单,会在下个 bar 开盘的时候成交,这是通常的逻辑。