博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一张图看懂VnTrader的数据流
阅读量:4294 次
发布时间:2019-05-27

本文共 1140 字,大约阅读时间需要 3 分钟。

转载自:https://zhuanlan.zhihu.com/p/32848878 作者(用Python的交易员)

今天被一位用户吐槽了:作为vn.py最核心的开箱即用交易平台,VnTrader的数据流和事件驱动机制始终没有一个特别清晰的描述文档。

交流解释一番后很快就收到了上面这张数据流的示意图,不得不再次感叹社区在vn.py项目成长中的巨大作用:换我这个小学美术不及格的作者打死也画不出这么简介明了的图表 *>﹏<*

这里也结合图表,以CTP行情Tick为例, 说明下Python部分的数据流的整体步骤(忽略C++封装部分的)。

主动订阅端

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

回调推送端

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

这样一来应该清晰了很多?最后再次感谢vn.py社区所有成员在项目发展中做出的贡献,没有你们就不会有今天的vn.py!!!

如果有问题欢迎在留言里提问。

v1.7.3将会在1月底前发布,另外这几天也已经被多次催更《vn.py项目2018年开发计划》了,预计会在春节前完成哈,加油加油~~~

你可能感兴趣的文章
小程序连接数据库
查看>>
knex.js详解
查看>>
小程序逻辑层之注册程序和场景值
查看>>
css属性设置
查看>>
小程序上下拉刷新
查看>>
LTE中阻塞干扰,杂散干扰,邻信道干扰,交调干扰,加性噪声干扰分析
查看>>
微信小程序设置页面外边距与内边距
查看>>
gb104规约
查看>>
ARM cortex-M3 异常处理分析
查看>>
理解vue的核心理念
查看>>
RT-Thread中的事件机制-多次发送同一个事件等同于一次触发
查看>>
MSP430中断原理分析
查看>>
display几点解释
查看>>
详解SPI中的极性CPOL和相位CPHA
查看>>
各类总线传输速率
查看>>
有关分散加载文件scatter的理解 关键是加载域 加载地址与执行域地址的 处理
查看>>
RO,RW,ZI 和scatter file详解(转载)
查看>>
Coap协议学习笔记
查看>>
谈"http get和post的区别"
查看>>
Java虚拟机学习笔记(一)——JVM运行时数据区和常见内存错误
查看>>