vnpyrs —— 与vnpy兼容但更快的回测框架
vnpyrs是以提升性能为目的,部分代码用Rust语言重新实现的vnpy,实现了vnpy的回测与参数调优功能。
它有三种工作模式:
- 脚本运行模式
- 图形界面运行模式
- vnpy插件模式(将极速K线图表嵌入vnpy为其提供服务)
具体快多少?
- K线图表快几个数量级
- 数据库读取快6倍多(以Sqlite为例)
- 策略代码执行快10%-30%
由来
众所周知,Python生态强大,编码灵活,但是有个缺点,就是慢。2024年,我实验性的用Rust重写了vnpy的回测模块,惊喜的发现,运行速度提升了近20倍。 显然,移植到Rust这件事的价值是巨大的。但还有个问题,由于它100%是用Rust编写的,包括策略也是用Rust编写的,那用户就无法使用Python的各种库了。况且,Rust是出了名的难入门的语言。上述的两点会降低它的实用性。
因此,在2025年我重新设定了目标,该项目必须完全兼容Python生态,理想情况下100%兼容已经为vnpy编写的策略,同时要提升性能。 由于用户代码是用Python编写的,那么性能提升就不会像用纯Rust编写时那样夸张了,但省下的时间依然不少。如果用examples文件夹里面的案例测试,在不改一行策略代码的情况下,在10核32G的电脑上,配合Python3.11,综合速度提升了一倍。(具体提升多少涉及硬件配置、Python版本和具体策略)
开发路线图
不会完全移植vnpy。一个原因是vnpy用到了很多动态语言的特性,以实现插件化,这部分在静态语言上实现很困难,或者需要大量的unsafe代码。另一个原因是没必要,涉及网络的模块,绝大部分时间花在网络的等待上,即使通过Rust、C++重写,体验也不会明显变好。
未来可能会支持用Rust、C、C++写策略,这样的话回测性能提升10倍也是有可能的,但需要谨慎的思考如何设计接口。