# CTP多账户多策略-交易程序
<p data-anchor-id="d480"><code>C++</code> <code>ctp接口</code> <code>程序化交易</code> <code>经验分享</code></p>
---
## CTP简介
> 综合交易平台CTP(Comprehensive Transaction Platform)是由上海期货信息技术有限公司(上海期货交易所的全资子公司)开发的期货交易平台,CTP平台以“新一代交易所系统”的核心技术为基础,稳定、高速、开放式接口,适合程序化交易软件运用和短线炒单客户使用。
[ctp接口下载地址](http://www.sfit.com.cn/5_2_DocumentDown.htm)
## 本文目的
该程序是我大二暑假参加一个金融软件比赛写的,是比赛作品的其中一部分,**专门用来进行交易的**。作品的目标是多账户、多策略。其中交易策略用别的语言编写,它们产生并发送交易指令(交易账户、交易合约等信息)给交易主机(即这个项目)进行买卖。因此交易主机的主要职责是接收、解析并执行交易指令,跟踪汇报指令的交易情况。具体情况可以看我我上传的介绍视频,那是后来提交作品时录的。
后来有几个人问起我这个程序,其中有位老师想在实盘中测试下自己的交易策略怎样,就找了两位师弟给他做那个东西,然后让我去给他们讲要注意些什么东西,这让我想起自己一开始接触ctp的接口时,花了不少时间去测试接口看是怎么一回事。**鉴于网上ctp的开发介绍不多,我就借这个项目分享下经验,让大家能少走些弯路就尽量少走一些。**
**有以下地方需要注意**:
> * 环境:VS2013 + Qt5.3(32位) + mysql(32位)(在我写这个项目时ctp在windows平台上只有32位的库)
> * 刚接触的话先粗略浏览下**“开发资料”**中的内容,里面的PPT是需要细看的。我下面讲的是些开发的经验,并不是起步教程,理解资料中的PPT是起步的关键
> * 在初步理解概念后试着自己写一个登录发请求的例子,试着调用不同的API函数,这些可以参考**noQtCTP.rar**里的内容(结合文档中的示例)。这是我开始接触ctp接口时为了理解写的一些代码(就是登录、调用简单的API),不需要Qt库也可以编译
> * 当需要测试交易API时,可以参考**tdspiTestWithQt.rar**里的内容,这是我学交易API操作和研究回调函数时用得最多的工具了!需要Qt进行编译,可以不断修改里面的源代码然后点击界面中的按键来执行发送指令,控制台输出回调信息,大家也可以自己写一个适合自己的研究API的小工具,既加深理解,又方便自己开发。基本上会写这个小工具ctp接口就已经学会怎么用了,剩下的就是想怎么把它应用到软件需求中了
> * 虽然是程序支持“多账户多策略”,但是对于ctp接口的使用是一样的,这篇文章主要说的是关于ctp的
> * 项目遵循[BSD协议](http://www.linfo.org/bsdlicense.html),可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布
> * **项目不再维护更新**,代码主要供学习参考
## 基础
> 理解CTP的基本用法
1. windows版本的接口文件比较多,但它们是有规律的(很多东西名字很长,是因为前面都添加了ThostFtdc这几个字符)
- **ThostFtdcUserApiDataType.h** : 定义业务数据类型,用typedef为现有类型创建同义字,比如期货账号typedef char TThostFtdcUserIDType[16],密码类型typedef char TThostFtdcPasswordType[41]
- **ThostFtdcUserApiStruct.h** : 定义业务数据结构,使用ThostFtdcUserApiDataType.h的数据类型,调用api时就要传这里面定义好的数据结构过去,比如执行登录操作时传一个CThostFtdcReqUserLoginField数据结构过去,这里面就放置了上面说的账号类型和密码类型
- **ThostFtdcMdApi.h、 thostmduserapi.lib、 thostmduserapi.dll** : 用于获取行情的API,关键字是md,表示market data
- **ThostFtdcTraderApi.h、 thosttraderapi.lib、thosttraderapi.dll** :用于交易操作的API,关键字是trader
2. 开发前要有期货交易账号,经纪商代码,前置机地址(前置机地址又分行情和交易的),这些又分为模拟的真实的。因此自己需要去开一个户,然后和期货公司要一些模拟的账号(记得问前置机地址和经纪商代码)。如果需要真实环境的前置机地址,可以下载一个快期交易软件,在登陆界面点击代理可以分别看到行情和交易的地址。
另外可以加一些ctp开发的讨论群,里面有各期货公司的人提供模拟账户的,当然这不是免费的午餐咯,当需要提供手机号码时大家最好不要报真实号码,否则你懂的。另外这些模拟账户是大家都可以用到的,导致一些回调你不知道是不是自己的操作,因此大家可以在早上登录账号并调用API把密码改了,那样那个号那天就是你的了。我的tdspiTestWithQt里有这样的功能(大把模拟账号没人用的,不用担心影响到别人)
3. **无论是行情还是交易API,里面都有两个类,一个是xxxSpi,另一个是xxxApi,分别代表着回调和调用**。Api的函数表示**主动**调用,这些函数的参数要你填,交易所收到你的请求后会把信息返回给你——通过回调Spi的函数,Spi表示**被**调用。默认Spi什么也不做,因此你需要继承Spi并重载需要的回调函数。回调函数里的参数就是交易所返回的信息,不是要你填的东西,可以直接输出。每个Api都需要绑定一个Spi,这样才知道请求出去的东西怎么返回回来。
大家可以仔细看下noQtCTP的代码,我写的TdSpi类就是继承CThostFtdcTraderSpi,而MdSpi继承CThostFtdcMdSpi,它们的实现都是重载回调函数输出需要的信息。我里面写的调用就像是链式的反应,首先主动调用api的Init()函数,Spi的OnFrontConnected()就被调用,在里面我又调用api的ReqUserLogin()函数,Spi的OnRspUserLogin()就会被调用告诉我登录结果等等等。一个主动一个被动,一环扣一环,只是方便观察和理解而已,实际生产肯定不是这样写。
**调用Api的函数时,传的那些结构体中,不是每个参数都要填的**,比如请求登录只需要填名、密码和经纪商代码,那个结构体别的域空着就好了。
4. **交易API的函数远远多于行情API,但是实际要使用的其实只是其中的几个!**
可以想象我们做程序化交易无非需要的功能就是登录、查询资金、下单、撤单这些功能,而回调函数就是围绕这几个展开的。
首先你需要对照着看我之前提到的PPT里的介绍,里面都提到了我说的那几个需要的函数;然后你可以看我**用到了那些,传的参数里面填了什么**,别忘了参数的含义在CTP的两个业务数据定义的头文件中;接着看下我实现了哪些Spi回调函数,这些Spi函数又分别对应哪些Api函数,这样你就理解全部了。
我指的代码是:
1. 项目**tdspiTestWithQt**中的"MainWindow.h"及实现、"MySpi.h"及其实现(代码简单实用)
2. 项目**TradeServer**中的"Trader.h"及实现(ctp交易API在交易机中的应用)
<br/>
我代码中有注释,你需要做的就是对照ppt教程和别的参考资料看下我怎么用的,特别是传参,有哪些是需要填的,分别又代表了什么。先运行我的代码,然后改我的代码,接着自己写一个,就达到目的了。
如果我在这里再一个一个解释函数就显得很累赘了。
5. 在网上的一些基础教程里,以及我的noQtCTP项目中,都会调用api的Join()函数,这个是为了
没有合适的资源?快使用搜索试试~ 我知道了~
期货CTP例子源码
共75个文件
h:28个
cpp:25个
tlog:3个
需积分: 48 42 下载量 117 浏览量
2017-09-01
14:22:38
上传
评论 3
收藏 21.37MB RAR 举报
温馨提示
CTP开发的例子 做全自动交易的同学 可以学习一下,还是非常有参考意义的 CTP开发的例子 做全自动交易的同学 可以学习一下,还是非常有参考意义的
资源推荐
资源详情
资源评论
收起资源包目录
期货CTP例子源码.rar (75个子文件)
CTP-TradeServer-master
.vs
TradeServer
v14
.suo 22KB
TradeServer.sln 957B
noQtCTP.rar 594KB
Win32
Debug
thosttraderapi.dll 1.2MB
thostmduserapi.dll 681KB
libmysql.dll 4.23MB
TradeServer.VC.db 1.29MB
.gitignore 203B
TradeServer
MDBroadcast.cpp 3KB
QueryPositionCommand.h 296B
ApiCommand.cpp 191B
BackgroundTrader.cpp 10KB
AccountID.cpp 670B
ReportDao.cpp 10KB
ComfirmSettlementCommand.cpp 359B
Trader.h 4KB
ThostFtdcUserApiDataType.h 227KB
OrderDao.h 608B
thosttraderapi.lib 3KB
MDBroadcast.h 1KB
GVAR.cpp 3KB
Trader.cpp 25KB
InsertOrderCommand.h 270B
TestStrategyPositionDao.cpp 907B
QueryFundCommand.cpp 319B
QueryPositionCommand.cpp 339B
AccountID.h 682B
MDChannel.cpp 1KB
CommandQueue.h 485B
WithdrawOrderCommand.h 286B
InstrumentInfo.h 2KB
InstructionPort.h 394B
AccountFund.cpp 1KB
ThostFtdcTraderApi.h 24KB
WithdrawOrderCommand.cpp 320B
BackgroundTrader.h 2KB
TestStrategyPositionDao.h 168B
Order.cpp 3KB
AccountPositionDao.h 176B
thostmduserapi.lib 3KB
user
acount.ini 8B
TradeServer.vcxproj.filters 10KB
Order.h 2KB
ComfirmSettlementCommand.h 308B
MDChannel.h 585B
ReportDao.h 614B
InstrumentInfo.cpp 2KB
ApiCommand.h 258B
QueryFundCommand.h 284B
LoginCommand.cpp 281B
ThostFtdcMdApi.h 5KB
GVAR.h 550B
ThostFtdcUserApiStruct.h 159KB
main.cpp 694B
OrderDao.cpp 6KB
GeneratedFiles
Debug
FundDao.h 370B
StrategyPositionDao.h 672B
StrategyPositionDao.cpp 8KB
TradeServer.vcxproj 21KB
LoginCommand.h 261B
AccountFund.h 1KB
Debug
TradeServer.log 532B
TradeServer.tlog
custombuild.read.1.tlog 2B
unsuccessfulbuild 0B
TradeServer.lastbuildstate 220B
custombuild.write.1.tlog 2B
custombuild.command.1.tlog 5KB
FundDao.cpp 5KB
AccountPositionDao.cpp 4KB
InstructionPort.cpp 1KB
CommandQueue.cpp 991B
InsertOrderCommand.cpp 306B
浜ゆ槗涓绘満浠嬬粛.wmv 48.15MB
tdspiTestWithQt.rar 431KB
README.md 15KB
共 75 条
- 1
资源评论
wuaj1980
- 粉丝: 6
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功