爱意满满的作品展示区。
kaelzhang

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

  •  
  •   kaelzhang ·
    kaelzhang · 2 days ago · 926 views

    我做了一个开源 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 replies    2026-07-20 12:00:05 +08:00
    kaelzhang
        1
    kaelzhang  
    OP
       2 days ago
    大佬们不妨顺手点个星,有空再细看
    enrolls
        2
    enrolls  
       1 day ago
    有一个包叫 polars 。2C4G 洗数据 ohlcv ,北交,港交,上深早就压到 35 分钟以内全量。5kw+行算因子都是秒出的。
    tonystarkgz3
        3
    tonystarkgz3  
       1 day ago
    已经有了一个类似的: https://github.com/tafia/calamine , 我做 rowspeak.ai 就用了这个库,也是用 rust 写的,速度会快很多
    flmn
        4
    flmn  
       1 day ago
    我的第一反应也是 polars ,试过这个么
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3357 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 11:59 · PVG 19:59 · LAX 04:59 · JFK 07:59
    ♥ Do have faith in what you're doing.