本文主要面向有C++基础,并且想用C++来做程序化交易的用户。 主要介绍了CTP的简单使用方式以及在使用过程中易遇到的‘坑’,并附上一些代码帮助学习。
1
什么是CTP
CTP是上海期货推出的一套可供程序调用的交易接口。就好比官方给程序化交易提供了的一个专门的业务窗口。
2
接口文件获取
CTP接口可以在上期官网下载。
(http://www.sfit.com.cn/5_2_DocumentDown.htm)
注:上期的CTP接口维护似乎比较混乱,新旧版本混在一起了。我们只需下载最新版本的API接口和API文档 (以下简称doc)即可。
地址:
(http://www.sfit.com.cn/DocumentDown/api/6.3.11_20180109_tradeapi.rar
http://www.sfit.com.cn/DocumentDown/api/CTPcdg_ch.pdf)
3
环境搭建
按照doc里说的,搭建好环境就可以用了。虽然所需的东西在doc里都说明了,但是在这里我还是简单地复述一下吧。
项目创建
使用Visual Studio,建立新项目,将头文件,库文件还有dll的路径设置好就行了。
前置知识
4
行情接口
行情相关接口,其实只有行情查询一个。行情接口相关操作都被封装在CThostFtdcMdApi和CThostFtdcMdSpi中。
初始化接口
要查询行情,首先得初始化行情接口。按照前置知识中所说的,初始化接口就好。
登录
行情初始化后,收到OnFrontConnected消息,就可以进行登录操作了。所有Api实例都必须单独登录。
登录只需要调用Api::ReqUserLogin,提供BrokerID, UserID, Password即可。代码示例:
注:
行情接口登录不需要提供任何信息,调用Api::ReqUserLogin即可,这里贴的代码是演示正常登录用的。
查询请求
登录成功之后就可以查询行情, 调用Api::SubscribeMarketData即可:
返回的行情会响应OnRtnDepthMarketData函数。
注:
行情返回的频率最高是2s/次,并且只有在行情有变化的时候才会返回行情(doc中有说明)。
5
交易接口
这里说的交易相关接口是指CThostFtdcTraderApi和CThostFtdcTraderSpi中提供的接口。这两个类提供的接口非常丰富。与其说是交易相关接口,不如说是与帐号有关的操作。 不过在这里只介绍仓位查询和下单接口,其他的可以看doc和.h文件。
登录
还是和上面一样,先登录,这次必须提供正确的BrokerID,用户ID和密码了。
确认结算
CTP有个特别的要求,就是在交易之前,必须确认一下昨天的结算结果。
就像是在说:“嘿,你昨天输了好多钱,不要赖账,先算清楚今天再继续!”
结算的方法是,先用Api::ReqSettlementInfoConfirm请求昨天的结算单。然后在OnRspQrySettlementInfo中记下SettlementID,用Api::ReqSettlementInfoConfirm确认这个结算单就好了。 代码示例:
注:1. TradingDay的参数格式是:”YYYYMMDD”,例如:”20180525”。记得填入的要是昨天的日期,而不是今天的。
2. OnRspUserLogin可以获取到今天的交易日
查询仓位
要查询当前仓位,使用Api::ReqQryInvestorPosition。提供BrokerID和UserID即可。所有的仓位信息会返回到Spi::OnRspQryInvestorPosition中。 代码示例:
注:
若要查询某个合约的仓位,填上InstrumentID即可。
下单
下单使用Api::ReqOrderInsert,需要填的东西很多,大体可以分为通用部分和条件部分。
注:
1. 还有很多参数可选,所有的参数在.h中都有说明; 2. 通过参数的组合可以做出很多条件单,例如FOK, FAK。详情可以看doc 4.7。
6
一些小坑
注:
以下是在用simnow测试的时候遇到的一些小坑。意思是,也许在真实环境中这些就不是坑了...
Api使用频率限制
Api在本地有使用频率限制,似乎是1次/秒(在doc中有说明,4.14.1)。超过这个频率的请求都会被拒绝。考虑到接口内部实现精度可能不高,最好是认为频率被限制在了n次/秒(n小于1且无限接近于1)。
一些永远用不到的参数
一些Api参数在结构体中有,看起来好像很重要,但是其实设置成什么都无所谓。doc中没有说明。以下是一些看起来很重要,其实一点用都没有的参数列表:
一些同名参数
一些参数名字不一样,.h中的解释也不一样,但是指的都是同一个东西。如:UserID和InvestorID指的都是用户ID。
基于python的开源交易平台开发框架。截止目前,vn.py项目在Github上的Star已经达到5563,量化交易类开源项目第1,量化类项目第3(1、2依旧分别是Zipline和TuShare)。
项目官网:http://www.vnpy.org
论坛地址:www.vnpie.com
知乎专栏:https://zhuanlan.zhihu.com/vn-py
Developed by Traders,
for Traders