查询结果偏离预期?来了解CTP的报单函数及委托状态查询

论坛 期权论坛 期权     
真格量化   2019-9-17 09:42   7158   0


部分用户在使用真格量化设计策略时因为对交易柜台的机制不熟悉导致对委托、成交、持仓及资金的状态查询与预期不一致,我们将通过介绍CTP的报单机制来说明正确的查询方法。






CTP报单函数简介


ReqOrderInsert
请求报单


OnRspOrderInsert
CTP核心返回的包含错误信息的报单响应


OnRtnOrder
交易系统返回的报单状态,每次报单状态发生变化时被调用。一次报单过程中会被调用数次(例如,如果一笔委托一次性成交则可收到3次委托回报):交易系统将报单向交易所提交时,交易所撤销或接受该报单时,该报单成交时。






例如我们在真格量化系统日志中见到的委托回报:

所以收到一条委托回报并不能说明委托已经成功(即被交易所接受),用户仍需根据委托编号来查询其委托状态。


例如在真格量化中查询委托的status状态:







新增处理方式:报单在交易所端校验失败,被交易所拒绝后,CTP 系统同样通过此接口返回报错信息;其中的 OrderStatusMsg 字段包含报错信息。


OnErrRtnOrderInsert
此接口仅在报单被 CTP 端拒绝时被调用用来进行报错。


OnRtnTrade
如果该报单由交易所进行了撮合成交,交易所再次返回该报单的状态(已成交)。并通过此函数返回该笔成交。


报单成交之后,一个报单回报(OnRtnOrder)和一个成交回报(OnRtnTrade)会被发送到客户端,报单回报中报单的状态为“已成交”。建议开发者将成交回报作为报单成交的标志,因为 CTP的交易核心在收到 OnRtnTrade 之后才会更新该报单的状态。如果客户端通过委托回报来判断报单成交与否并立即平仓,有极小的概率会出现在平仓指令到达 CTP交易核心时该报单的状态仍未更新,就会导致对已经持有的仓位无法平仓。


报单序列号


报单序号用于在查询中区分不同的报单。



在CTP和交易所中,每笔委托报单都有 3 组唯一序列号,保证其与其他报单是不重复的。

FrontID + SessionID + OrderRef


用户账户登录之后,交易核心会返回对应此次连接的前置机编号 FrontID 和会话编号 SessionID。这两个编号在此次连接中是不变的。


OrderRef 是报单操作的核心数据结构 CThostFtdcInputOrderField 中的一个字段。开发者可以让 OrderRef 在一次登录期间从MaxOrderRef 起逐一递增,以保证报单的唯一性。开发者也可以选择不对它赋值,则交易核心会自动赋予一个唯一性的值。






这组报单序列号可以由客户端或开发者自行维护,客户端或开发者可以通过该序列号对未成交的委托随时进行撤单操作。


在真格量化中用户可以通过委托对象的id来对委托单进行状态查询、撤单等各种操作:







ExchangeID + TraderID + OrderLocalID


交易核心将报单提交到报盘管理之后由交易核心生成 OrderLocalID并返回给客户端。ExchangeID为合约所在交易所的代码,TraderID由交易核心选定返回。与第一组序列号不同的是:该序列号是由CTP平台的交易核心维护。


ExchangeID + OrderSysID


交易所在接收了报单之后,会为该报单生成报单在交易所的编号OrderSysID。再经由综合交易平台转发给客户端。ExchangeID是固定的。客户端也可以通过这组序列号进行撤单操作。这组序列号由交易所维护。


委托回报


CTP使用的函数是 OnRtnOrder。核心数据结构为 CThostFtdcOrderField。


报单回报主要作用是通知客户端该报单的最新状态,如已提交,已撤销,未触发,已成交等。


开发者应注意,每次委托状态有变化,该函数都会被调用一次。


VolumeTotalOriginal & VolumeTraded & VolumeTotal


上述三个字段分别对应该报单的原始报单数量,已成交数量和剩余数量。


如果报单是分笔成交,则每次成交都会有一次 OnRtnOrder 返回。


条件单触发时,交易核心会对该报单的合法性进行校验,如果校验失败,通过函数 OnRtnErrorConditionalOrder返回校验失败的错误信息。


OrderStatus


0 全部成交
1 部分成交,订单还在交易所撮合队列中
3 未成交,订单还在交易所撮合队列中
5 已撤销
a 未知-订单已提交交易所,未从交易所收到确认信息


在真格量化中其对应事件监听函数为OnOrderChange:





成交回报


CTP使用的函数是OnRtnTrade。


函数返回报单成交回报,每笔成交都会调用一次成交回报。成交回报中只包含合约,成交数量,价格等信息。成交回报只包含该笔成交相关的信息,并不包含该笔成交之后投资者的持仓,资金等信息。


函数ReqQryTradingAccount 用于查询投资者最新的资金状况。如保证金,手续费,持仓盈利,可用资金等。


我们建议开发者以成交回报来判断报单是否成交,以及成交数量和价格;若以委托回报(状态为“部分成交或全不成交”)进行判断,由于报单回报与成交回报之间存在理论上的时间差(尽管微乎其微),而 CTP 后台是以成交回报为准更新报单状态的,因此有可能导致对持仓平仓不成功。而想判断成交后账户资金的变化,其查询也可以在确认成交状态后来进行,以确保查询到的资金状况已经反映最新成交所带来的变化。


在真格量化中其对应的事件监听函数为OnTradeDeal:





— — — — — — E N D — — — — — —



真格量化可访问:
https://quant.pobo.net.cn


真格量化微信公众号,长按关注:

遇到了技术问题?欢迎加入真格量化Python技术交流QQ群  726895887






往期文章:
Numpy处理tick级别数据技巧
真正赚钱的期权策略曲线是这样的
多品种历史波动率计算
如何实现全市场自动盯盘
AI是怎样看懂研报的
真格量化策略debug秘籍
真格量化对接实盘交易
常见高频交易策略简介

如何用撤单函数改进套利成交

Deque提高处理队列效率

策略编程选Python还是C++

如何用Python继承机制节约代码量

十大机器学习算法
如何调用策略附件数据

如何使用智能单

如何扫描全市场跨月价差

如何筛选策略最适合的品种

活用订单类型规避频繁撤单风险

真格量化回测撮合机制简介

如何调用外部数据

如何处理回测与实盘差别

如何利用趋势必然终结获利

常见量化策略介绍

期权交易“七宗罪”

波动率交易介绍

推高波动率的因素

波动率的预测之道

趋势交易面临挑战
如何构建知识图谱
机器学习就是现代统计学

AI技术在金融行业的应用

如何避免模型过拟合

低延迟交易介绍

架构设计中的编程范式

交易所视角下的套利指令撮合

距离概念与特征识别

气象风险与天气衍生品

设计量化策略的七个“大坑”

云计算在金融行业的应用

机器学习模型评估方法
真格量化制作期权HV-IV价差
另类数据介绍

TensorFlow中的Tensor是什么?

机器学习的经验之谈

用yfinance调用雅虎财经数据

容器技术如何改进交易系统
Python调用C++
如何选择数据库代理
统计套利揭秘

[h1]一个Call搅动市场?让我们温习一下波动率策略[/h1][h1]如何用真格量化设计持仓排名跟踪策略[/h1][h1]还不理解真格量化API设计?我们不妨参考一下CTP平台[/h1][h1]理解同步、异步、阻塞与非阻塞[/h1][h1]隐波相关系数和偏度——高维风险的守望者[/h1]Delta中性还不够?——看看如何设计Gamma中性期权策略

[h1]Python的多线程和多进程——从一个爬虫任务谈起[/h1]线程与进程的区别
皮尔逊相关系数与历史K线匹配

Python2和Python3的兼容写法
Python代码优化技巧

理解Python的上下文管理器

如何写出更好的Python代码?这是Python软件基金会的建议
评估程序化模型时我们容易忽视的指标

看看如何定位Python程序性能瓶颈

什么是Python的GIL

投资研究中的大数据分析趋势及应用

理解CTP中的回调函数

如何围绕隐含波动率设计期权交易策略                    
看看如何用Python进行英文文本的情感分析
算法交易的分类

Python编码的最佳实践总结

什么是波动率锥?如何用波动率锥设计期权策略?
期权的波动率策略与时间价值收集策略对比

期权用于套期保值和无风险套利

隐含波动率对期权策略的影响

卖出期权交易的风险管理原则和技巧
期权交易中的“大头针”风险
期权做市商策略简介

精细化您的交易——交易成本评估与交易执行策略
海外市场交易执行策略的实践
设计期权套期保值方案时应注意的问题
美式期权、欧式期权比较分析——定价与风险管理
构建您的AI时代武器库——常用的机器学习相关Python库
期权波动率“微笑曲线”之谜
运算任务愈发繁重,如何加速Python程序运行?
证券市场微观结构理论模型是什么

是瞬间成交还是漫长等待?——如何衡量市场流动性
波动率指数及其衍生品介绍

Python的异常处理技巧

Python中的阻塞、异步与协程

"香草"之外的更多选择——几种常见的路径依赖奇异期权
什么是CTP?——了解上期所CTP快速交易系统
了解季节性——以谷物和油籽为例
是前因还是后果?——在真格量化中进行格兰杰因果检验

Python导入模块的技巧
Python程序员常犯的十个错误

搜索数据泄露天机?——舆情指数与期货行情关联性分析思路

机器学习常见算法分类汇总

如何使用Data Pipeline 自动化数据处理工作?
CTP API的委托介绍和在真格量化中的订单流控制
高频交易对市场的影响
期货行情及其组织形式——以上期所为例
理解并行与并发
郑商所和大商所套利指令及在真格量化的实现
机器学习用于金融市场预测面临的挑战
高频交易中风险控制的常用措施


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:870
帖子:180
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP