我做了一个开源 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"] # 只刷新受影响的尾部窗口
我现在最想收集三类反馈:
- 这个指标指令 API 是否符合大家写指标流水线的习惯;
- 还有哪些常用指标或市场惯例缺失;
- benchmark 方法是否有偏差,是否有真实场景里
volas明显输给 TA-Lib / pandas-ta / 自己实现。
它不是交易信号服务,也不是通用 pandas 替代品;普通表格分析继续用 pandas / polars 就好。volas 只想把 OHLCV 技术指标这层做快、做全、做得适合实时追加。
GitHub: https://github.com/kaelzhang/volas
在很多场景下是非常的快了,不少场景下快了几百倍。这里也有个性能对比: https://volas.ost.ai/