RQAlpha 项目研究站 · 回测输出与指标
RQAlpha 回测结果怎么看:pickle 结构、指标与出图
回测结束时 框架会把结果写成一个 pickle 文件,内容是一个字典:summary(摘要指标)、各类 portfolios(组合市值序列)、positions(持仓)、trades(交割单)、plots(你在策略里 plot 的曲线)。用 pandas 读出来就能做二次分析,也可以用 rqalpha plot 直接出图。
摘要与风险指标
组合市值序列
持仓与交割单
策略内 plot 记录
依据官方文档列出的结果字典键整理的结构示意;非官方架构图。
结果文件里有什么
官方文档给出的 keys 清单(不同版本可能略有增减,以实际输出为准)。
| Key | 内容 | 怎么用 |
|---|---|---|
summary | 回测摘要:收益、风险、成本等单值指标字典 | 批量对比的核心数据来源 |
total_portfolios | 总账户市值时序(DataFrame,索引为日期) | 画净值曲线、算自定义指标 |
stock_portfolios / future_portfolios | 股票 / 期货账户市值时序 | 混合策略里分离两类账户表现 |
benchmark_portfolios | 基准的市值序列 | 做相对收益对比;没设 benchmark 时无意义 |
stock_positions / future_positions | 持仓明细(含成本、市值、盈亏、可卖数量等) | 复盘每笔持仓的盈亏贡献 |
trades | 交易详情(交割单) | 核对成交频率、滑点影响与换手 |
plots | 策略中 plot() 记录的自定义指标序列 | 把信号、仓位等中间量带出来可视化 |
读取结果的最小写法
import pandas as pd → result_dict = pd.read_pickle('result.pkl') → result_dict['summary'] 看指标、result_dict['total_portfolios'][-5:] 看最近几天的组合状态。
summary 里的指标分四类
下面按用途分类解释官方示例中出现的字段;具体实现由框架与 rqrisk 计算,口径以官方为准。
| 类别 | 字段(示例) | 看什么 |
|---|---|---|
| 收益类 | total_returns、annualized_returns、alpha、benchmark_total_returns、benchmark_annualized_returns | 策略赚了多少、相对基准的超额有多少 |
| 风险类 | max_drawdown、volatility、downside_risk、sharpe、sortino、information_ratio、tracking_error、beta | 回撤能不能扛、波动与基准的偏离程度 |
| 成本类 | transaction_cost、commission_multiplier、slippage | 费用与滑点在多大程度上吃掉了收益 |
| 状态类 | start_date、end_date、frequency、run_type、matching_type、strategy_file、market_value、cash、portfolio_value | 确认「这份结果是怎么跑出来的」——复盘与对比前建议先看 |
frequency(1d/1m)、matching_type(current_bar/next_bar)、commission_multiplier 与 slippage 不同,结果可能差很多。对比两份回测前,先把这四项对齐。回测输出与出图的几种方式
都由 sys_analyser 等系统 Mod 提供,参数在运行策略页有完整对应。
| 方式 | 命令/参数 | 适用场景 |
|---|---|---|
| 保存结果文件 | -o result.pkl | 需要二次分析、批量对比 |
| 回测后立即出图 | -p / --plot(--no-plot 关闭) | 本机快速看曲线 |
| 出图并保存 | --plot-save 路径 | 无图形界面的服务器 / 需要归档图 |
| 事后重新出图 | rqalpha plot result.pkl | 已存了 pkl 想补图,不必重跑回测 |
| 交易详情与报告 | --report(sys_analyser)、CSV 输出与 Excel 模板 | 需要留档、交付或线下核对成交 |
批量比较多次回测
官方「参数调优」文档给出的对比写法,本质是把每个 pkl 的 summary 摊平成一行。
三步得到参数对比表
1. 用 glob.glob("results/*.pkl") 找到所有结果文件;
2. 逐个 pd.read_pickle,从 summary 里取 annualized_returns、sharpe、max_drawdown 等字段,连同文件名拼成一行;
3. 用 pandas.DataFrame 汇总后按不同指标排序,观察哪些参数区间表现稳定。
指标口径的五个边界
这部分不是功能说明,而是避免误读结果的纪律。
| 易误读点 | 为什么会这样 | 建议做法 |
|---|---|---|
| 基准相关指标看似异常 | 没有设置 benchmark 就没有基准参照 | 对比 alpha/beta/information_ratio 前先确认设了基准 |
| 同策略两次结果不一致 | 撮合引擎、滑点、手续费乘数或数据版本变了 | 对齐 summary 的状态类字段后再比较 |
| 年化指标看起来偏高 | 回测区间短、单边行情或数据样本不足 | 拉长区间、跨越牛熊,或看滚动指标 |
| 回撤比预期小 | 日频撮合在极端行情下的成交假设偏乐观 | 提高滑点与手续费假设、降低仓位上限做压力测试 |
| plots 为空 | 策略里没有调用 plot() | 在 handle_bar 中显式记录关键中间量 |
常见问题
结果文件只能用 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 技能方向(回测与风险指标建模),两者无已证实集成。