Skip to content

命令

原文: https://www.backtrader.com/docu/order/

Cerebrobacktrader中的关键控制系统,Strategy(一个子类)是最终用户的关键控制点。后者需要一种链接到系统其他部分的方法,这就是订单起关键作用的地方。

命令Strategy中的逻辑所做的决定转化为适合Broker执行动作的消息。这是通过以下方式完成的:

  • 创作

    通过策略的方法:buy\``,卖出and成交(Strategy) which return an订单`实例作为参考

  • 取消

    通过策略的方法:cancel(策略)取订单实例进行操作

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

  • 通知

    至策略方法:notify_order(策略),报告order实例

订单创建

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

  • data(默认为None

    必须为其创建订单的数据。如果为None,则将使用系统中的第一个数据self.datas[0] or self.data0(又名self.data

  • size(默认为None

    要用于订单的数据单位的要使用的大小(正)。

    如果None将使用getsizer检索的sizer实例来确定大小。

  • price(默认为None

    使用价格(如果实际格式不符合最小刻度大小要求,实时经纪人可能会对其进行限制)

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

    对于LimitStopStopLimit订单,该值确定触发点(在Limit的情况下,触发点显然是订单应匹配的价格)

  • plimit(默认为None

    仅适用于StopLimit订单。这是在触发停止后(已使用price时)设置隐含限制订单的价格

  • exectype(默认为None

    可能值:

    • Order.MarketNone。市场订单将以下一个可用价格执行。在回溯测试中,它将是下一个酒吧的开盘价

    • Order.Limit。只能在给定的price或更好的条件下执行的命令

    • Order.Stop。在price触发并像Order.Market指令一样执行的指令

    • Order.StopLimit。在price触发并作为隐含限额订单执行的订单,价格由pricelimit给出

  • valid(默认为None

    可能值:

    • None:这将生成一个不会过期的订单(也称为在取消之前有效),并在匹配或取消之前保持在市场中。在现实中,经纪人倾向于施加时间限制,但通常情况下,在时间上远不及考虑到期。

    • datetime.datetimedatetime.date实例:该日期将用于生成有效期至给定日期时间的订单(又名有效期至日期

    • Order.DAY0timedelta():生成有效期至会话结束的一天(又名订单)

    • numeric value:假设该值对应于matplotlib编码中的日期时间(由backtrader使用的日期时间),并将用于生成在此时间之前有效的订单(截止日期

  • tradeid(默认为0

    这是backtrader应用的内部值,用于跟踪同一资产上的重叠交易。此tradeid在通知订单状态变更时被发送回策略

  • **kwargs:额外的代理实现可能支持额外的参数。backtraderkwargs传递给已创建的订单对象

    示例:如果backtrader直接支持的 4 种订单执行类型不够,例如交互经纪人的情况下,以下可以传递为kwargs

    py orderType='LIT', lmtPrice=10.0, auxPrice=9.8

    这将覆盖backtrader创建的设置并生成LIMIT IF TOUCHED订单,其中触摸价格为 9.8,限制价格为 10.0。

笔记

close方法将检查当前位置,并相应地使用buysell来有效关闭位置。除非参数是用户输入,否则也会自动计算size,在这种情况下,可以实现部分关闭反转

订单通知

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

  • 在调用策略的next方法之前发出

  • 同一订单在同一下一周期内,状态相同或不同的订单可能(也将)发生多次。

    指令可以提交给经纪人并在next再次调用之前接受并完成执行

    在这种情况下,至少会发生 3 次通知,通知值如下status

    • Order.Submitted因为订单已经发送给经纪人

    • Order.Accepted因为该订单由经纪人执行,等待潜在执行

    • Order.Completed因为在本例中,它是快速匹配和完全填充的(这可能是Market订单通常的情况)

Order.Partial的情况下,对于相同的状态,通知甚至可能发生多次。这种状态将不会出现在 Oracle T1 后退测试 Ty2 T2 代理中(它不考虑匹配时的卷),但它肯定会由真正的经纪人设置。

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

实际执行数据在属性order.executed中,该属性为OrderData类型的对象(参考如下),常用字段为sizeprice

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

订单状态值

定义如下:

  • Order.Created:创建Order实例时设置。除非order实例是手动创建的,而不是通过buysellclose创建的,否则最终用户永远不会看到

  • Order.Submitted:当order实例传输到broker时设置。这仅仅意味着它已经被发送。在回溯测试模式下,这将是一项即时行动,但可能需要实际的时间与真正的经纪人,经纪人可能会收到订单,并且只有在订单被转发到交易所时才会首先通知

  • Order.Acceptedbroker已接受订单,并根据设置的执行类型、大小、价格、有效期等参数在系统中(或已在交易所中)等待执行

  • Order.Partialorder已部分执行。order.executed包含当前填写的size和平均价格。

    order.executed.exbits包含一份完整的ExecutionBits清单,详细说明了部分填充物

  • Order.Completeorder已全部填入均价。

  • Order.Rejectedbroker已拒绝订单。broker可能不接受参数(例如用于确定其寿命的valid,而order则不能接受。

    原因将通过strategynotify_store方式通知。虽然这看起来很尴尬,但原因是现实生活中的经纪人会在一个事件中通知这一点,这可能与订单直接相关,也可能与订单无关。但经纪人的通知仍然可以在notify_store中看到。

    回溯测试代理中不会看到此状态

  • Order.Margin:订单执行意味着追加保证金,之前接受的订单已从系统中删除

  • Order.Cancelled(或Order.Canceled:用户请求取消的确认

    必须考虑到,通过策略的cancel方法取消订单的请求并不能保证取消。订单可能已经执行,但经纪人可能尚未通知此类执行和/或通知可能尚未送达策略

  • Order.Expired:之前接受的具有时间有效性的订单已经过期并从系统中删除

参考:订单和相关类

这些对象是backtrader生态系统中的泛型类。当与其他经纪人合作时,它们可能会被扩展和/或包含额外的嵌入信息。请参阅相应经纪人的参考资料

类 backtrader.order.order()

类,该类保存创建/执行数据和订单类型。

订单可能具有以下状态:

  • 已提交:发送给经纪人并等待确认

  • 已接受:经纪人已接受

  • 部分:部分执行

  • 已完成:完全兴奋

  • 取消/取消:由用户取消

  • 过期:过期

  • 保证金:没有足够的现金执行订单。

  • 拒绝:被经纪人拒绝

    这可能发生在订单提交期间(因此订单不会达到接受状态)或在执行每个新的酒吧价格之前,因为现金已由其他来源提取(类似未来的工具可能减少了现金或订单已执行)

成员属性:

  • ref:唯一订单标识符

  • 已创建:保存创建数据的 OrderData

  • 已执行:保存执行数据的 OrderData

  • 信息:通过addinfo()方式传递的自定义信息。它以已子类化的 OrderedDict 的形式保存,因此也可以使用“.”符号指定键

用户方法:

  • isbuy():返回 bool,指示订单是否购买

  • issell():返回 bool,指示订单是否销售

  • alive():如果订单处于部分或接受状态,则返回 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 的 iterable

  • dt:datetime(浮点)创建/执行时间

  • 大小:请求/执行的大小

  • 价格:执行价格注:如果未给出价格且未给出价格限制,则将使用创建订单时的收盘价作为参考

  • pricelimit:保留 StopLimit 的 pricelimit(首先有触发器)

  • trailamount:跟踪站点的绝对价格距离

  • trailpercent:跟踪站点的价格距离百分比

  • 价值:整个钻头尺寸的市场价值

  • comm:整个位执行的佣金

  • pnl:由该位生成的 pnl(如果某个对象已关闭)

  • 保证金:订单产生的保证金(如有)

  • psize:当前打开的位置大小

  • pprice:当前未平仓价格

类 backtrader.order.OrderExecutionBit(dt=None,size=0,price=0.0,closed=0,closedvalue=0.0,closedCommand=0.0,openedvalue=0.0,openedCommand=0.0,pnl=0.0,psize=0,pprice=0.0)

用于保存有关订单执行的信息。“位”不确定订单是否已完全/部分执行,它只保存信息。

成员属性:

  • dt:datetime(浮点)执行时间

  • 大小:执行了多少

  • 价格:执行价格

  • 关闭:有多少执行关闭了现有职位

  • 打开:有多少执行打开了一个新的位置

  • 开放价值:“开放”部分的市场价值

  • 封闭价值:“封闭”部分的市场价值

  • closedcomm:“已关闭”零件的佣金

  • openedcomm:“打开”零件的佣金

  • 价值:整个钻头尺寸的市场价值

  • comm:整个位执行的佣金

  • pnl:由该位生成的 pnl(如果某个对象已关闭)

  • psize:当前打开的位置大小

  • pprice:当前未平仓价格


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组