上海期货交易CTP开发——初始化

最近完成了公司的CTP委托开发,现在可以总结一下了。

CTP是上期技术开发的一套委托交易系统,相关开发资料在这里上海期货信息技术有限公司http://www.sfit.com.cn/5_2_DocumentDown.htm

一、CTP用到的文件

ThostFtdcTraderApi.h C++头文件,包含交易相关的指令,如报单。
ThostFtdcMdApi.h C++头文件,包含获取行情相关的指令。
ThostFtdcUserApiStruct.h 包含了所有用到的数据结构。
ThostFtdcUserApiDataType.h 包含了所有用到的数据类型。
thosttraderapi.dll 交易部分的动态链接库和静态链接库。
thosttraderapi.lib
thostmduserapi.dll 行情部分的动态链接库和静态链接库。
thostmduserapi.lib
error.dtd 包含所有可能的错误信息。
error.xml

二、CTP初始化

1. 创建SPI 和API 实例。
这里的SPI 是指开发者创建的自己的类,该类已经继承了接口中的SPI 接口类(CThostFtdcTraderSpi 或
CThostFtdcMdSpi)。而API 即接口中提供的CThostFtdcMdApi 或CThostFtdcTraderApi。
2. 向API 实例注册SPI 实例。
3. 向API 实例注册前置地址。交易接口需要注册交易前置地址,行情接口需要注册行情前置地址。
4. 订阅公有流(仅限交易接口,行情接口不需要)。用于接收公有数据,如合约在场上的交易状态。默认
模式是从上次断开连接处继续收取交易所发布数据(Resume 模式)开发者还可以指定全部重新获取
(Restart),或从登陆后获取(Quick)。
5. 订阅私有流(仅限交易接口,行情接口不需要)。用于接收私有数据,如报单回报。默认模式是从上次
断开连接处继续收取交易所发布数据(Resume 模式)开发者还可以指定全部重新获取(Restart),或从
登陆后获取(Quick)。
6. 初始化。(Init)
7. 等待线程退出。(Join)

这里我就不贴代码了,我这里主要讲一下注意事项。

1、CTP支持TCP/UDP协议,支持socks4、socks4a 及 socks5代理,以及支持SSL安全套接字。

2、RegisterFront格式,这里给几个例子:

//udp://180.168.212.79:31205
//”tcp:// asp-sim2-front1.financial-trading-platform.com:26205 sock5://user:pass@127.0.0.1:10001″ //socks4、socks4a 及 socks5
//RegisterFront(“ssl:// ssl 前置 IP 地址或域名:端口号”);

3、RegisterFront可以调用多次,如果你有多个前端地址的话,等于注册了多个前端地址,CTP内部会在网络断了的情况下自动去切换的。

4、公有流和私有流的订阅

SubscribePublicTopic(THOST_TERT_RESTART); //公有流只有OnRtnInstrumentStatus,THOST_TERT_RESTART这样你可以实时跟踪每一种分类、每一个代码的当前状态

/////////////////////////////////////////////////////////////////////////
///TFtdcInstrumentStatusType是一个合约交易状态类型
/////////////////////////////////////////////////////////////////////////
///开盘前
#define THOST_FTDC_IS_BeforeTrading ‘0’
///非交易
#define THOST_FTDC_IS_NoTrading ‘1’
///连续交易
#define THOST_FTDC_IS_Continous ‘2’
///集合竞价报单
#define THOST_FTDC_IS_AuctionOrdering ‘3’
///集合竞价价格平衡
#define THOST_FTDC_IS_AuctionBalance ‘4’
///集合竞价撮合
#define THOST_FTDC_IS_AuctionMatch ‘5’
///收盘
#define THOST_FTDC_IS_Closed ‘6’

SubscribePrivateTopic(THOST_TERT_QUICK); //私有流,建议使用THOST_TERT_QUICK,这样在登录上之后,可以自己主动请求市场、分类、合约、持仓、委托、成交等等,然后等待私有推送,这种模式是最适合保持数据一致的。

5、CTP断开OnFrontDisconnected,你不用主动去重新连接,CTP后台会自己去重连的。

6、为了保证CTP的工作效率,最好不要在CTP线程里处理耗时的工作,可以自己建立单独线程处理。

7、CTP join函数是防止主线程退出的,实际项目开发中不需要使用这个函数的

三、CTP退出

调用Release函数即可,不需要delete的

这里要注意的是:在Release之前不需要调用RegisterSpi(NULL);注销Spi的,如果这样做了,有可能导致CTP退不出的。

分享到:

评论已关闭