Backtrader 教程:订单 - 常规

  |  

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

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

  • 创建

    通过 Strategy 的方法: buy\``, sell and close (Strategy) which return an order` 实例作为参考

  • 消除

    通过Strategy的方法: cancel (Strategy),它接受一个订单实例来操作

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

  • 通知

    To Strategy 方法: notify_order (Strategy) 报告一个order实例

订单创建

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

  • data (默认值: None

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

  • size (默认值: None

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

    如果为None ,则通过getsizer检索的sizer实例将用于确定大小。

  • price (默认: None

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

    NoneMarket单和Close单有效(市场决定价格)

    对于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 : 额外的代理实现可能支持额外的参数。 backtrader会将 kwargs 传递给创建的订单对象

    示例:如果backtrader直接支持的 4 种订单运行类型还不够,例如在 Interactive Brokers 的情况下,可以将以下内容作为 kwargs 传递:

    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的情况下,相同状态的通知甚至可能发生多次。此状态不会在回测代理中看到(匹配时不考虑交易),但肯定会由真实代理设置。

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

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

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

订单状态值

定义如下:

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

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

  • Order.Accepted : broker已接受订单,并且它在系统中(或已经在交易所中)等待根据设置的参数(如运行类型、大小、价格和有效性)运行

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

    order.executed.exbits包含ExecutionBits的完整列表,详细说明了部分填充

  • Order.Complete : order已完全成交的平均价格。

  • Order.Rejected : broker拒绝了订单。 broker可能不接受参数(例如,确定其生命周期的valid参数)并且order不能被接受。

    原因将通过strategynotify_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:当前平仓价格

推荐阅读

相关文章

Backtrader分数大小

首先,让我们用两行总结反向交易方法的工作原理:它就像一个带有基本构建块 ( Cerebro ) 的建筑套件,可以插入许多不同的部件基本分布包含许多部分,如指针、分析器、观察器、 Sizer 、过滤器、数据馈送、经纪人、佣金/资产信息方案,...

Backtrader在同一轴上打印

上一篇文章期货和现货补偿,在同一空间上绘制原始数据和略微(随机)修改的数据,但不是在同一轴上。 从该帖子中恢复第 1张图片。 人们可以看到: 图表的左侧和右侧有不同的刻度 当查看在原始数据周围振荡+- 50点的旋转红line(随机数据)时,这一点最为明显。

Backtrader教程:安装

要求和版本 backtrader 是独立的,没有外部依赖关系(除非要绘图) 基本要求是: Python 2.7 Python 3.2 / 3.3/ 3.4 / 3.5 pypy/pypy3 如果需要绘图,则其他要求: Matplotlib >= 1.4.

Backtrader教程:仓位

资产的头寸通常从策略中检查: position (财产)或 getposition(data=None, broker=None) 这将返回策略在默认broker状态下datas[0]的位置,由cerebro 仓位只是指示: 资产被持有size 平均价格price 它作为一种状态,

Backtrader教程:数据馈送 - 重新采样

如果数据仅在单个时间范围内可用,并且必须在不同的时间范围内进行分析,则是时候进行一些重新采样了。 “重采样”实际上应该称为“上采样”,因为一个人从源时间帧到更大的时间帧(例如:几天到几周) backtrader 内置支持通过筛选器对象传递原始数据,从而进行重采样。

Backtrader 教程:订单 - StopTrail

版本1.9.35.116将StopTrail和StopTrailLimit订单运行类型添加到回测库中。笔记这仅在回测中实现,还没有针对实时经纪人的实现笔记更新为1.9.36.116版本。盈透证券支持StopTrail 、 StopTrailLimit和OCO 。

Backtrader教程:数据馈送 - 雅虎

2017年5月,雅虎停止了现有的CSV格式历史数据下载API。 一个新的API(这里命名v7)很快被标准化并已实现。 这也带来了实际CSV下载格式的变化。 使用 v7 API/格式 从版本1.9.49.116 开始,这是缺省行为。

Backtrader 教程:指针 - 时间框架混合

版本 1.3.0.92提供了混合来自不同时间范围的数据(来自数据馈送和/或指针)的可能性。背景:指针是智能的哑对象。他们很聪明,因为他们可以进行复杂的计算。他们是愚蠢的,因为他们在不知道哪些来源为计算提供数据的情况下进行操作像这样:如果提供值的数据源在Cerebro引擎内具有不同的时间范围、不同的长度,则指针将中断。

Backtrader教程:数据馈送 - 熊猫

注意 pandas 并且必须安装其依赖项 支持Pandas Dataframes似乎受到很多人的关注,他们依赖于已经可用的解析代码来分析不同的数据源(包括CSV)和Pandas提供的其他功能。 数据馈送的重要声明。 注意 这些只是 声明。不要盲目拷贝此代码。

Backtrader动量策略

在另一篇伟大的文章中,泰迪·科克(Teddy Koker)再次展示了算法交易策略的发展之路: 研究优先应用 pandas 回溯测试,然后使用 backtrader 荣誉!!! 该帖子可以在以下位置找到: 泰迪·科克(Teddy Koker)给我留言,问我是否可以评论 backtrader的用法。