VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 173
声望: 32

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

学习

Member
avatar
加入于:
帖子: 31
声望: 1

具体是怎么使用pybind11生成python库的,能详细介绍一下吗?

Member
avatar
加入于:
帖子: 7
声望: 0

真是高手,我这边好象看天书

Member
avatar
加入于:
帖子: 5
声望: 2

请问这些c 文件是在github的哪个目录 我看了一下好像全是python代码

Member
avatar
加入于:
帖子: 14
声望: 0

aronluk8 wrote:

请问这些c 文件是在github的哪个目录 我看了一下好像全是python代码
github里面没有,在安装后本地文件的C:\veighna_studio\Lib\site-packages\vnpy_ctp\api目录下。

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】