订单执行原则

通常订单可分类为 市价单Market、收盘价单Close、限价单Limit、止损单Stop、止损限价单StopLimit、止损跟踪单StopTrail、止损跟踪限价单StopTrailLimit,在用buy、sell方法创建订单时,exectype参数指明了创建的订单类型

1、当前数据已经产生,不能用于执行交易

def next(self):if self,data.close > self.sma:self.buy()

在这个逻辑中,如果当日收盘价close高于移动平均价,就创建买单。但是买单无法在当天以当天的收盘价执行,因为next方法中,close是已经发生的数据。因此只能用下一根bar的某个价位执行成交,成交价取决于order类型。
因此,订单的首个可执行的时间在下一根bar上

2、成交量不影响订单执行
在实际交易中,成交量是会影响交易的。如果交易员是在进行低流动性资产的买卖,或者在bar的极端点(最高点或最低点)进行的交易,成交量将影响实盘交易。
但是触及最高点或最低点是很少发生的,所以通常所选资产将有足够的流动性来吸引任何常规交易的指令,因此backtrader假设成交量不影响交易

注意:以上两个原则是默认行为,其实是可以改变的

不同类型订单的执行逻辑

Market 市价单

市价单以下一根实际bar的开盘价执行。假设5号通过buy创建了订单,迭代到了下一根实际bar,假设是6号,会以6号的开盘价执行订单,并触发 notify_order。

Close 收盘价单

收盘价单将以下一根bar的收盘价执行

Limit 限价单

在下一个bar,在给定的限制价位price或者更好的价位执行的订单。

以买单为例,如果下一个bar开盘价低于price,则以开盘价执行;若开盘价高于price同时,最低价低于price。卖单相反。

如果订单设置了 有效期,并且到了有效期仍然没有执行,则自动取消订单

2022-01-23 at 21:37:51|INFO|2021-10-18, Buy Create, exectype Limit, ClosePrice 14.99, OpenPrice 14.81, valid 2021-10-22, LimitPrice 14.5403
2022-01-23 at 21:37:51|INFO|2021-10-20, Buy DaY Open 15.1, Close 14.58, High 15.1, Low 14.53
2022-01-23 at 21:37:51|INFO|2021-10-20, Buy Executed Price 14.5403, Cost 14.5403, Comm 0.0145403

如上为backtrader创建并执行买单的运行日志:

从第一条日志获取到有用的内容:
在2021-10-18,创建了一个限价单,有效期到 2021-10-22,限制价格为14.5403
第二、三条日志:
当迭代到2021-10-20时,当天的开盘价15.1,收盘价14.58,最高价15.1,最低价14.53。说明当天,开盘价>限制价格>最低价格,则买单执行价格为限制价格。

Stop 止损单

在下一个bar,当资产触及设定止损价格price时,触发订单按市价单方式市价成交。

以买单为例,如果下一个bar开盘价向上突破大于等于止损price(相当于开盘突破),则以开盘价执行;若开盘价低于price,同时最高价向上突破大于等于price(相当于盘中突破),则以price价格执行买单。

这个逻辑说明这种买单在有空方仓位时可用于止损。如果订单设置了有效期,并且到了有效期仍未执行,则自动取消订单

如果没有空方仓位,这种买单的含义就不是止损,而是向上突破买入,也就是当价格向上突破price时,市价买入,所以这种订单更贴合本质的称呼应该是停止单,是基于突破某价位而执行的订单

止损卖单逻辑恰好相反,在有多方仓位时可用于止损。在下一个bar,如果开盘价向下突破低于止损价,则以开盘价执行;若开盘价高于止损价,同时最低价低于止损价,则卖单以止损价执行。当然,即使没有多方仓位,但在允许做空的情况下,也可以发出这种向下突破卖出的卖单

2022-01-23 at 21:51:22|INFO|2021-11-11, Buy Create, exectype Stop, ClosePrice 13.51, OpenPrice 13.02, valid 2021-11-15 StopPrice 13.9153
2022-01-23 at 21:51:22|INFO|2021-11-15, Buy DaY Open 13.58, Close 14.21, High 14.3, Low 13.58
2022-01-23 at 21:51:22|INFO|2021-11-15, Buy Executed Price 13.965300000000001, Cost 13.965300000000001, Comm 0.013965300000000002

从第一条日志获取到有用的内容:
在2021-11-11,创建了一个止损买单,有效期到 2021-11-15,限制价格为 13.9153
第二、三条日志:
当迭代到2021-11-15时,当天的开盘价13.58,最高价14.3,说明当天,开盘价<限制价格<最高价格,则买单执行价格为限制价格。

StopLimit 止损限价单

self.buy(exectype=bt.Order.StopLimit,price=10,  # 止损价plimit=10.5。# 限价
)

当资产价格触及设定价格price,触发订单以限价plimit或更好的价格执行。

以买单为例,如果下一个bar开盘价高于止损价price,或开盘价低于price同时最高价高于price,则触发订单以限价单方式执行。注意对于买单来说,限价plimit必须设置为不小于触发价price

止损限价单卖单执行逻辑恰好相反,在下一个bar如果开盘价向下突破低于price,或开盘价高于price同时最低价低于price,则触发订单以Limit限价单方式执行。注意对于卖单来说,限价plimit必须设置为不大于触发价price

2022-01-23 at 22:13:53|INFO|2021-10-13, Buy Create, exectype StopLimit, ClosePrice 15.22, OpenPrice 14.28, valid 2021-10-17  LimitPrice 15.6766 StopPrice 15.372200000000001
2022-01-23 at 22:13:53|INFO|2021-10-14, Buy DaY Open 15.0, Close 15.23, High 15.58, Low 14.9
2022-01-23 at 22:13:53|INFO|2021-10-14, Buy Executed Price 15.422200000000002, Cost 15.422200000000002, Comm 0.015422200000000002

从第一条日志获取到有用的内容:
在2021-10-13,创建了一个止损限价买单,有效期到2021-10-17,限制价格为15.6766,止损价格为15.372200000000001
第二、三条日志:
当迭代到2022-01-14时,当天的开盘价15.0,最高价15.58,最低价14.9。说明当天,开盘价<止损价<最高价,触发执行限价单 -> 开盘价<限制价格<最低价,最终以限制价格成交。

StopTrail 止损跟踪单

百分比跟踪量
self.sell(exectype=bt.Order.StopTrail,trailpercent=0.05  # 百分比跟踪量
)

根据每个bar收盘价动态调整止损价,其余逻辑于Stop单一样。

以卖单止损为例子,先以当日收盘价计算止损价,迭代到次日若未成交,并且收盘价上升了,则动态调高止损价,否则不调整止损价,继续寻找卖出机会。

上面代码采用的是百分比跟踪量,执行逻辑是:
1、计算当日止损价

stop_price = 当日收盘价 * (1-trailpercent)

2、迭代到下一根bar时,若开盘价低于止损价 stop_price ,则以开盘价执行卖单。若开盘价高于 stop_price 同时最低价低于stop_price,则以 stop_price 价格执行
3、若未触发执行,且收盘价比昨日上涨,则更新 stop_price

绝对跟踪量 trailamount
self.sell(exectype=bt.Order.StopTrail,trailamount=0.1  # 绝对跟踪量
)

止损价计算公式

stop_price = 当天收盘价 - trailamount

StopTrailLimit 止损跟踪限价单

self.sell(exectype=bt.Order.StopTrailLimit,trailamount=0.05,plimit=9.05
)

与止损跟踪单 StopTrail 一样,根据每个bar收盘价动态调整止损价,差别是一旦触发了止损价,则按限价单方式执行。

以卖单止损为例,先以当日收盘价计算止损价,迭代到次日若未成交,并且收盘价上升了,则动态调高止损价。否则不调整止损价,继续寻找卖出机会, 某天符合卖出条件(低于止损价),则按限价单的逻辑卖出。
注意:这里限价plimit是固定的,不会动态调整,另外要说明的是。backtrader内置的回测broker支持StopTrail 和 StopTrailLimit。但其他内置broker不支持。

Backtrader(十三)- Order订单 -订单类型、订单执行逻辑相关推荐

  1. .net coer IQueryable类型的执行逻辑(延迟执行),认真看,你会有收获的。

    先看图 IQueryable 在使用EF框架时候,我们都会使用Linq表达来创建sql语句式进行数据查询 使用Linq表达式创建的变量 就是IQueryable变量 在完成IQueryable的创建以 ...

  2. 「SAP技术」SAP MM ME2N报表能按‘order acknowledgement‘查询采购订单

    「SAP技术」SAP MM ME2N报表能按'order acknowledgement'查询采购订单 执行事务代码ME2N, 点击'Dynamic Selections'按钮 ,进入如下界面, 找到 ...

  3. oracle事务处理类型,Oracle EBS-SQL (OM-5):检查订单事务处理类型.sql

    SELECT HO.NAME OU                                                                           名称, t.NA ...

  4. pdd.order.basic.list.get订单基础信息列表查询接口(拼多多店铺订单列表查询接口)代码对接教程

    pdd.order.basic.list.get订单基础信息列表查询接口(拼多多店铺订单列表查询接口)代码对接教程如下: 1.公共请求参数 参数名称 参数类型 是否必填 参数描述 (代码接口教程wx1 ...

  5. U8 销售订单对应的生产订单缴库情况执行报表

    文章目录 前言 一.功能 二.脚本 总结 前言 本文主是帮助一位有该需求的网友写的,感觉有点实用价值,便分享出来(含sql脚本) 一.功能 U8系统中销售订单对应的生产订单缴库情况执行报表,执行结果如 ...

  6. 拼多多店铺订单API接口(pdd.order.basic.list.get订单基础信息列表查询接口)代码对接教程

    拼多多店铺订单API接口(pdd.order.basic.list.get订单基础信息列表查询接口)代码对接教程如下: 1.公共请求参数 参数名称 参数类型 是否必填 参数描述(接口代码教程wx199 ...

  7. 112_Power Pivot 销售订单按 sku 订单类型特殊分类及占比相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 经过了一个双十一后,天天面对的都是订单.于是有了关于销售订单按sku类型分类的需求. 说明:(暂且不讨论这样分类 ...

  8. 10天手敲一个SpringBoot网上商城项目(九)—— 确认订单、创建订单功能的实现及AOP

    静态资源及sql文件分享 链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr 提取码:23gr 文章目录 确认订单 1.确认订单-持 ...

  9. 美多商城之订单(我的订单)

    三.我的订单 1.请求方式 选项 方案 请求方法 GET 请求地址 /orders/info/(?P<page_num>\d+)/ # 我的订单url(r'^orders/info/(?P ...

最新文章

  1. 20 道 Spring Boot 面试题
  2. Linux sqlplus权限不足,sqlplus登录用户提示权限不足
  3. 【线性代数公开课MIT Linear Algebra】 第十八课 行列式的性质
  4. C语言大写字母E转小写e,C语言 大小写字母转换
  5. spring事务 jdbc_Spring事务管理示例JDBC
  6. 共轭梯度法(Conjugate gradient)详解
  7. Ceph OSD处理客户端写操作处理流程
  8. python属于面向对象的还是面向过程的呀-面向过程和面向对象的理解
  9. PPC上网设置明细图文并茂
  10. c语言文件中获取单词,从文本文件中读取单个单词并翻译 - C
  11. 网页中MP4视频格式要求
  12. 4n35光耦引脚图_常见的高速光耦引脚图
  13. 逾期的人真有这么多吗?
  14. 爬动的蠕虫(无循环版)
  15. 以太坊ETH源码分析(1):地址生成过程
  16. 我的世界服务器怎么做无限商店,我的世界无限商店指令 | 手游网游页游攻略大全...
  17. Base64 编码原理及代码实现
  18. 数组(一维数组与二维数组)
  19. 用计算机亩换算成平方,亩平米换算(平方米换算亩计算器)
  20. GitHub 前 CTO:全面微服务是最大的架构错误!网友:这不是刚改完吗...

热门文章

  1. POJ 1679 解题报告
  2. sql 游标循环(cursor)
  3. 通过 Java 和 RestTemplate 使用客户端证书身份验证
  4. 零基础学习CANoe Panel(1)—— 新建 Panel
  5. 沃舍尔算法_【图论】计算机科学:Floyd-Warshall算法(弗洛伊德算法)
  6. 两年Java开发经验,裸辞之后筹备半年时间,重面阿里终于如愿拿到P6级offer [Java岗],你知道我是怎么走过来的吗?
  7. PAT(乙级)1089 狼人杀-简单版(JAVA)
  8. 2022-2027年中国机场酒店市场规模现状及投资规划建议报告
  9. SecureCRT乱码问题---已解决
  10. data:text/html html contenteditable,contentEditable