vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 163
声望: 18

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(..)
Member
avatar
加入于:
帖子: 2
声望: 1

看看 先学习 学习

Member
加入于:
帖子: 22
声望: 1

学习

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3