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

python封装ctp

具体流程:
1、需要将两个定义了数据类型等的头文件转换成python的格式,方便后续gateway映射使用
2、将原生ctpapi接口用C++继承实现一次
3、利用pybind11对C++继承好的类进行转换

vnpy整个处理逻辑是:将MdApi分成四大部分

  • 继承原生CTP接口的Onxxxxx函数
  • 额外开一个task线程,用来运行process特定的任务
  • 额外声明onxxxxx响应函数
  • 额外声明包括createFtdcxxx等主动函数

运行的时候,先调用createFtdcxxx(实际调用的是原生CTP定义好的函数),进行初始化后,远端Thost服务器响应调用Onxxxx,将响应包装成一个事件推送到任务处理队列中,由process一系列函数挑选处理,推送到相应的onxxxx函数里。这样做的好处很明显,一是利用了一个无限长的任务处理队列,不用担心阻塞了CTP回调;二是只需要将onxxxx暴露给vnpy,个人感觉比较简洁?
 
对原生接口进行继承重写,分成两部分:
1、头文件:继承CThostFtdcMdSpi生成MdApi,其中MdApi类其中包括了原生Api对象(原生Spi只提供回调函数,原生Api只提供主动请求函数),继承定义的MdApi将两者合二为一,按照上面的处理逻辑声明特定的函数即可
2、源文件:将上述声明的类方法都实现一遍

  • 原生API回调函数Onxxxx:负责生成Task类实例推送给API的工作线程队列。
  • 回调处理函数processxxxx
  • onxxxx
  • 初始化和主动请求函数(包括createFtdcMdApi(...))
Member
加入于:
帖子: 22
声望: 1

学习

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

沪公网安备 31011502017034号

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