Backtrader(十八)- Order订单 - 订单下单和执行时机

默认模式

假设为日线数据,在next方法中调用订单方法。
执行逻辑为,当天收盘后提交订单,次日使用开盘价执行订单

在backtrader中对任何时间粒度的数据,下单时机是当前bar(索引为0)的完成时间点;执行时机是下一根bar(索引为1)开始。

作弊模式

收盘作弊模式
简述

当日(收盘)下单,当日(收盘)成交

有些用户想要在使用日线bar时,今日下市价单,成交价格就是今日收盘价。
相当于实际场景:用户在下午临收盘前观察盘面,预估收盘价,下单成交,这个价格有可能与收盘价差别不大,相当于今日收盘价成交。

backtrader提供了收盘作弊模式 cheat_on_close ,可以以今日收盘价成交,
开启方法 cerebro.broker.set_coc(True)

注意:在作弊模式下,notify_order中输出self.data0.datetime.datetime(0)并不是订单执行时间,而是次日。
正确的 获取订单执行时间order.executed.dt、获取订单创建时间order.created.dt

开盘作弊模式

简述

当日(开盘)下单,当日(开盘)成交

有些用户希望当天下单,并以当天开盘价成交。相当于上帝模式(提前观察到开盘价),然后以开盘价成交,这在backtrader中成为开盘作弊模式 cheat_on_open 。当用户想要以开盘价计算全量全量买入数量时,有可能使用此模式。

开启开盘作弊模式方法:cerebro = bt.Cerebro(cheat_on_open=True)

由于这个模式整个执行逻辑与默认模式很大不同,所以策略类中覆写的方法不再之前的 prenext、next等。backtrader提供了另一套队形的 xxx_open 方法供用户编写业务逻辑。如:next_open、nextstart_open、prenext_open、next_open等。
在这些 xxx_open 方法中:
1、各种技术指标都还未重新计算,还保留着昨天的结果。如 self.sma[0]是昨天的移动均值
2、经纪行broker还未评估未决订单。

Tips:
当然,在默认模式下,可以使用如 self.data0.open[1] 来实现提前获得开盘价,但者需要预加载。同时要注意最后一根bar异常,需要的next中加上保护条件:

if len(self.datas[0]) == self.data0.buflen():
	return
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值