CTP接口封装流程记录
这个帖子仅当记录自己在ctp接口封装时的经历以及经验,如果有错误敬请指出,如果对你有帮助那是最好的
最初的文件:
- thostmduserapi_se.dll:行情接口动态库,主要对ThostFtdcMdApi和Spi进行实现
- thosttraderapi_se.dll:交易接口动态库,主要对ThostFtdcTdApi和Spi进行实现
- thostmduserapi_se.lib:行情接口静态库,主要包含一些索引信息
- thosttraderapi_se.lib:交易接口静态库,主要包含一些索引信息
- ThostFtdcMdApi.h:声明行情接口类及成员函数
- ThostFtdcTraderApi.h:声明交易接口类及成员函数
- ThostFtdcUserApiDataType.h:自定义了接口类中所需的变量类型,通过ctp接口发单需要转换成这里面的格式
- ThostFtdcUserApiStruct.h:定义了接口类中所需的结构体如各种field
vnpy用python封装ctp,意思就是把原生CtpApi使用C++继承后,利用pybind11生成python可用的pyd库,里面包含了可以在python里直接调用的行情交易接口类
使用Ctp接口,一般是重载Spi类生成用户自定义的类,例如UserApi,同时定义成员变量api(利用Api类的静态方法生成),在使用时,先生成UserApi,然后通过调用成员变量api的初始化主动函数,将UserApi注册进入api,此时调用api的函数,最后会触发UserApi的回调函数,这也是为什么要继承定义Spi类。
原生CTP文件细节
- ThostFtdcUserApiStruct.h中定义了各种结构体,在调用ctp接口时需要将参数构造成该文件里的struct-
- ThostFtdcUserApiDataType.h中有两种定义:
- typedef char TThostFtdcTimeConditionType;定义了变量类型,比如这是下单时间类型
- #define THOST_FTDC_TC_IOC '1';定义了上面变量类型可选参数,比如这里表示“立即成交否则撤销”
Api的初始化主动函数简介:(md和td共有的)
- CreateFtdcMdApi(const char *pszFlowPath="",...):静态成员函数,通过CThostFtdcMdApi类进行调用,创建一个指向CThostFtdcMdApi的类对象,可以视作是UserApi
- RegisterSpi(CThostFtdcMdSpi *pSpi):将pSpi注册到UserApi对象中,此时UserApi调用的后续主动函数会自动触发pSpi中对应的回调函数
- RegisterFront(char *pszFrontAddress):将UserApi连接到前置机网络地址上
- Init():初始化函数,属于初始化最后一步,成功运行后会调用Spi的OnFrontConnected()
- ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField,int nRequestID):进行登录操作,会自动触发OnRspUserLogin(..)