发布于vn.py社区公众号【vnpy-community】
vn.py已经正式进驻【Gitee】(简单来说就是中国版的Github),并在一周内拿到了【GVP】(Gitee最有价值开源项目)。以后对于访问Github速度太慢的用户,有了一个更好的国内替代选择,仓库地址:https://gitee.com/vnpy/vnpy。该Gitee仓库会每日和Github仓库同步,自动更新最新版本的代码,欢迎大家Star和Fork!。
原文作者:用Python的交易员 | 发布时间:2020-12-31
2020年10月Python迎来了3.9版本,但社区期盼已久的GIL由【进程内全局锁】转向【解释器全局锁】的修改还是没能实现,反观隔壁的Ruby新3.0版本都提供JIT(Just-In-Time Complier)的官方实现了(伤心)。
考虑到3.8和3.9版本,对比目前vn.py基于的Python 3.7版本并没有提供特别明显的优化,暂时我们官方Github仓库中的二进制编译部分(主要是各类C++接口的封装)以及VNStudio发行版,还是会保持使用3.7版本的Python。
而vn.py核心的代码、REST/Websocket类接口、纯Python类接口都可以直接运行于3.8或者3.9版本,无需做任何修改(官方测试过)。对于有C++类接口有需求的用户,可以自行基于3.8或3.9的Python环境重新编译即可。
Python的作者Guido已经加盟微软,背靠这么一棵大树,未来看到新版本中【移除GIL】或者【加上JIT】都还是比较值得期待的,一旦发布vn.py也会及时重构进入3.0大版本的时代,在那之前就都还是2.0大版本往上迭代了。
经过了第一年(2019)的重构起步,第二年(2020)的功能扩展,2.0大版本第三年(2021)的任务主题就是夯实巩固了。
精简项目代码
上图是一张Python两大经典Web框架Django和Flask的特性对比,尽管都有着诸多成功的应用案例,两者其实体现了完全不同的设计哲学:
开箱即用(Django) vs 极简设计(Flask)
vn.py之前的侧重点一直是开箱即用,尽可能支持更多的交易接口和策略应用,将所有功能代码都包括在核心开源项目中,满足交易员快速上手进入实盘的需求。
但这一设计也使得部分新用户,在尝试学习项目代码时陷入困难,甚至会产生一种不知所措的感觉(我自己曾经在阅读AlgoTrader源代码的时候就有体会过),同时也增加了程序部署时的难度(Windows/Linux/Mac兼容性问题)。
所以接下来会在满足交易员快速上手的前提下,将开发上的侧重点转向精简项目代码,考虑尝试的方向包括:
- 剥离抽象化数据库(Database)和数据服务(DataService)两大组件,采用类似交易接口(Gateway)和策略应用(App)的设计;
- 从核心开源项目(vnpy)中分离以上组件到独立的模块项目中,比如把CTP接口放到(vnpy_ctp)项目中,用户可以按需安装;
- 更多采用Python 3.7以后引入的新语法糖,减少整体代码的行数(这条不知道是否会增加初学者的学习成本?)。
可能还有其他我们没有考虑到的方向,欢迎在下方留言补充。
优化文档资料
从2020年3季度开始,对项目的官方文档进行了持续的补齐和优化,现在大概覆盖了70%的模块功能使用说明,接下来2021年的目标:
- 做到100%的模块功能覆盖
- 更新部分较老的模块内容
- 把语言文字写得更加通俗易懂
同时我们的官网也会进一步完善,争取彻底解决异常崩溃、搜索关键词限制、邮件队列堵塞等大家反应比较多的问题。
除了作为基础使用说明的文档,学习效率更高的线上线下课程也会继续推出,目前计划新增的内容:
线上课程
- CTA策略深入研究班
- 期权系列剩余4阶段
- 多合约组合策略系列
线下课程
- 核心系统开发小班课