首页 / 分享 / ctp接口解析-1

ctp接口解析-1

发布于 2019-8-30 04:12:51 作者 somewheve 来自 分享
这里记录了我对ctp接口分析与查找资料的全过程

你需要明白ctp平台是什么东西, 根据网上摘抄的一句话

综合交易平台CTP(Comprehensive Transaction Platform)是由上海期货信息技术有限公司(上海期货交易所的全资子公司)开发的期货交易平台,CTP平台以“新一代交易所系统”的核心技术为基础,稳定、高速、开放式接口,适合程序化交易软件运用和短线炒单客户使用。


那ctp接口的顾名思意就是ctp平台开放出的接口。这种接口能让我们能够快速进行下单撤单等等操作。 那我们如果去明白这个接口工作的全部过程呢 答案是 ---->

书读百变, 代码自现

ok让我们第一步先去simnow去下载看穿式的接口,然后打开下载好的压缩包, 找到v6.3.15_20190220_api_tradeapi_se_linux64.tar 进行解压

然后打开vscode, 开始阅读ctp接口的代码

先弄清楚各个文件的代表着什么, 然后我会对每个文件进行详细的分析

../

ThostFtdcMdApi.h 行情API头文件

ThostFtdcTraderApi.h 交易API 头文件

ThostFtdcUserApiDataType.h 存放了交易函数的声明

ThostFtdcUserApiStruct.h 存放了在ctp系统使用的数据结构以及定义的常量值

thostmduserapi_se.so 行情API的动态链接库

thosttraderapi_se.so 交易API 的动态链接库

error.dtd 暂不知道---> 后面更新

error.xml 发生错误时候代码对应的意思


# 注意上面的文件都需要以GB2312的编码进行打开,具体操作为点击左下的utf-8,然后在中间偏上的位置选择reopen with,左击选举GB2312即可

现在来探索行情API里面的基本函数

.ThostFtdcMdApi.h

class CThostFtdcMdSpi
// 这个地方我更原因称呼它为接收者, 此实例负责处理客户端的所有回报
//此处必须插播一句 函数命名规则:
//    回报处理函数: OnRsp+函数行为名
//    请求发起函数: Req + 函数行为名
//    注册函数:    Register + 函数行为名

OnFrontConnected :   正确建立通信连接
OnFrontDisconnected:通信连接断开通知到客户端
OnRspUserLogin: 请求登录响应 
OnRspError: 响应错误
OnRspSubMarketData: 行情订阅应答
OnRspUnSubMarketData: 取消行情订阅应答
OnRspSubForQuoteRsp: 订阅询价问答
OnRspUnSubForQuoteRsp: 取消订阅询价应答
OnRtnDepthMarketData: 深度行情回调
OnRtnForQuoteRsp: 询价通知
具体的函数签名请参阅文件 

class CThostFtdcMdApi
// 这个地方应该被称为订阅者,负责提供调用的API
CreateFtdcMdApi 根据路径path,创建api对象。ctpbee的创建的流文件在当前用户目录下面的.ctpbee/ctp/用户帐号/下面
GetApiVersion   获取版本
Release         释放对象
Init            初始化,只有调用此函数之后才会正常工作
Join            等待现成退出
GetTradingDay   获取交易日
RegisterFront   注册前置机,需要传入类似"tcp://127.0.0.1:12001"这样的字符串
RegisterNameServer      注册名字服务器用户信息
RegisterSpi             注册回调接口, 也就是说将上面的回调处理实例注册进来
SubscribeMarketData     发起订阅,传入合约ID和个数,此处是否可以传入数组直接进行订阅多个 ? 
UnSubscribeMarketData   取消订阅,传入合约ID和个数
SubscribeForQuoteRsp    订阅询价,传入合约ID和个数
UnSubscribeForQuoteRsp  取消订阅询价,传入合约ID和个数
ReqUserLogin            请求登录,传入登录所需要的CThostFtdcReqUserLoginField结构体
ReqUserLogout           退出登录,传入CThostFtdcUserLogoutField


看完了上面 其实你发现很多都是里面的注释, 那有没有啥体会呢


让我们来梳理下API工作的全部过程吧


1, 通过CreatFtdcMdApi 方法创建API对象,然后注册回调接口

2, 连接上服务器,并注册前置机同时调用 Init接口 开启处理队列。此时回调接口已经开始进行工作,负责接受相关相关回报

3, 确认连接上之后,发起登录请求。回调接口处理登录回报信息

4, 客户端在外部发起订阅/取消订阅的请求


这个地方你会发现这种事件流, 所有的请求不是有数据返回的,而是会有单独的接口接受回报并处理。

这种事件流衍生了 一个事件处理的模型,等待事件到达并调用相关的处理函数





留言

当前暂无人留言!