做了一个 Rust 内核的 pandas-like DataFrame,用来实时计算 K 线技术指标

7 月 19 日
 kaelzhang

我做了一个开源 Python 包: volas。

一个 4 年、15 分钟级别的交易数据回测,单个标的大约就是 14 万根 K 线。50 个标的就是约 700 万行。跑这还没开始扫参数,也还没开始训练模型。经常一个回测个把小时,还没跑模型光数据处理就花掉半小时也是常有的事情。

很多时候真正先把人卡住的不是策略逻辑,而是数据处理:读数据、拼特征、算 RSI 、MACD 、ATR 、Bollinger Bands ,一跑就是好几分钟。模型还没开始训练,回测还没真正跑起来,特征表已经先变成瓶颈。

如果是在实时循环或者逐根 K 线回测里,这个问题会更明显:K 线每新增一根,pandas 流水线就可能把整列指标重算一遍。但从数据依赖上看,新来的只是最后一根 K 线,前面大多数指标值其实已经稳定了。

我之前做了个 https://github.com/kaelzhang/stock-pandas ,但后来发现它是真的太慢了,哪怕后来我把部分内容用 pyO3 换成了 rust ,但发现很大的瓶颈发生在 pandas 本身。最后无奈之下,只好把整个全部用 rust 重写了。

volas 的思路是把 OHLCV 指标计算这层做好:

一个最小例子:

df["rsi:14"]
df.append(new_bar)
df["rsi:14"]  # 只刷新受影响的尾部窗口

我现在最想收集三类反馈:

  1. 这个指标指令 API 是否符合大家写指标流水线的习惯;
  2. 还有哪些常用指标或市场惯例缺失;
  3. benchmark 方法是否有偏差,是否有真实场景里 volas 明显输给 TA-Lib / pandas-ta / 自己实现。

它不是交易信号服务,也不是通用 pandas 替代品;普通表格分析继续用 pandas / polars 就好。volas 只想把 OHLCV 技术指标这层做快、做全、做得适合实时追加。

GitHub: https://github.com/kaelzhang/volas

在很多场景下是非常的快了,不少场景下快了几百倍。这里也有个性能对比: https://volas.ost.ai/

1868 次点击
所在节点    分享创造
4 条回复
kaelzhang
7 月 19 日
大佬们不妨顺手点个星,有空再细看
enrolls
7 月 19 日
有一个包叫 polars 。2C4G 洗数据 ohlcv ,北交,港交,上深早就压到 35 分钟以内全量。5kw+行算因子都是秒出的。
tonystarkgz3
7 月 20 日
已经有了一个类似的: https://github.com/tafia/calamine , 我做 rowspeak.ai 就用了这个库,也是用 rust 写的,速度会快很多
flmn
7 月 20 日
我的第一反应也是 polars ,试过这个么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1228373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX