Cerebro是关键控制系统,backtraderStrategy一个子类)是最终用户的关键控制点。后者需要一种链接到系统其他部分的方法,而这正是订单发挥关键作用的地方。

订单将 a 中的逻辑做出的决策Strategy转换为适合Broker执行操作的消息。这是通过以下方式完成的:

  • 创建通过 Strategy 的方法:buy\``,卖出and平仓(Strategy) which return an订单实例作为参考
  • 消除通过 Strategy 的方法:cancel(Strategy) 接受一个订单实例来操作

订单还可以作为返回给用户的一种通信方式,以通知代理中的事情是如何运行的。

  • 通知To Strategy 方法:(notify_order策略)它报告一个 order实例

订单创建

调用时,buy以下参数适用于创建:sellclose

  • data(默认:None)必须为哪些数据创建订单。如果None那么系统中的第一个数据,self.datas[0] or self.data0(又名 self.data)将被使用
  • size(默认:None)用于订单的数据单位的大小(正)。

    如果通过检索None的实例将用于确定大小。sizergetsizer

  • price(默认:None)使用价格(如果实际格式不符合最小报价大小要求,实时经纪人可能会对实际格式施加限制)

    NoneMarketClose订单有效(市场决定价格)

    For LimitStopand StopLimitorders 这个值决定了触发点(在触发的情况下Limit明显是在哪个价格下单应该匹配)

  • plimit(默认:None)仅适用于StopLimit订单。这是设置隐含限价单的价格,一旦触发止损price(已使用)
  • exectype(默认:None)可能的值:
    • Order.MarketNone。市价单将以下一个可用价格执行。在回测中,它将是下一个柱的开盘价
    • Order.Limit. 只能在给定 price或更好的条件下执行的订单
    • Order.Stop. 像订单一样触发price和执行的Order.Market订单
    • Order.StopLimit. 触发price并作为隐式限价订单执行的订单,价格为 pricelimit
  • valid(默认:None)可能的值:
    • None:这会生成一个不会过期的订单(又名 Good until cancel)并保留在市场中直到匹配或取消。实际上,经纪人倾向于施加时间限制,但这通常在时间上很遥远,以至于认为它不会过期
    • datetime.datetimedatetime.date实例:日期将用于生成在给定日期时间之前有效的订单(又名有效期至日期
    • Order.DAY0timedelta():将生成在会话结束前有效的一天(又名日订单)
    • numeric valuematplotlib:这被假定为与编码 中的日期时间相对应的值(由 使用的那个backtrader),并将用于生成在该时间之前有效的订单(直到日期有效)
  • tradeid(默认:0)这是一个内部值,用于backtrader跟踪同一资产的重叠交易。当通知订单状态的变化时,这tradeid将被发送回策略。
  • **kwargs: 额外的代理实现可能支持额外的参数。backtraderkwargs传递给创建的订单对象示例:如果直接支持的 4 种订单执行类型 backtrader不够用,例如 Interactive Brokers,可以将以下内容作为kwargs传递:
orderType='LIT', lmtPrice=10.0, auxPrice=9.8

这将覆盖由创建的设置backtrader并生成一个触及价格为 9.8 和限价为 10.0的LIMIT IF TOUCHED订单

Tips:该close方法将检查当前仓位并相应地使用buysell有效地平仓size也将自动计算,除非参数是来自用户的输入,在这种情况下可以实现部分平仓 或反转

订单通知

要接收通知,notify_order必须在用户子类中重写该方法Strategy(默认行为是什么都不做)。以下适用于这些通知:

  • next在调用策略的方法之前发出
  • 在同一下一个周期中,可能(并且将会)发生多次相同或不同状态的相同订单订单可以提交给经纪人并被接受,之前完成的订单next将被再次调用。

    在这种情况下,至少会发生 3 个通知,并具有以下 status值:

    • Order.Submitted因为订单已发送给经纪人
    • Order.Accepted因为订单已被经纪人接受并等待潜在的执行
    • Order.Completed因为在示例中它被快速匹配并完全填充(通常可能是Market订单的情况)

对于相同的状态,通知甚至可能发生多次 Order.Partial。此状态不会在回代理中看到(匹配时不考虑交易量),但肯定会由真实代理设置。

真实经纪人可能会在更新头寸之前发出一次或多次执行,而这组执行将弥补一次Order.Partial通知。

实际执行数据在属性中:order.executed这是一个类型的对象OrderData(参见下面的参考),通常的字段为sizeprice

创建时的值存储在order.created其中,在整个生命周期中保持不变order

订单状态值

定义如下:

  • Order.Created:在Order创建实例时设置。除非order手动创建实例而不是通过buy,sellclose
  • 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:当前未平仓价格

评论被关闭。