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