CTP API的委托介绍和在真格量化中的订单流控制

因为真格量化封装了CTP API,所以许多与交易相关的流程会继承CTP本身的设计,我们有必要进行了解。


用CTP进行下单涉及到委托单的下单和撤单。
一,委托请求
1、普通委托下单(交易时段内下单,即预埋单时段以外时段)
其C++代码:


对应真格量化的Python代码:


2,普通委托撤单


其C++代码:


对应真格量化的Python代码:

 


二、委托回报:
一笔委托下单,如果成功,CTP平台会产生数笔回报;如果CTP平台如果校验出错,会返回一笔回报。不同委托下单,回报接口不一样。
在C++中:
1、预埋单委托
ReqParkedOrderInsert:
OnRspParkedOrderInsert
2、预埋单撤单
ReqParkedOrderAction:
OnRspParkedOrderAction
3、预埋单删除
ReqRemoveParkedOrder:
OnRspRemoveParkedOrder
4、删除预埋撤单请求
ReqRemoveParkedOrderAction:
OnRspRemoveParkedOrderAction
5、普通委托
ReqOrderInsert:
OnRspOrderInsert
6、普通委托撤单
ReqOrderAction:
OnRspOrderAction
在真格量化中,统一用OnOrderChange来监听委托回报:

 


三、委托指令的传输流程
对于委托报单流程,可参考这个示意图:


\1. 交易终端通过交易接口向交易前置提交投资者的报单申请。
\2. 主排队机从前置机订阅交易申请报文。
\3. 主排队机将发布的交易序列报文发送给从排队机要求确认。
\4. 从排队机收到待确认报文后将相关报文写入流水文件,并立即返回报文确认信息。
\5. 交易核心从主排队机订阅交易序列报文。
\6. 交易核心对收到的交易序列报文做合法性检查,检查出错误的交易申请报文后就会返回给交易前置一个
包含错误信息的报单响应报文,交易前置立即将该报文信息转发给交易终端。如果检出为合法的交易申
请报文,交易核心也会返回一个报单响应报文到交易前置,但是该报文不会被交易前置返回给交易终端。
\7. 两种情况:1,交易前置从交易核心订阅到错误的报单响应报文,以对话模式将该报文转发给交易终端。
2,交易核心返回给交易前置的响应报文是正确的,交易前置立即以私有模式返回对应报单的报单回报到
交易终端(图中前置机到交易终端8)。
\8. 两个过程:1,交易前置在订阅到交易核心的报单回报后,以私有模式将该报单回报发送到交易终端。2,
交易核心向交易前置发送了第一个报单回报后,立即产生向交易所申请该报单插入的申请报文,该报文
被报盘管理订阅。
\9. 报盘管理订阅到交易所报盘插入申请报文后,将该报文转发到对应报盘接口。
\10. 报盘收到报盘管理的报单申请报文后,通过交易所提供的交易接口将该笔报单发送到交易所。
\11. 报盘通过交易接口从交易所前置接收报单回报以及成交回报或出错的报单响应报文。
\12. 报盘将从交易所接收到的报单回报及成交回报或报单响应汇总到报盘管理。
\13. 主排队机从报盘管理订阅从交易所返回的报单信息。
\14. 主排队机将报文信息序列化后发送给从排队机进行确认。
\15. 从排队机收到待确认报文后将该报文写入流水,并立即返回报文确认信息。
\16. 交易核心从主排队机订阅所有的报单以及成交回报信息。
\17. 交易前置从交易核心订阅所有交易核心发布的交易结果数据。
\18. 交易前置将订阅到的交易结果数据分发到各交易终端。


四、委托出错
在CTP C++中:
OnErrRtnOrderInsert/OnErrRtnOrderAction
报盘将通过交易核心检查的报单发送到交易所前置,交易所会再次校验该报单。如果交易所认为该报单不合法,交易所会将该报单撤销,将错误信息返回给报盘,并返回更新后的该报单的状态。


当客户端接收到该错误信息后,就会调用OnErrRtnOrderInsert /OnErrRtnOrderAction函数, 而更新后的报单状态会通过调用函数OnRtnOrder 发送到客户端。如果交易所认为该报单合法,则只返回该报单状态(此时的状态应为:“尚未触发”)。
在真格量化中可以通过在OnOrderChange函数中检查委托对象的状态来判断委托是否出错:

 


五,OnOrderChange和OnTradeDeal配合控制订单流
在真格量化中对于下单流程的监控:


1,要即时查询委托或成交状态,应当在OnOrderChange或OnTradeDeal函数中查询,例如通过GetOrder或GetTradeDetail函数。


2、下单出错的话,也可以在OnOrderChange函数里处理,通过检查委托的状态status,来决定是否需要再次委托。


3、如果委托最终成交,可以在OnTradeDeal刷新持仓列表,例如通过GetPositions函数,来更新持仓信息,并通过全局变量传递给程序的其他需要用到持仓信息的部分。

 

— — — — — — 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++

如何选择数据库代理

统计套利揭秘

一个Call搅动市场?让我们温习一下波动率策略

如何用真格量化设计持仓排名跟踪策略

还不理解真格量化API设计?我们不妨参考一下CTP平台

理解同步、异步、阻塞与非阻塞

隐波相关系数和偏度——高维风险的守望者

Delta中性还不够?——看看如何设计Gamma中性期权策略

Python的多线程和多进程——从一个爬虫任务谈起

线程与进程的区别
皮尔逊相关系数与历史K线匹配

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

理解Python的上下文管理器

如何写出更好的Python代码?这是Python软件基金会的建议

评估程序化模型时我们容易忽视的指标

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

什么是Python的GIL

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

理解CTP中的回调函数

如何围绕隐含波动率设计期权交易策略                    

看看如何用Python进行英文文本的情感分析

算法交易的分类

Python编码的最佳实践总结

什么是波动率锥?如何用波动率锥设计期权策略?

期权的波动率策略与时间价值收集策略对比

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

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

卖出期权交易的风险管理原则和技巧

期权交易中的“大头针”风险

期权做市商策略简介

精细化您的交易——交易成本评估与交易执行策略

海外市场交易执行策略的实践

设计期权套期保值方案时应注意的问题

美式期权、欧式期权比较分析——定价与风险管理

构建您的AI时代武器库——常用的机器学习相关Python库

期权波动率“微笑曲线”之谜

运算任务愈发繁重,如何加速Python程序运行?

证券市场微观结构理论模型是什么

是瞬间成交还是漫长等待?——如何衡量市场流动性

波动率指数及其衍生品介绍

Python的异常处理技巧

Python中的阻塞、异步与协程

"香草"之外的更多选择——几种常见的路径依赖奇异期权

什么是CTP?——了解上期所CTP快速交易系统

了解季节性——以谷物和油籽为例

是前因还是后果?——在真格量化中进行格兰杰因果检验

Python导入模块的技巧

Python程序员常犯的十个错误

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

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

如何使用Data Pipeline 自动化数据处理工作?

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTPapi_交易开发实例 class CTraderSpi : public CThostFtdcTraderSpi { public: ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 virtual void OnFrontConnected(); ///登录请求响应 virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///投资者结算结果确认响应 virtual void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///请求查询合约响应 virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///请求查询资金账户响应 virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///请求查询投资者持仓响应 virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///报录入请求响应 virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///报操作请求响应 virtual void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///错误应答 virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 virtual void OnFrontDisconnected(int nReason); ///心跳超时警告。当长时间未收到报文时,该方法被调用。 virtual void OnHeartBeatWarning(int nTimeLapse); ///报通知 virtual void OnRtnOrder(CThostFtdcOrderField *pOrder); ///成交通知 virtual void OnRtnTrade(CThostFtdcTradeField *pTrade); private: ///用户登录请求 void ReqUserLogin(); ///投资者结算结果确认 void ReqSettlementInfoConfirm(); ///请求查询合约 void ReqQryInstrument(); ///请求查询资金账户 void ReqQryTradingAccount(); ///请求查询投资者持仓 void ReqQryInvestorPosition(); ///报录入请求 void ReqOrderInsert(); ///报操作请求 void ReqOrderAction(CThostFtdcOrderField *pOrder); // 是否收到成功的响应 bool IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo); // 是否我的报回报 bool IsMyOrder(CThostFtdcOrderField *pOrder); // 是否正在交易的报 bool IsTradingOrder(CThostFtdcOrderField *pOrder); };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值