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

kaelzhang 2026-07-19 17:57 1

我做了一个开源 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 指标计算这层做好:



  • API 尽量保持 pandas 手感;

  • 内置 250+ 个交易指标 (非常多了,我没有专门做过对比,但搞不好是相关类库里最多的,让 AI 来做因子异动的研究会很有用);

  • 指标用指令列表达,例如 df["rsi:14"]df["macd"]

  • 指标列可以缓存;

  • 追加新 K 线后,下一次读取只刷新受影响的尾部窗口;

  • 底层用 Rust kernel ;

  • 可以导出 NumPy / Torch 。


一个最小例子:


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/

最新回复 (4)
  • kaelzhang 楼主 07-19 18:08
    1
    大佬们不妨顺手点个星,有空再细看
  • enrolls 07-19 21:44
    2
    有一个包叫 polars 。2C4G 洗数据 ohlcv ,北交,港交,上深早就压到 35 分钟以内全量。5kw+行算因子都是秒出的。
  • tonystarkgz3 07-20 09:20
    3
    已经有了一个类似的: https://github.com/tafia/calamine , 我做 rowspeak.ai 就用了这个库,也是用 rust 写的,速度会快很多
  • flmn 07-20 12:00
    4
    我的第一反应也是 polars ,试过这个么
* 帖子来源V2EX
返回