RQAlpha 项目研究站 · 回测输出与指标

RQAlpha 回测结果怎么看:pickle 结构、指标与出图

回测结束时 框架会把结果写成一个 pickle 文件,内容是一个字典:summary(摘要指标)、各类 portfolios(组合市值序列)、positions(持仓)、trades(交割单)、plots(你在策略里 plot 的曲线)。用 pandas 读出来就能做二次分析,也可以用 rqalpha plot 直接出图。

读取方式:pandas.read_pickle出图:--plot / rqalpha plot依据官方 overview 与 tutorial(2026-09 核验)
summary
摘要与风险指标
portfolios
组合市值序列
positions / trades
持仓与交割单
plots
策略内 plot 记录

依据官方文档列出的结果字典键整理的结构示意;非官方架构图。

Structure

结果文件里有什么

官方文档给出的 keys 清单(不同版本可能略有增减,以实际输出为准)。

Key内容怎么用
summary回测摘要:收益、风险、成本等单值指标字典批量对比的核心数据来源
total_portfolios总账户市值时序(DataFrame,索引为日期)画净值曲线、算自定义指标
stock_portfolios / future_portfolios股票 / 期货账户市值时序混合策略里分离两类账户表现
benchmark_portfolios基准的市值序列做相对收益对比;没设 benchmark 时无意义
stock_positions / future_positions持仓明细(含成本、市值、盈亏、可卖数量等)复盘每笔持仓的盈亏贡献
trades交易详情(交割单)核对成交频率、滑点影响与换手
plots策略中 plot() 记录的自定义指标序列把信号、仓位等中间量带出来可视化

读取结果的最小写法

import pandas as pdresult_dict = pd.read_pickle('result.pkl')result_dict['summary'] 看指标、result_dict['total_portfolios'][-5:] 看最近几天的组合状态。

Summary

summary 里的指标分四类

下面按用途分类解释官方示例中出现的字段;具体实现由框架与 rqrisk 计算,口径以官方为准。

类别字段(示例)看什么
收益类total_returnsannualized_returnsalphabenchmark_total_returnsbenchmark_annualized_returns策略赚了多少、相对基准的超额有多少
风险类max_drawdownvolatilitydownside_risksharpesortinoinformation_ratiotracking_errorbeta回撤能不能扛、波动与基准的偏离程度
成本类transaction_costcommission_multiplierslippage费用与滑点在多大程度上吃掉了收益
状态类start_dateend_datefrequencyrun_typematching_typestrategy_filemarket_valuecashportfolio_value确认「这份结果是怎么跑出来的」——复盘与对比前建议先看
先看状态类字段再看收益:同样的策略文件,frequency(1d/1m)、matching_type(current_bar/next_bar)、commission_multiplierslippage 不同,结果可能差很多。对比两份回测前,先把这四项对齐。
Output

回测输出与出图的几种方式

都由 sys_analyser 等系统 Mod 提供,参数在运行策略页有完整对应。

方式命令/参数适用场景
保存结果文件-o result.pkl需要二次分析、批量对比
回测后立即出图-p / --plot--no-plot 关闭)本机快速看曲线
出图并保存--plot-save 路径无图形界面的服务器 / 需要归档图
事后重新出图rqalpha plot result.pkl已存了 pkl 想补图,不必重跑回测
交易详情与报告--report(sys_analyser)、CSV 输出与 Excel 模板需要留档、交付或线下核对成交
Batch

批量比较多次回测

官方「参数调优」文档给出的对比写法,本质是把每个 pkl 的 summary 摊平成一行。

三步得到参数对比表

1. 用 glob.glob("results/*.pkl") 找到所有结果文件;
2. 逐个 pd.read_pickle,从 summary 里取 annualized_returnssharpemax_drawdown 等字段,连同文件名拼成一行;
3. 用 pandas.DataFrame 汇总后按不同指标排序,观察哪些参数区间表现稳定。

别只看单一指标排序:官方示例同时按 sharpe 与 annualized_returns 排序,就是为了避免「单指标领先但实际不可用」——高收益往往伴随高回撤,需要两个维度一起看。
Caveats

指标口径的五个边界

这部分不是功能说明,而是避免误读结果的纪律。

易误读点为什么会这样建议做法
基准相关指标看似异常没有设置 benchmark 就没有基准参照对比 alpha/beta/information_ratio 前先确认设了基准
同策略两次结果不一致撮合引擎、滑点、手续费乘数或数据版本变了对齐 summary 的状态类字段后再比较
年化指标看起来偏高回测区间短、单边行情或数据样本不足拉长区间、跨越牛熊,或看滚动指标
回撤比预期小日频撮合在极端行情下的成交假设偏乐观提高滑点与手续费假设、降低仓位上限做压力测试
plots 为空策略里没有调用 plot()handle_bar 中显式记录关键中间量
一句话:回测指标是「在你设定的假设下」的结果,不是对未来的承诺。本站只做整理与边界提示,不提供任何策略推荐或收益预期。
FAQ

常见问题

结果文件只能用 pickle 吗?

官方流程以 pickle 为主(pandas 可直接读),此外 sys_analyser 支持交易详情与报告输出、CSV 与 Excel 模板。若需要喂给别的系统,建议在读取 pickle 后自行导出为 CSV/Parquet。

能只要指标、不存明细吗?

可以:不加 -o 也能在控制台看到收益与风险输出(官方「10 分钟教程」里回测结束会显示收益与 Risk),但指标细节与明细就无法事后追溯,无法使用 rqalpha plot。建议至少保留一个结果文件,便于复盘。

sharpe、sortino 这些指标怎么算的?

由框架与 rqrisk 库计算。不同软件在无风险利率、年化方式上取值不同,跨软件对比同一指标时,先把这两项口径对齐,否则差异可能来自算法而非策略。

能输出 HTML 或 PDF 报告吗?

官方文档描述的输出形式是 pickle、图表、CSV 与 Excel 模板,未承诺内置 HTML/PDF 报告。需要定制报告,可在读取结果后用 pandas/matplotlib 自行生成。

trades 能导出成 Excel 核对吗?

可以先读 pickle 取出 trades,再用 pandas 的 to_excel 导出(框架依赖里已包含 openpyxl)。这样便于与券商流水逐笔核对。

想跳过写策略、直接拿到回测结论可以吗?

本项目的输出建立在「你自己写的策略」之上,它不提供现成策略结论。若你只是想快速建立一个研究结论并做指标计算,可看对比页里 EasyClaw 的 quant-analyst 技能方向(回测与风险指标建模),两者无已证实集成。

下一步:把参数扫一遍

单次回测只是样本。用 context_vars 与多进程批量回测,才能看出参数区间的稳定性。