Python API面纱下的函数——基于CTP的国内期货程序化交易之报单流程讲解

论坛 期权论坛 期权     
真格量化   2019-9-2 11:05   9720   0


很多用户已经阅读了真格量化的Python API文档,知道了其是对一些交易柜台,比如CTP C++ API的封装。这里我们可以看看这些API在C++中的原始面貌。


我们还是以CTP柜台为例。与海外市场很多连续交易的品种相比,国内期货市场的期货品种需要考虑更多的规则。


第一就是交易时间段。许多外盘品种能全天23小时连续交易,而国内许多期货品种,全天分四个时间段交易,分别为9:00至10:15、10:30至11:30、13:30至15:00及21:00至次日02:30。交易时间段多,平仓时间段也多,这样无形中就增加了很多业务逻辑。


例如在真格量化中,“收盘事件”包含了小节交易的暂停事件:






第二是今昨仓的区分,例如上期所的期货品种平仓时分平今和平仓,这样平仓报单时就要根据成交时间分别判断,是前一个交易日的单子还是当前交易日的单子,否则报单参数不正确,单子将直接被交易系统拒绝。


在CTP开发过程中主要用到的头文件为:ThostFtdcTraderApi.h、ThostFtdcUserApiDataType.h及ThostFtdcUserApiStruct.h,动态库为:libthosttraderapi.so。下面是一些代码示例:


  • 在C++中创建CTP api的实例:


CThostFtdcTraderApi *pTradeApi = CThostFtdcTraderApi::CreateFtdcTraderApi(dirName);



通过调用CreateFtdcTraderApi()创建API实例——pTradeApi,随后调用该实例发起各种请求,比如连接服务器、用户登录、报单、撤单、查询持仓、查询资金等等。


2. 创建CTP API回调实例:


CFtdcTradeSpi *pTradeSpi = new CFtdcTradeSpi(pTradeApi, this);



这个需要自己编写相应实现类,需要继承上期技术提供的CThostFtdcTraderSpi类。重写该类里面的方法,以处理服务器发过来的各类数据。


3. 将上述两个实例关联起来,并发起连接服务器请求:


pTradeApi->RegisterSpi(pTradeSpi);
pTradeSpi->connect(serverAddr, brokerId, username, password);



连接服务器以及实例初始化相关代码:



这可以对应真格量化的账户登录Python代码:

  在C++中连接请求发出后,OnFrontConnected()会响应请求,然后在该函数内可以调用登录函数pTradeApi_->ReqUserLogin()完成用户登录操作,相应的OnRspUserLogin()会响应请求。由于国内期货在交易日内首次登录时需要做投资者结算结果确认操作,所以在OnRspUserLogin()函数内,可以进一步调用pTradeApi_->ReqSettlementInfoConfirm()做投资者结算结果确认,确认结果将在OnRspSettlementInfoConfirm()内返回。做完投资者结算结果确认操作,整个服务器连接与用户登录过程就完成了,可以正常下单交易了。


C++登录账户部分:

C++确认结算单部分:

4. 期货报单:
       (1)ReqOrderInsert():报单请求

开发者需要正确填写买卖/方向、开仓/平仓、市价/限价、委托数量、委托价格等等,填写完毕就可以调用ReqOrderInsert()报单了。
(2)OnRspOrderInsert():报单请求应答

报单成功后,该函数就会被回调。当然我们也可以用OnRtnOrder()来监控报单的状态变化。


(3)OnRtnOrder():委托变化通知



当委托状态发生变化时,该函数会被回调。一般常见的委托状态主要有:未知、未成交还在队列中、部分成交还在队列中、完全成交等。


对应真格量化中查委托的状态:

一次报单,如果数量比较多,一般不会一次全部成交,而是会分多批次成交,所以该函数会不断被回调。随着不断回调,每次返回的委托量、成交量、剩余量等数据会不断变更。这也是我们在真格量化中委托发出后,一般会受到多条委托状态变化回报的原因。


(4)OnRtnTrade():成交信息变化推送通知

该函数比较重要,返回的每一条信息都是成交信息,里面包含成交量、成交价、成交费用等等,这些都是投资者关心的数据,对应真格量化的OnTradeDeal函数。


5.  查询期货账号持仓:


查询持仓主要调用pTradeApi_->ReqQryInvestorPosition(),按照文档说明填写合适的参数即可。查询持仓响应函数为:



该函数一般需要由开发者自己重写,应注意有时持仓数据不会一次全部返回,而是随着成交的进行而一批一批返回,需要开发者监听成交状况的变化而进行更新,相当于在真格量化中在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++
如何选择数据库代理
统计套利揭秘

[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程序员常犯的十个错误

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














































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

本版积分规则

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

下载期权论坛手机APP