- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
必须收藏的CTP的程序化交易系统开发(一)
此篇主要简单总结和介绍CTP程序的基础和开源的Demo版本。
很多人在综合交易平台(CTP)的API开放后,开始编写程序化交易系统。先解读CTP的接口说明:CTP的API使用建立在TCP协议之上FTD协议与交易托管系统进行通讯,而负责投资者交易业务处理的则是交易托管系统。FTD 协议中规定了所有的通讯都基于某一种通讯模式。
CTP的交易API提供了两个接口:
1.CThostFtdcTraderApi,我们开发的交易系统通过它向CTP发送操作请求;
2.CThostFtdcTraderSpi,通过它接收CTP的任何响应。
主要业务举例如下:
图一
行情涉及两种通讯模式:
1.广播通讯模式:主要是行情订阅,交易所端在行情订阅后,将主动连续向会员发出行情信息;
2.对话通讯模式:由会员端主动发起的通讯请求。请求被交易所端接收和处理,并给予响应。
图二
我们可以通过CTP提供的接口向CTP发送业务申请,也不断的按照三种通讯模式中的其中一种接收CTP的响应。所以,至少应该有两个线程在我们所写的交易系统中:1.负责对CTP发出业务申请的主业务线程;2.负责接收CTP通过三种通讯模式中的其中一种对交易系统响应的API工作线程。
综上所述,程序化交易系统需要完成的业务可分为:1.基本操作;2.行情操作;3.订单操作;4.数据监听和处理操作。而我的建议是,将程序化交易系统分为四个线程来分别处理以上业务。其它三个线程工作关系如下图所示:
图三
程序化交易系统在开发过程中,要特别注意处理很多棘手问题,比如,数据处理造成的网络丢包或线程互斥等,因其就是一个复杂的多线程网络程序。
由上海期货信息技术有限公司开发的CTP交易接口,提供C++的接口,C++的Demo版本在网上有很多可直接使用。
1.上期所的接口为两个,dll、两个.lib和四个.h文件,初学者直接使用就好,下载地址:上海期货信息技术有限公司http://www.sfit.com.cn/5_2_DocumentDown.htm
图4
需要在SIMNOW上注册CTP开发中要使用的模拟账号,BrokerID为9999,账号即investorId,密码为SIMNOW的登陆密码。
图5
2.SIMNOW提供两类数据:
(1)交易时段的地址:比如,09:00-15:00和21:00-02:30,使用第一套地址,虽是真实的行情数据,但与真实的行情会相比,会有30秒左右延迟。
(2)为非交易时段,这时的数据是历史行情的播放,比如昨天的数据之类的,可以用来做程序调试。
注意:其中有MarketFront行情前置,用来做行情接收的地址;TradeFont交易前置,用来做交易的地址。这两个不能弄混,是分开的,否则会登陆失败。
3.行情Demo版,可以到:上期所CTP-Api之C++行情Demo版http://download.csdn.net/detail/u010908140/9656275下载,用VS2015打开后,点击testMdApi.cpp,将INVESTOR_ID和PASSWORK改成第2点中说的,点运行即可接收到数据。
图6
运行后的情况:
图7
在MdSpi.cpp中,可以将接收到的数据保存到本地
图8
4.交易Demo下载地址为:上期所CTP-Api之C++交易Demo版http://download.csdn.net/detail/u010908140/9656314,主要是修改MarketFront、BrokerID、TradeFront、个人期货账号和密码即可。
5.如果CTP接口做高频交易,基本是使用C++编程,若不擅长,C#、Python和Java等版本的接口在网上也有,可参考学下。
图9
CTP也有很多开源的C#版本,主要推荐XAPI版,地址:QuantBox · GitHub,https://github.com/QuantBox;海风版,更适合个人学习,下载地址:hubert28 (海风) · GitHub,https://github.com/hubert28 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|