对于安装了VNStudio的用户,启动VN Station后,直接点击右下角的更新按钮就能完成自动更新。
对于没有安装的用户,请下载VNStudio-2.0.6,体验一键安装的量化交易Python发行版。
K线图表功能
首先要重点感谢的是我们vn.py核心开发团队的nanoric,在K线图表的技术选型方面做了很多前瞻性的研究工作,有了这些研究的成果最终我们才能开发出vnpy.chart高性能K线图表组件。同时也非常感谢Github上的moonnejs/uiKLine项目,在K线的图形绘制方面给了我们很多启发。
社区里对于K线图的需求提了已经差不多四年的时间,整体上可选的技术方向包括:
- Web类图表
- 如TradingView、ECharts等
- 优点:现成工具库、WEB效果炫酷
- 缺点:需要在浏览器中运行,且跨语言开发难度较大
- Python绘图库
- 如Matplotlib、Chaco、PyQtGraph等
- 优点:易学易用(纯Python),方便整合到GUI中
- 缺点:全量刷新性能较差,增量刷新需要自行实现(相当复杂)
- C++绘图库的Python封装
- PyQtChart和PyQt
- 优点:C++理论上是性能牛逼的选择了(实际嘛...)
- 缺点:一个是比较底层,另一个就是实际性能了...
首先尝试的是Matplotlib,作为Python标准绘图库,用起来是很方便,但是对于需要动态更新数据的K线图来说,全量刷新模式的效果实在太差,FPS特别低不说,数据量一大还直接就容易卡成幻灯片。
其次就开始尝试TradingView,通过外部浏览器来实现图表的查看,或者使用PyQt内置的浏览器模块QWebEngine实现GUI嵌入,尽管可以跑通,但Python和浏览器毕竟是两个跨语言的隔离环境,单向的数据传递(从Python中发起绘图)还比较方便,一旦涉及双向的数据传递就会十分麻烦(如K线动态添加、捕捉鼠标位置访问底层数据等),且从交易员的角度可定制扩展性太差(html/css/javascript,杀了我吧....)。
第三个选择是PyQtChart,基于C++实现的K线图绘制,再加上QtChart是Qt官方实现的扩展库,理论上质量应该杠杠的。结果却是和预期出入最大的一个方案,刷新效率低的不行(比幻灯片好一点点),看了C++源代码后,发现诸数据添加、图形刷新的操作都是O(N)的算法,而且代码质量和Qt核心库也完全不是一个档次(找的不靠谱外包?),再次毙掉。
最后剩下的路径就是自己造轮子了,分别尝试了基于PyQt和PyQtGraph的两套方案后,发现绘图效率和图形效果差距不大,考虑尽可能减少vn.py项目中和交易无关的代码行数,最终选择了相对上层的PyQtGraph开发的方案。
从2019年的一季度定下开发计划,到折腾完这堆方案最终完成,已经过去了足足半年的时间,最终整个模块包含以下五大组件:
- BarManager:K线序列数据管理工具
- ChartItem:基础图形类,继承实现后可以绘制K线、成交量、技术指标等
- DatetimeAxis:针对K线时间戳设计的定制坐标轴
- ChartCursor:十字光标控件,用于显示特定位置的数据细节
- ChartWidget:包含以上所有部分,提供单一函数入口的绘图组件
从基础的静态K线序列数据显示、交互式数据查询,到更复杂的动态K线更新、自定义图形组件添加等,全部在不到1100行的代码中实现。针对PythonK线图表的这一需求,vnpy.chart算是我们终于交出了的一份满意答卷:
关于vnpy.chart的使用方法,请通过examples/candle_chart样例查看,同时我们也使用该模块实现了CtaBacktester(CTA回测)模块中,将策略回测的成交记录通过K线图展示出来的功能。
交易接口
更新内容:
新增针对CTP Mini极速期货柜台的MiniGateway和MinitestGateway(仿真测试),应该算是适合高频以外客户的通用极速柜台了。
线下活动
针对2.0.5和2.0.6的新增功能,这周六将在上海组织vn.py社区2019年的第八次线下活动,主题内容如下:
- 会用Jupyter Notebook,就能开始实盘量化交易
- 基于ScriptTrader模块的常用脚本交易策略分享
- 使用RpcService模块实现多进程分布式的vn.py应用部署
- 使用vnpy.chart定制开发各种量化图表
- QA问答环节
时间:7月27日 14:00-17:00
地点:浦东新区芳甸路1155号4楼WeWork
名额:40人
报名费:99元
报名请扫描下方二维码: