交易订单相关类的详细说明 – backtrader中文教程
Cerebro
是关键控制系统,backtrader
(Strategy
一个子类)是最终用户的关键控制点。后者需要一种链接到系统其他部分的方法,而这正是订单发挥关键作用的地方。
订单将 a 中的逻辑做出的决策Strategy
转换为适合Broker
执行操作的消息。这是通过以下方式完成的:
- 创建通过 Strategy 的方法:
buy\``,
卖出and
平仓(Strategy) which return an
订单实例作为参考 - 消除通过 Strategy 的方法:
cancel
(Strategy) 接受一个订单实例来操作
订单还可以作为返回给用户的一种通信方式,以通知代理中的事情是如何运行的。
订单创建
调用时,buy
以下参数适用于创建:sell
close
data
(默认:None
)必须为哪些数据创建订单。如果None
那么系统中的第一个数据,self.datas[0] or self.data0
(又名self.data
)将被使用size
(默认:None
)用于订单的数据单位的大小(正)。如果通过检索
None
的实例将用于确定大小。sizer
getsizer
price
(默认:None
)使用价格(如果实际格式不符合最小报价大小要求,实时经纪人可能会对实际格式施加限制)None
对Market
和Close
订单有效(市场决定价格)For
Limit
,Stop
andStopLimit
orders 这个值决定了触发点(在触发的情况下Limit
明显是在哪个价格下单应该匹配)plimit
(默认:None
)仅适用于StopLimit
订单。这是设置隐含限价单的价格,一旦触发止损price
(已使用)exectype
(默认:None
)可能的值:Order.Market
或None
。市价单将以下一个可用价格执行。在回测中,它将是下一个柱的开盘价Order.Limit
. 只能在给定price
或更好的条件下执行的订单Order.Stop
. 像订单一样触发price
和执行的Order.Market
订单Order.StopLimit
. 触发price
并作为隐式限价订单执行的订单,价格为pricelimit
valid
(默认:None
)可能的值:None
:这会生成一个不会过期的订单(又名 Good until cancel)并保留在市场中直到匹配或取消。实际上,经纪人倾向于施加时间限制,但这通常在时间上很遥远,以至于认为它不会过期datetime.datetime
或datetime.date
实例:日期将用于生成在给定日期时间之前有效的订单(又名有效期至日期)Order.DAY
或0
或timedelta()
:将生成在会话结束前有效的一天(又名日订单)numeric value
matplotlib
:这被假定为与编码 中的日期时间相对应的值(由 使用的那个backtrader
),并将用于生成在该时间之前有效的订单(直到日期有效)
tradeid
(默认:0
)这是一个内部值,用于backtrader
跟踪同一资产的重叠交易。当通知订单状态的变化时,这tradeid
将被发送回策略。**kwargs
: 额外的代理实现可能支持额外的参数。backtrader
将kwargs传递给创建的订单对象示例:如果直接支持的 4 种订单执行类型backtrader
不够用,例如 Interactive Brokers,可以将以下内容作为kwargs传递:
orderType='LIT', lmtPrice=10.0, auxPrice=9.8
这将覆盖由创建的设置backtrader
并生成一个触及价格为 9.8 和限价为 10.0的LIMIT IF TOUCHED
订单。
Tips:该close
方法将检查当前仓位并相应地使用buy
或sell
有效地平仓。size
也将自动计算,除非参数是来自用户的输入,在这种情况下可以实现部分平仓 或反转
订单通知
要接收通知,notify_order
必须在用户子类中重写该方法Strategy
(默认行为是什么都不做)。以下适用于这些通知:
next
在调用策略的方法之前发出- 在同一下一个周期中,可能(并且将会)发生多次相同或不同状态的相同订单。订单可以提交给经纪人并被接受,之前完成的订单
next
将被再次调用。在这种情况下,至少会发生 3 个通知,并具有以下
status
值:
对于相同的状态,通知甚至可能发生多次 Order.Partial
。此状态不会在回测代理中看到(匹配时不考虑交易量),但肯定会由真实代理设置。
真实经纪人可能会在更新头寸之前发出一次或多次执行,而这组执行将弥补一次Order.Partial
通知。
实际执行数据在属性中:order.executed
这是一个类型的对象OrderData
(参见下面的参考),通常的字段为size
和price
创建时的值存储在order.created
其中,在整个生命周期中保持不变order
订单状态值
定义如下:
Order.Created
:在Order
创建实例时设置。除非order
手动创建实例而不是通过buy
,sell
和close
Order.Submitted
:在order
实例已传输到broker
. 这仅仅意味着它已被发送。在回测 模式下,这将是一个立即行动,但它可能需要真正的经纪人实际时间,该经纪人可能会收到订单,并且只有在它被转发到交易所时才首先通知Order.Accepted
:broker
已接受订单并且它在系统中(或已经在交易所中)等待根据设置的参数(如执行类型、大小、价格和有效性)执行Order.Partial
:order
已部分执行。order.executed
包含当前的size
成交价和平均价。order.executed.exbits
包含ExecutionBits
详细说明部分填充物的完整列表Order.Complete
:order
已完全填满均价。Order.Rejected
:broker
已拒绝订单。参数(例如valid
确定其生命周期)可能不被 the 接受,broker
并且order
不能被接受。原因将通过 的notify_store
方法 通知strategy
。虽然这可能看起来很尴尬,但原因是现实生活中的经纪人会通过事件通知这一点,这可能与订单直接相关,也可能不直接相关。但是仍然可以看到来自经纪人的通知notify_store
。在回测代理中不会看到此状态
Order.Margin
:订单执行将意味着追加保证金,并且先前接受的订单已从系统中删除Order.Cancelled
(或Order.Canceled
):确认用户请求取消必须考虑到,通过策略方法取消订单 的请求并不能保证取消。cancel
订单可能已经执行,但经纪商可能尚未通知此类执行和/或通知可能尚未交付给策略Order.Expired
:以前接受的具有时效性的订单已过期并已从系统中删除
参考:订单和相关类
这些对象是backtrader
生态系统中的通用类。在与其他经纪人合作时,它们可能会被扩展和/或包含额外的嵌入信息。请参阅相应经纪人的参考资料
class backtrader.order.Order()
保存创建/执行数据和订单类型的类。
订单可能有以下状态:
- Submitted:发送给经纪人并等待确认
- Accepted:被经纪人接受
- Partial:部分执行
- Completed:完全执行
- Canceled/Cancelled:被用户取消
- Expired:过期
- Margin:没有足够的现金来执行订单。
- Rejected:被经纪人拒绝这可能发生在订单提交期间(因此订单不会达到已接受状态)或在每个新柱价格执行之前,因为现金已被其他来源提取(类似未来的工具可能已经减少了现金或订单订单可能已经执行)
会员属性:
- ref:唯一的订单标识符
- created:OrderData 保存创建数据
- 执行:OrderData 保存执行数据
- info:通过方法传递的自定义信息
addinfo()
。它以已被子类化的 OrderedDict 的形式保存,因此也可以使用 ‘.’ 指定键。符号
用户方法:
- isbuy():返回 bool 指示订单是否购买
- issell():返回 bool 指示订单是否卖出
- alive():如果订单状态为 Partial 或 Accepted,则返回 bool
class backtrader.order.OrderData(dt=None, size=0, price=0.0, pricelimit=0.0, remsize=0, pclose=0.0, trailamount=0.0, trailpercent=0.0)
保存创建和执行的实际订单数据。
在创建的情况下提出请求,在执行的情况下实际结果。
会员属性:
- exbits : 此 OrderData 的 OrderExecutionBits 的可迭代
- dt: datetime (float) 创建/执行时间
- size:请求/执行的大小
- price:执行价格注:如果没有给出价格,也没有给出pricelimite,则以当时的收盘价或订单创建时的收盘价作为参考
- pricelimit:持有 StopLimit 的 pricelimit(先触发)
- trailamount:追踪止损的绝对价格距离
- trailpercent:追踪止损的百分比价格距离
- value:整个比特大小的市场价值
- comm:整个比特执行的佣金
- pnl:由该位生成的 pnl(如果某些东西已关闭)
- margin:订单产生的保证金(如有)
- psize: 当前开仓大小
- pprice:当前未平仓价格
class backtrader.order.OrderExecutionBit(dt=None, size=0, price=0.0, closed=0, closedvalue=0.0, closedcomm=0.0, open=0, opensvalue=0.0, openscomm=0.0, pnl=0.0, psize=0 , pprice=0.0)
旨在保存有关订单执行的信息。“位”不能确定订单是否已全部/部分执行,它只是保存信息。
会员属性:
- dt: datetime (float) 执行时间
- size:执行了多少
- price:执行价格
- closed:有多少执行关闭了现有职位
- opened:多少执行了新仓位
- opensvalue:“打开”部分的市场价值
- closedvalue:“封闭”部分的市场价值
- closedcomm:“封闭”部分的佣金
- openscomm:“打开”部分的佣金
- value:整个比特大小的市场价值
- comm:整个比特执行的佣金
- pnl:由该位生成的 pnl(如果某些东西已关闭)
- psize: 当前开仓大小
- pprice:当前未平仓价格
评论被关闭。