龙听期货论坛's Archiver

龙听 发表于 2018-3-15 11:29

必须收藏的CTP的程序化交易系统开发(一)

[color=#323e32]此篇主要简单总结和介绍CTP程序的基础和开源的Demo版本。[/color]

[color=#323e32]    很多人在综合交易平台(CTP)的API开放后,开始编写程序化交易系统。先解读CTP的接口说明:CTP的API使用建立在TCP协议之上FTD协议与交易托管系统进行通讯,而负责投资者交易业务处理的则是交易托管系统。FTD 协议中规定了所有的通讯都基于某一种通讯模式。[/color]

[color=#323e32]    CTP的交易API提供了两个接口:[/color]

[color=#323e32]    1.CThostFtdcTraderApi,我们开发的交易系统通过它向CTP发送操作请求;[/color]
[color=#323e32]    2.CThostFtdcTraderSpi,通过它接收CTP的任何响应。[/color]

[color=#323e32]    主要业务举例如下:[/color]

[color=#323e32]图一[/color]

[color=#323e32]    行情涉及两种通讯模式:[/color]

[color=#323e32]    1.广播通讯模式:主要是行情订阅,交易所端在行情订阅后,将主动连续向会员发出行情信息;[/color]

[color=#323e32]    2.对话通讯模式:由会员端主动发起的通讯请求。请求被交易所端接收和处理,并给予响应。[/color]

[color=#323e32]图二[/color]

[color=#323e32]    我们可以通过CTP提供的接口向CTP发送业务申请,也不断的按照三种通讯模式中的其中一种接收CTP的响应。所以,至少应该有两个线程在我们所写的交易系统中:1.负责对CTP发出业务申请的主业务线程;2.负责接收CTP通过三种通讯模式中的其中一种对交易系统响应的API工作线程。[/color]

[color=#323e32]    综上所述,程序化交易系统需要完成的业务可分为:1.基本操作;2.行情操作;3.订单操作;4.数据监听和处理操作。而我的建议是,将程序化交易系统分为四个线程来分别处理以上业务。其它三个线程工作关系如下图所示:[/color]

[color=#323e32]图三[/color]

[color=#323e32]    程序化交易系统在开发过程中,要特别注意处理很多棘手问题,比如,数据处理造成的网络丢包或线程互斥等,因其就是一个复杂的多线程网络程序。[/color]

[color=#323e32]    由上海期货信息技术有限公司开发的CTP交易接口,提供C++的接口,C++的Demo版本在网上有很多可直接使用。[/color]

[color=#323e32]1.上期所的接口为两个,dll、两个.lib和四个.h文件,初学者直接使用就好,下载地址:上海期货信息技术有限公司[url]http://www.sfit.com.cn/5_2_DocumentDown.htm[/url][/color]
[color=#323e32]图4[/color]
[color=#323e32]需要在SIMNOW上注册CTP开发中要使用的模拟账号,BrokerID为9999,账号即investorId,密码为SIMNOW的登陆密码。[/color]
[color=#323e32]图5[/color]

[color=#323e32]2.SIMNOW提供两类数据:[/color]

[color=#323e32]    (1)交易时段的地址:比如,09:00-15:00和21:00-02:30,使用第一套地址,虽是真实的行情数据,但与真实的行情会相比,会有30秒左右延迟。[/color]

[color=#323e32]    (2)为非交易时段,这时的数据是历史行情的播放,比如昨天的数据之类的,可以用来做程序调试。[/color]

[color=#323e32]    注意:其中有MarketFront行情前置,用来做行情接收的地址;TradeFont交易前置,用来做交易的地址。这两个不能弄混,是分开的,否则会登陆失败。[/color]

[color=#323e32]3.行情Demo版,可以到:上期所CTP-Api之C++行情Demo版[url]http://download.csdn.net/detail/u010908140/9656275[/url]下载,用VS2015打开后,点击testMdApi.cpp,将INVESTOR_ID和PASSWORK改成第2点中说的,点运行即可接收到数据。[/color]

[color=#323e32]图6[/color]

[color=#323e32]运行后的情况:[/color]
[color=#323e32]图7[/color]

[color=#323e32]在MdSpi.cpp中,可以将接收到的数据保存到本地[/color]

[color=#323e32]图8[/color]

[color=#323e32]4.交易Demo下载地址为:上期所CTP-Api之C++交易Demo版[url]http://download.csdn.net/detail/u010908140/9656314[/url],主要是修改MarketFront、BrokerID、TradeFront、个人期货账号和密码即可。[/color]

[color=#323e32]5.如果CTP接口做高频交易,基本是使用C++编程,若不擅长,C#、Python和Java等版本的接口在网上也有,可参考学下。[/color]

[color=#323e32]图9[/color]

[color=#323e32]    CTP也有很多开源的C#版本,主要推荐XAPI版,地址:QuantBox · GitHub,[url]https://github.com/QuantBox[/url];海风版,更适合个人学习,下载地址:hubert28 (海风) · GitHub,[url]https://github.com/hubert28[/url][/color]

页: [1]