🧰 量化常用开源框架概览

事件驱动(Backtrader/Zipline/RQAlpha)与向量化(VectorBT)两大范式的取舍、专项库(QuantLib/PyPortfolioOpt/qlib)的定位、两级流水用法与自建引擎的分界线。

框架的价值不是「帮你写回测」,而是强制你面对正确的问题:成交价用哪个?成本怎么算?停牌能不能成交?——成熟框架把这些坑内置成了默认答案。本篇按用途给一张地图,并回答「什么时候自己写」。

事件驱动回测框架

Backtrader:个人量化的常青树。事件驱动、broker 抽象贴近真实下单(限价/市价/止损单)、文档社区成熟。适合:中低频股票/期货策略、需要逐 bar 撮合逻辑的场景。短板:性能一般(百万 bar 量级变慢)、多标的组合优化需要自己动手——它假设「策略是个体交易者」,不是「组合管理器」。

Zipline / Zi-Reloaded:Quantopian 遗产,initialize/handle_data 范式与 Pipeline API(横截面因子批量计算)是其精华。适合:美股因子研究、喜欢 Pipeline 声明式风格的研究者。原版停更后用社区维护的 zi-reloaded;A 股数据适配需要自己处理(复权、涨跌停)——框架默认的市场是美股,制度细节的空缺就是偏差的入口。

RQAlpha(米筐开源):国产框架里工程化最好的选择之一,A 股制度细节(T+1、涨跌停、停牌、分红送转)默认正确处理——这是它相对舶来品的决定性优势。风格与 Zipline 相近,可配合米筐的 RQData 使用。适合:A 股中低频策略的严肃回测。判断一个 A 股框架是否合格的三道测试题:跌停日卖出成交吗?分红后持仓股数变吗?次新上市首日能买吗?——RQAlpha 都答对。

JoinQuant/聚宽 & 米筐平台(在线):云端一体化(数据+研究+回测+模拟盘),jqdata API 在国内个人研究者中普及度最高。适合快速验证 A 股想法、不想搭数据管道的人。注意:平台锁定与导出成本——研究资产尽早沉淀为本地代码与数据,把「平台」降级为「数据源」,否则多年的策略积累锁死在别人手里。

向量化回测框架

VectorBT:整列运算的极简回测(信号矩阵 → 组合模拟),速度比事件驱动快 2–3 个数量级,参数扫描(100 组均线的网格)是它的主场。短板:撮合模型简化(默认下一收盘价成交),成本与制度细节要自己保证正确。适合:因子 idea 的快速筛选、参数稳健性热力图;不适合:精确执行逻辑的最终验证。

正确用法是两级流水:

1
2
3
4
第一级:VectorBT 海选(200 组参数 × 10 年,分钟级出热力图)
   ↓ 入围 5 组
第二级:RQAlpha/事件驱动精测(含真实成本、涨跌停、停牌,逐组复核)
   ↓ 最终 1–2 组进仿真盘

只用第一级下结论是最常见的自欺——向量化框架的乐观偏差(无成本、理想成交)叠加起来轻松虚增 5–10 个点年化。

专项库(不是回测框架,但常被误当框架)

QuantLib:固定收益与衍生品定价的工业级库(利率曲线构建、波动率曲面、奇异期权、债券久期凸性)。C++ 内核 Python 绑定。适合做衍生品/固收的人;股票多因子研究者用不到——别为了「专业感」引入两倍于策略代码的依赖。

PyPortfolioOpt:组合优化的教科书级实现:均值-方差、Black-Litterman、层次风险平价(HRP)、收缩协方差,全部几行调用。适合把组合构建 章的方法直接落地。短板:约束表达力弱于专业优化器——复杂的行业/换手/暴露约束要用 cvxpy 自建(见约束优化 )。

其他值得认识的:qlib(微软开源,ML 量化流水线,见机器学习策略 )、empyrical/quantstats(绩效指标计算)、riskfolio-lib(组合优化进阶)、arctic(时序存储,见调度与数据库 )。

选型决策与自建的分界线

你的阶段推荐
第一个回测,学习概念Backtrader 或聚宽(在线)
A 股日频多因子,要制度正确性RQAlpha / 聚宽 + 本地 VectorBT 海选
参数扫描、因子海选VectorBT + 自定义成本模型
期权/固收定价QuantLib
组合权重计算PyPortfolioOpt / cvxpy

什么时候自己写引擎? 三个信号同时出现:框架的撮合假设与你交易的制度细节持续冲突(如集合竞价、批量撮合);你需要在回测内做实时组合优化;框架成为研究吞吐的瓶颈。在此之前,「自研回测引擎」是工程快感、不是研究产出——把同样的时间投入因子研究,期望收益高得多(见回测框架设计 :即便自建,也该先读懂框架处理了哪些偏差)。

关联阅读:回测偏差大全 是评估任何框架的检查表——框架默认处理了哪几条、没处理哪几条;数据工程 决定框架之外你仍要自建的数据层。