回测框架别乱选:五个工具,一个信号,到底谁最靠谱

回测框架别乱选:五个工具,一个信号,到底谁最靠谱 前两天有个做量化的朋友问我“我应该用哪个回测框架”他列了一串名字NautilusTrader、Qlib、RQAlpha、vectorbt、Backtrader。我说你先别选。我问了他一个问题你到底想验证什么他愣了三秒。这就是大多数人的起点——先找工具再想问题。而正确的顺序恰恰相反。一、框架选错回测就是在验证你的误解很多人一开始会问哪个框架最好这个问题太粗了。因为最好取决于你要验证的问题。如果你只是想知道一个全市场信号有没有预测力你最需要的是快速处理大量股票、日期和参数。这时候矩阵化研究框架更有价值。如果你想知道在 A 股真实交易规则下能不能成交你最需要的是 T1、涨跌停、整手、手续费、印花税和撮合规则。这时候事件驱动回测框架更有价值。如果你要把同一套策略代码从回测推到实盘你最需要的是交易系统级架构。这时候 NautilusTrader 这种重型引擎才有意义。框架选错回测不是验证策略而是在验证你的误解。那五个框架到底是什么关系简单说它们根本不在同一个抽象层级上。vectorbt 是信号实验室。Qlib 是因子研究平台。RQAlpha 是交易规则模拟器。Backtrader 是老牌通用回测器。NautilusTrader 是生产级交易引擎。你拿生产级引擎去筛信号就像用手术刀切菜——不是不能用但你切完菜刀也钝了。最好的工具不是功能最多的那个而是离问题最近的那个。二、vectorbt快是快但 A 股规则要你自己补vectorbt 的定位非常直白Thinks in matrices. Backtests at scale.它基于 pandas、NumPy 和 Numba把交易信号当成矩阵处理。对于已经有 DataFrame 的研究者这是极大的效率优势。你有一个收盘价矩阵。你有一个信号矩阵。你可以快速得到收益曲线、回撤、Sharpe、交易记录、参数扫描结果和多股票组合表现。在 Notebook 里跑一下pf.stats()和pf.plot()体验非常好。但问题是——它不是 A 股规则模拟器。T1、涨跌停、停牌、ST、退市、整手、印花税单边、冲击成本这些都需要你自己准备约束矩阵或自定义订单逻辑。你得自己生成can_buy[date, stock]、can_sell[date, stock]、lot_size[date, stock]然后再把这些约束传进订单生成层。换句话说vectorbt 给你一辆跑车但交通规则得你自己画。它最适合做第一层粗筛这个信号有没有大致统计优势参数是否敏感分年表现是否稳定成本稍微加一点收益是不是就消失了但如果一个策略只在 vectorbt 里好看还不能说明它能通过 A 股真实规则复核。另外vectorbt 的许可证是 Apache 2.0 with Commons Clause。它不是普通的 Apache-2.0。如果要商用封装或把它作为付费服务核心需要单独审查许可。速度快不代表结果真A 股回测不补规则就是纸上谈兵。三、Qlib微软出品全 A 股信号研究的第一站Qlib 是微软开源的 AI-oriented quantitative investment platform。注意它不是单纯的下单回测器。它覆盖数据处理、模型训练、回测、风险分析、组合优化和执行模拟。它最适合的输入不是下一根 K 线买不买而是一个全市场预测分数表。Qlib 官方策略文档给出的 prediction score 是 pandas DataFrame索引是(datetime, instrument)包含score列。这个结构和全 A 股信号天然匹配。有了这个分数Qlib 可以做 TopK、Dropout、组合回测、benchmark 对比、成本后收益、风险分析和报告输出。它对 A 股约束也不是空白。Qlib 的源码里有trade_unit、limit_buy、limit_sell、open_cost、close_cost、min_cost、impact_cost、volume_threshold等机制。源码注释还写明trade_unit100可用于中国 A 股市场。这意味着 Qlib 比 vectorbt 更适合直接承载全 A 股组合研究。但 Qlib 也有明确的问题数据。Qlib 官方数据集因为更严格的数据安全政策暂时关闭了。官方提醒Yahoo 数据可能不完美严肃研究建议用户准备自己的高质量数据。所以Qlib 的正确用法不是相信它自带的数据。正确用法是把你的 A 股数据整理成 Qlib 格式把你的信号整理成 prediction score 格式用 Qlib 做 TopK、分组、OOS、walk-forward、成本后收益和风险分析对通过筛选的策略再进入 RQAlpha 复核。Qlib 的价值不是替你判断数据真伪而是把信号研究流程标准化。四、RQAlpha更接近 A 股交易规则的复核器RQAlpha 是米筐开源的量化框架。它和 Qlib 的区别很重要Qlib 更像研究平台RQAlpha 更像交易规则模拟器。RQAlpha 的sys_simulationMod 支持不同撮合方式。日回测可用 current_bar 或 vwap分钟回测可用 current_bar、next_bar、vwaptick 回测还支持 last、best own、best counterparty、counterparty offer。它还支持涨跌停撮合限制、成交量限制、无成交量 bar 限制和滑点模型。RQAlpha 的sys_transaction_costMod 负责股票、期货等不同市场和品种的交易税费计算。更关键的是RQAlpha 的 changelog 明确提到market_tplus字段用来标识合约对平仓时间的限制例如 A 股 T1。changelog 也记录了 A 股 T1 逻辑重构、涨跌停滑点边界、Signal 模式下涨跌停订单拒绝等变化。这说明 RQAlpha 对中国市场交易约束的关注比 vectorbt、Backtrader、NautilusTrader 更直接。需要注意的是RQAlpha 仅限非商业使用商业使用需要联系米筐。数据方面需要 RQDatac 权限或手动下载 bundle。所以RQAlpha 很适合做第二层复核Qlib 发现一个信号可能有效RQAlpha 检查它在 A 股规则、撮合、成本、涨跌停和 T1 下是否仍然有效。研究看统计落地看规则。Qlib 和 RQAlpha 是一对好搭档。五、NautilusTrader不是回测小工具而是交易引擎NautilusTrader 是一个开源、Rust-native、生产级交易引擎。它的官方 README 把它描述为面向多资产、多市场交易系统的引擎并强调 deterministic event-driven architecture。简单说它关心的不只是算一条收益曲线而是同一套策略逻辑如何在研究、仿真、实盘之间保持一致。它的核心结构更像交易系统内核venue、instrument、portfolio、order、execution、message bus、cache、strategy、actor 都是框架的一部分。这个设计很强但也很重。如果你只是拿一个 pandas DataFrame 和一个信号列想快速检查信号是否有效NautilusTrader 会显得绕。你要先定义 instrument、venue、数据结构、catalog、strategy config 和 execution config。它的数据侧也不是给一个 CSV 就自动跑完的轻量模式。官方强调需要用 DataLoader 读取外部格式再用 DataWrangler 转成 Nautilus 的数据对象或者写入ParquetDataCatalog后供BacktestNode使用。GitHub 数据显示它有 24000 多颗星最新版本已经到了 v1.228.0每周都在更新。但它没有原生 QMT/miniQMT/A 股数据接口。适合它的场景是你未来要接实盘你需要多市场多资产多 venue你在意回测和实盘执行语义一致你愿意为工程严谨性付出学习成本。不适合它的场景是你只是想快速检验全 A 股信号你的数据还是 CSV/Parquet/宽表矩阵你暂时不做实盘。用 NautilusTrader 做信号初筛就像开战斗机去菜市场——杀鸡用了牛刀刀也累了。六、Backtrader老牌框架能用但不一定是首选Backtrader 是很多 Python 量化研究者熟悉的老牌框架。它的概念直观写 Strategy喂 DataFeed跑 Cerebro看结果。支持 CSV、online sources、pandas 数据源多数据源多策略commission schemesslippagevolume fillingcash adjustment 和 matplotlib plotting。GitHub 上有 22000 多颗星但最近一次 push 是 2024 年 8 月。相比其他四个框架维护活跃度偏弱。它的缺点是对全市场矩阵化信号不够自然对 A 股规则不够原生对生产级研究到实盘一致性不够强代码风格偏老现代数据工程集成成本较高。Backtrader 不是不能用。对已有 Backtrader 代码资产的人或者想做传统事件驱动策略复核的人它依然值得考虑。但对全 A 股所有股票信号有效性检查这个具体任务它不是第一推荐。老牌不代表过时但维护节奏慢的框架踩坑时可能找不到人问。七、A 股四个关键约束谁更省心有四个约束非常关键T1、涨跌停、最小交易单位、成本。这四个约束决定了一个回测是不是 A 股回测。T1A 股股票通常今天买入下一交易日才能卖出。RQAlpha 最明确changelog 里有market_tplus并记录了 A 股 T1 逻辑重构。Qlib 日频组合回测天然按交易步推进但分钟级严格 T1 需要确认执行器和持仓可卖逻辑。vectorbt、Backtrader、NautilusTrader 都需要用户自定义。涨跌停涨停不一定买得到。跌停不一定卖得出。RQAlpha 有 price_limit 和涨跌停撮合限制。Qlib 有limit_buy、limit_sell。vectorbt 需要can_buy、can_sell矩阵。Backtrader 和 NautilusTrader 需要自定义撮合逻辑。最小交易单位普通 A 股买入通常按 100 股整手申报。Qlib 的trade_unit机制最直接源码注释说明 100 可用于中国 A 股市场。RQAlpha 有 min order quantity 和 order step size。vectorbt 有size_granularity但它只是数量粒度不等于完整 A 股交易制度。成本A 股成本不是一个fees0.0003就完事。成本至少包括买入佣金、卖出佣金、过户费、卖出印花税、滑点、冲击成本、最低佣金。财政部、税务总局公告显示自 2023 年 8 月 28 日起证券交易印花税实施减半征收实务上 A 股股票卖出方单边印花税从 0.1% 调整为 0.05%。框架层面RQAlpha 的 transaction cost mod 最贴近中国市场。Qlib 有open_cost、close_cost、min_cost、impact_cost。vectorbt 有fees、fixed_fees、slippage但买卖不同费率和印花税变化需要自定义。Backtrader 有 commission schemes但 A 股细节需自定义。NautilusTrader 订单和费用模型可扩展但需要工程实现。没有规则约束的回测只是数字游戏。八、回到更大的图景回测框架的本质是什么它不是让你画出漂亮的收益曲线。它是让你在花钱之前先用历史数据回答一个问题这个信号是真的有效还是只是噪声五个框架各有定位。vectorbt 快Qlib 准RQAlpha 真Backtrader 稳NautilusTrader 深。选哪个不重要。重要的是你知道自己在验证什么。先想清楚要验证什么再选工具。否则工具再强也算出错误的答案。延伸阅读 / 参考来源• NautilusTrader GitHub (24K stars): https://github.com/nautechsystems/nautilus_trader• Qlib GitHub (44K stars): https://github.com/microsoft/qlib• RQAlpha GitHub (6.4K stars): https://github.com/ricequant/rqalpha• vectorbt GitHub (7.9K stars): https://github.com/polakowo/vectorbt• Backtrader GitHub (22K stars): https://github.com/mementum/backtrader• 财政部、税务总局证券交易印花税减半公告: https://shanghai.chinatax.gov.cn/zcfw/zcfgk/yhs/202308/t468451.html