Backtrader 文档学习-Order General
Cerebro是backtrader中的关键控制系统,策略(子类)是最终用户的关键控制点,后者需要连接系统其他部分的方法,这就是订单扮演的关键角色。
Order将strategy的逻辑做出的决策转换为适合broker执行操作的消息。通过以下方式完成:
- 创建 ,通过strategy 的方法:buy sell 和close 都可以返回Order的实例
- 取消,通过strategy的方法:cancel 也可以产生Order实例
- 通知,notify_order 的方法,也返回Order 实例
订单还作为反馈给用户的通信方法,通知代理中的运行情况( 在strategy中也提及了)。
1.订单创建
通过 buy sell close 创建,带以下参数:
-
data (default: None) ,如果是None ,就是第一个加载cerebro的数据self.datas[0] or self.data0
-
size (default: None) ,每个订单的数量,正数。None,将使用通过getsizer检索的sizer实例来确定大小。默认就是1
-
price (default: None),指定下单的价格(如果实际格式不符合最小报价单位要求,实时broker会对其进行限制)。
- None 对Market订单和平仓订单有效(市场决定价格,用市价操作)
- 对于 Limit/ Stop /StopLimit 订单参数,订单该值决定触发点(在Limit的情况下,触发点显然是订单Limit设置的价格)
-
plimit (default: None),仅适用于StopLimit止损单。就是设置隐含限价单的价格,一旦止损被触发(使用该价格) 。
-
exectype (default: None)
- Order.Market or None, 市价单将以下一个可用价格执行。在回测中它将是下一bar的开盘价
- Order.Limit,只能以给定价格或更高价格执行的订单
- Order.Stop,价格到达才能触发订单,产生一个Order.Market
- Order.StopLimit,在价格上被触发的订单,价格由pricelimit的隐含限价订单执行
-
valid (default: None)
- None: 生成一个不会过期的订单,一直保留在市场中,直到匹配或取消。在实际中broker会设定一个时间限制,通常是因为时间太久而没有到期
- datetime.datetime or datetime.date ,该日期将用于生成在给定日期之前有效的订单(也称为有效截止日期)
- Order.DAY or 0 or timedelta(),将生成一个有效期至会话结束的日期(也称为日订单)
- numeric value,假设该值对应于matplotlib编码中的日期时间(backtrader使用的日期时间),在该时间之前有效的订单(有效截止日期)
-
tradeid (default: 0),是BT应用的内部值,用于跟踪同一资产的重叠交易。当通知订单状态发生变化时,该tradeid将被发送回策略。
-
**kwargs ,其他broker实现可能支持额外的参数。backtrader将把kwargs传递给创建的订单对象
示例:如果backtrader直接支持的4种订单执行类型还不够,例如在交互式broker时,以下内容可以作为kwargs传递:
orderType='LIT', lmtPrice=10.0, auxPrice=9.8
重写BT创建的设置,并生成一个触及价格为9.8、限价为10.0的限价订单。
注意:
平仓方法将检查当前position ,并相应地使用买入或卖出来有效平仓。大小也将自动计算,除非参数是用户的输入,在这种情况下,可以实现部分关闭或反转 。