该文章主要讲什么
这篇文章的面向对象是有一些C++基础,并且想用C++来做程式化交易的同学。
这篇文章可以算是我的程式化学习笔记中的一篇。其中介绍了CTP的简单的使用方式,并且附上了一些代码以及我在试用的时候遇到的一些小坑。
什么是CTP
CTP是上海期货推出的一套可供程序调用的交易接口。就好比官方给程序化交易提供了的一个专门的业务窗口。
接口相关文件下载
CTP接口可以在上期官网下载。
上期的CTP接口维护似乎比较混乱,新旧版本混在一起了。
我们只需要下载最新版本的API接口和API文档 (以下简称doc)即可。
环境搭建
按照doc里说的,搭建好环境就可以用了。
虽然所需的东西在doc里都说明了,但是在这里我还是简单地复述一下吧。
项目创建
使用Visual Studio,建立新项目,将头文件,库文件还有dll的路径设置好就行了。
前置知识
- CTP的所有接口都分为Spi和Api两种,分别对应C++中的类:XXXXSpi和XXXXApi。下面说的Api和Spi指的都是这两种东西。
- 我们主动对服务器发出的请求都是通过Api进行
- 而服务器的所有响应消息,都得用Spi,通过重写虚函数的形式接收
- 所有Api都有自己的创建(实例化)方法:XXXXApi::CreateXXXXApi,不应使用new
- Spi没有自己的实例化方法,可以按自己喜欢的方式实例化。但是Spi必须注册到Api中才会有用。
- Spi和Api一般是配套的,通用的初始化方式是(以CThostFtdcMdApi为例子,其他的都一样):
auto market_api = CThostFtdcMdApi::CreateFtdcMdApi("flow", false); // 创建Api
MdSpi mdspi(market_api); // 创建Spi(MdSpi继承于CThostFtdcMdSpi)
market_api->RegisterSpi(&mdspi); // 将Spi注册到Api(将Spi与Api关联在一起&