Menu
CTP程序化交易系统开发系列 | CTP程序化交易系统开发(一)CTP交易接口
时间:2019-10-12
浏览:11538


自从综合交易平台(CTP)的 API 开放以来,越来越多的人开始编写自己的程序化交易系统,CTP 编程重要的是接口文件,本文主要介绍一下 CTP 的接口。



No.1

CTP 系统介绍



综合交易平台(Comprehensive Transaction Platform),是专门为期货公司开发的一期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。系统能够同时连通国内四家期货交易所,支持国内商品期货和股指期货的交易结算业务,并能自动生成、报送保证金监控文件和反洗钱监控文件。


CTP 是基于多线程的,至少有两个线程在工作,一个是程序主线程,另一个是 API 工作线程。API 底层封装了 TCP 通讯,通过函数回调来使用 API 接口。文档手册里的一个示意图。


No.2

CTP 接口概述



CTP 的 API 封装分为两大部分,一个是 MdUserApi(thostmduserapi.dll)负责行情部分,另一个是 TraderApi(thosttraderapi.dll)负责交易部分。



No.3

MdUserApi 工作流程图



CTP 的行情模块分两块,一个是同步查询 API(CThostFtdcMdApi),一个是异步回报 API(CThostFtdcMdSpi),这里定义了一个包装类,来管理这两类 API,即 MyRecv 来封装 CThostFtdcMdSpi,CThostFtdcMdApi 直接使用。


MdApi 工作流程图


第一步

用 CreateFtdcMdApi 创建 CThostFtdcMdApi 实例,例如_api。 


第二步

创建 CThostFtdcMdSpi 实例,例如_spi,用 RegisterSpi 将_spi 注册到_api 中。 


第三步

用 RegisterFront 将行情前置地址注册到_api 中。 


第四步

用 Init() 初始化_api,初始化的过程就是与服务建立连接的过程。 


第五步

回调函数 OnFrontConnect 在与服务器成功建立连接时被执行,此时用 ReqUserLogin 登录账户。

 

第六步

回调函数 OnRspUserLogin 在账户登录成功时被执行,此时用 SubscribeMarketData 订阅行情/用 SubscribeForQuoteRsp 订阅询价。此后,行情接口已经可以正常工作了。



No.4

TraderApi 工作流程图



TraderApi 的工作流程与 MdApi 略有差异:TraderApi 需要在初始化之前定于私有流和公有流;在账户登录之前进行客户端认证。


TraderApi工作流程图


第一步

用 CreateFtdcTraderApi 创建 CThostFtdcTraderApi 实例,例如_api。 


第二步

创建 CThostFtdcTraderSpi 实例,例如_spi,用 RegisterSpi 将_spi 注册到_api 中。 


第三步

用 SubscribePrivateTopic 订阅私有流,用 SubscribePublicTopic 订阅公有流。 


第四步

用 RegisterFront 将行情前置地址注册到_api 中。 


第五步

用 Init() 初始化_api,初始化的过程就是与服务建立连接的过程。 


第六步

回调函数 OnFrontConnect 在与服务器成功建立连接时被执行,此时用 ReqUserAuthMethod 认证客户端。 


第七步

回调函数 OnRspUserAuthMethod 在客户端认证成功之后被执行,此时用 ReqUserLogin 登录账户。 


第八步

回调函数 OnRspUserLogin 在账户登录成功时被执行。此后,交易接口就可以正常工作了,交易者用 Req 开头的请求函数进行查询,在 On 开头的回调函数中获得通知。


以上部分介绍了CTP程序化和行情和交易接口,各接口的方法请参考上期信息的CTP开发文档,里面有详细介绍。

(网址:http://www.simnow.com.cn/static/softwareDownload.action)


CTP_API 开发文档图


- The End -


本文仅供参考,投资有风险

请投资者自行判断投资机会并承担投资风险


爱晖资产

专注于量化领域的证券基金资产管理公司