http://www.vnpy.org/

https://pic4.zhimg.com/50/v2-964ef0d2cbeb44513508d73c474c6fb5_hd.jpg

https://zhuanlan.zhihu.com/p/32848878

主动订阅端

  • 用户发起调用mainEngine.subscribe函数
  • mainEngine.subscribe中调用ctpGateway.subscribe函数
  • ctpGateway.subscribe中调用ctpMdApi.subscrbie函数
  • ctpMdApi.subscribe中调用C++封装的MdApi.subscribeMarketData函数,将订阅行情的请求最终通过底层C++ CTP API发出

回调推送端

  • ctaEngine对象向eventEngine中注册EVENT_TICK类型事件的处理函数句柄ctaEngine.processTickEvent
  • C++ CTP API收到Tick推送,自动回调MdApi.onRtnDepthMarketData函数推送行情数据字典data
  • MdApi.nRtnDepthMarketData中将data里的数据读取并转化成VtTickData对象,并调用ctpGateway.onTick函数
  • ctpGateway.onTick函数将VtTickData对象包装成类型为EVENT_TICK的行情事件对象Event,并调用eventEngine.put函数,放入事件引擎的缓冲队列
  • 事件引擎的工作线程,从缓冲队列中读取出最新的行情事件后,根据EVENT_TICK事件类型去查找缓存在内部字典中的处理函数列表,并将事件对象作为入参,遍历调用到列表中的处理函数ctaEngine.processTickEvent
  • ctaEngine.processTickEvent中查看Tick的代码vtSymbol,并调用交易该代码合约的策略对象strategy.onTick函数,最终去运行策略中的逻辑

pyd:扩展模块,一般用c/c++编写

ctpapi -> task_queue -> process_task_thread -> any类型 -> python