CTP API基本架构
接口类
- Spi(如 CThostFtdcTraderSpi),包含所有的响应和回报函数,用于接收综合交易平台发送或 交易所发送综合交易平台转发的信息。开发者需要继承该接口类,并实现其中相应的虚函数。
- Api(如 CThostFtdcTraderApi),包含主动发起请求和订阅的接口函数,开发者直接调用即可。
通用参数
- nRequestID 客户端发送请求时要为该请求指定一个请求编号。交易接口会在响应或回报中返回与该请求相同的请求编号。当客户端进行频繁操作时,很有可能会造成同一个响应函数被调用多次, 这种情况下,能将请求与响应关联起来的纽带就是请求编号。
- bIsLast 当响应函数需要携带的数据包过大时,该数据包会被分割成数个小的数据包并按顺序逐次发 送,这种情况下同一个响应函数就是被调用多次,而参数 IsLast 就是用于描述当前收到的响应数据包是不是所有数据包中的最后一个。
- RspInfo 该参数用于描述请求执行过程中是否出现错误。
- 该数据结构中的属性 ErrorId 如果是 0 ,则说明该请求被交易核心认可通过。
- 否则,该参数描述了交易核心返回的错误信息。
- error.xml 文件中包含所有可能的错误信息。
API的基本结构
API的基本架构。如图所示,左边是客户的交易程序,中间是API动态库底层,右边是CTP系统。
以客户登录为例,顺序逻辑如下:
- 客户程序调用API函数ReqUserLogin将登陆信息写入动态库底层维护的缓存中;
- 动态库内置线程读取缓存通过tcp链接发往CTP前置;
- 动态库内置线程通过tcp链接读取CTP的回复,然后回调SPI中的函数OnRspUserLogin;
- 客户在继承重写OnRspUserLogin函数,在其中处理自己的业务逻辑;
交易托管系统
接口文件
接口文件(以Linux – C++为例)
文件名 | 详情 |
---|---|
ThostFtdcTraderApi.h | C++头文件 包含交易相关的指令,如报单 |
ThostFtdcMdApi.h | C++头文件 包含获取行情相关的指令 |
ThostFtdcUserApiStruct.h | 包含了所有用到的数据结构 |
ThostFtdcUserApiDataType.h | 包含了所有用到的数据类型 |
error.xml error.dtd | 包含所有可能的错误信息 |
thosttraderapi_se.so | 交易部分的动态链接库和静态链接库。 (支持穿透式监管) |
thostmduserapi_se.so | 行情部分的动态链接库和静态链接库。 (支持穿透式监管) |
接口的初始化步骤
以下是创建和初始化行情接口和交易接口的过程,通过以下步骤开启交易接口的工作线程。
- 创建继承自 SPI ,并创建出实例,以及 API 实例
- SPI指 CThostFtdcTraderSpi 或 CThostFtdcMdSpi
- API指 CThostFtdcMdApi 或 CThostFtdcTrader Api
- 向 API 实例注册 SPI 实例
- 向 API 实例注册前置地址
- 交易接口需要注册交易前置地址
- 行情接口需要注册行情前置地址
- 订阅公有流(仅限交易接口,行情接口不需要)
- 用于接收公有数据,如合约在场上的交易状态
- 默认模式是从上次断开连接处继续收取交易所发布数据(Resume 模式)
- 开发者还可以指定全部重新获取(Restart)
- 从登陆后获取(Quick)
- 订阅私有流(仅限交易接口,行情接口不需要)
- 用于接收私有数据,如报单回报
- 默认模式是从上次断开连接处继续收取交易所发布数据(Resume 模式)
- 开发者还可以指定全部重新 获取(Restart)
- 从登陆后获取(Quick)
- 初始化。(Init)
- 等待线程退出。(Join)
多用组合、少用继承
基于接口而非实现进行编程