转载自: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年开发计划》了,预计会在春节前完成哈,加油加油~~~

一张图看懂VnTrader的数据流相关推荐

  1. 一张图看懂图像识别算法发展历史

    一张图看懂图像识别算法发展历史

  2. 【转】几张图看懂列式存储

    几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html

  3. 一张图看懂阿里云网络产品[二] 专有网络VPC

    摘要: 一张图看懂网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 一张图看懂阿里云网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 系 ...

  4. 一张图看懂2017双11中的网络产品和技术

    摘要: 大家都知道,2017年双11又创造了新纪录,全天交易额1682亿,交易峰值32.5万笔/秒,支付峰值25.6W笔/秒,狂欢的背后是极其复杂庞大的技术系统,其中就有大量阿里云云计算相关的产品和技 ...

  5. 鸿蒙分布式体验,一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验

    原标题:一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验 [手机中国新闻]9月10日下午,华为召开HDC2020大会,全新的HarmonyOS 2.0正式发布.新系统的分布式能力全面升级,同时 ...

  6. 一张图看懂SOA与微服务

    一张图看懂SOA与微服务 图片来自普元 1.SOA是站在整个企业系统的角度的治理 2.微服务的概念则小一点 3.ESB主要解决的是系统集成的问题,而且是面向已有的信息资产

  7. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...

    一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 转载于:https://www.cnblogs.com/jingzhishen/p/589278 ...

  8. 一张图看懂光圈、快门、感光度的意义

    一张图看懂光圈.快门.感光度的意义 ​​​​ 光圈越大,参照物越模糊. 快门越高,运动物越清晰. 感光度越大,照片糙点越多.

  9. 一张图看懂光圈、快门、感光度的意义 ​​​​

    一张图看懂光圈.快门.感光度的意义 ​​​​ 光圈越大,参照物越模糊. 快门越高,运动物越清晰. 感光度越大,照片糙点越多.

最新文章

  1. VIM技巧:显示行号
  2. 如何忽略Git中目录中的文件?
  3. tcl把文本产生html,TCL脚本数据文件格式(译文)
  4. SAP系统中设备管理模块的主要增强出口
  5. 将MSHFLEXGRID表格中数据导入Excel方法
  6. 协作通信-af df的matlab仿真,协作通信-AF、DF的MATLAB仿真(解压密码yuema1086)
  7. js图片压缩java上传,JS实现异步上传压缩图片
  8. 你所不知道的模块调试技巧 - npm link #17
  9. 音速索尼克 怪人_如何使用AI玩刺猬索尼克。 真干净!
  10. 全国Python科研应用专题实操培训班通知
  11. 20200616:力扣193周周赛上
  12. docker 安装 MySQL 8,并减少内存占用 记录
  13. mac Sourcetree 账号密码输入错误后, 重新输入的方法
  14. fla 优化思路 flash cs6
  15. Android App 免杀教程
  16. html5制作表单网页
  17. 恒生电子面试(面试介绍,面试流程,面试建议,面试题库(软测方向))
  18. dd dt标签 显示与隐藏
  19. Linux登录mysql时 密码正确登录不进去,没有密码却能登进去
  20. window 删除文件报错显示被程序占用 强制删除被占用的文件

热门文章

  1. 利用truffle与智能合约进行交互
  2. 如何对两个大型SQL Server数据库中的数据进行快速估计比较,以查看它们是否相等
  3. azure blob_如何使用Power BI从Azure Blob存储访问数据
  4. Python基础(map/reduce)
  5. (五)通过Python的select监控多个描述符实现并发连接
  6. whereis 命令(转)
  7. ajax的总结和使用
  8. slect,poll,epoll区别
  9. Android真机连接Eclipse时,打不开File Explorer下的data文件夹解决方法
  10. 面向对象课程第四单元作业总结