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

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

回测结束时 RQAlpha 会把结果写成一个 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 清单;RQAlpha 不同版本可能略有增减,以实际输出为准。

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

summary 里的指标分四类

下面按用途分类解释官方示例中出现的字段;具体实现由 RQAlpha 与 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 不同,结果可能差很多。对比两份回测前,先把这四项对齐;这四项都在运行参数里,具体写法见 运行策略。
Output

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

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

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

批量比较多次回测

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

三步得到参数对比表

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

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

指标口径的五个边界

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

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

summary 每个字段是什么?照着官方示例输出逐项核对

下表用官方文档给出的 simple_macd 策略回测输出(2016-01-04 ~ 2017-01-19)做对照:左列字段名,第二列是官方示例里的值,后两列说明它回答什么问题、容易被误读在哪。数值随策略与区间变化,字段名以 RQAlpha 实际输出的 keys 为准。

字段官方示例输出的值回答什么问题注意点
total_returns0.027区间累计收益率区间越短,少数几段行情对它的影响越大
annualized_returns0.025按年折算的收益率不足一年的区间做年化会放大比值,别直接与多年实盘收益类比
benchmark / benchmark_total_returns / benchmark_annualized_returns000001.XSHG / -0.0599 / -0.0573基准是谁、基准自身涨跌多少没设置 benchmark 时,这几个字段没有参照意义
alpha0.027相对基准的超额收益口径由 RQAlpha 与 rqrisk 实现,先对齐基准与区间再比较
beta0.314相对基准的系统性风险暴露基准不同的两次回测不可比;没有基准数据时读数无意义
volatility0.125收益波动率(过程风险)与回撤幅度(max_drawdown)是两种视角:波动率低不等于回撤小
downside_risk0.143只统计下行部分的波动与 sortino 配套看;单独看容易忽略上涨端的波动
max_drawdown0.088区间内从高点到低点的回撤幅度日频撮合的成交假设偏乐观,实盘回撤通常更大
sharpe / sortino0.016 / 0.014单位风险换来的收益无风险利率与年化方式由 RQAlpha 决定,跨软件比同一指标前先对齐这两项
information_ratio / tracking_error0.457 / 0.181相对基准的稳定性与偏离度同样依赖基准;不设基准时无法解读
transaction_cost27467.462区间累计交易成本要跟手续费乘数、滑点一起看,才知道成本假设是否过于温和
commission_multiplier / slippage / margin_multiplier1 / 0 / 1手续费乘数、滑点与保证金乘数三项都是「结果可比性」开关,任何一项变了结果都会变
cash / frozen_cash / market_value / portfolio_value / pnl-617.642 / 0.0 / 1027242.0 / 1026624.358 / 26624.358资金与市值结构示例里 cash 为负,说明 RQAlpha 的资金口径含融资/保证金占用,不能读成「账户没钱了」
frequency / run_type / matching_type / strategy_name / strategy_type1d / BACKTEST / CURRENT_BAR_CLOSE / simple_macd / stock这份结果是怎么跑出来的对比两份结果前先把这几项对齐,否则差异可能来自设置而非策略
怎么用这张表:字段名与示例值取自官方 overview 文档的输出示例,RQAlpha 不同版本可能有增减——先拿本机结果 result_dict['summary'].keys() 与这张表对照,缺的字段不要凭印象补,缺哪个就在代码里取默认值。
Read and reuse

拿到结果文件之后:RQAlpha 的几种用法怎么选?

结果能做什么,取决于运行时加了哪些参数。先看用法对照,再看可复制的步骤。

用法怎么做得到什么适用场景注意点
只看摘要不加输出参数直接 rqalpha run …控制台打印的收益与 Risk 摘要先快速判断一次回测值不值得深看不落文件,事后既无法追溯明细,也无法用 rqalpha plot 补图
存下来做二次分析加 -o result.pkl,再用 pandas.read_pickle 读指标字典 + 市值 / 持仓 / 交割单的 DataFrame自定义指标、批量对比、留档pkl 是 Python 对象,换机器读取前先保证依赖版本一致
出图与归档-p / --plot(--no-plot 关闭);无图形界面用 --plot-save 路径;事后补图用 rqalpha plot收益曲线图(可保存成文件)汇报、归档、服务器上出图事后补图的前提是当初存了 -o 的 pkl
核对成交明细--report(sys_analyser 保存交易详情),再读 trades 与 stock_positions交割单与逐日持仓明细与券商流水核对、检查换手与滑点假设total_orders、total_trades、value_percent 按日输出在持仓表里,需要自己聚合
做相对收益评价运行时加 -bm/--benchmark 000300.XSHG让 alpha / beta / tracking_error 有参照基准与指数对比、评价超额能力不设基准时这些字段看不出结论,别硬解释

四步把一次回测变成可用材料

1. 存结果并出图(官方教程写法):rqalpha run -f examples/golden_cross.py -s 2014-01-01 -e 2016-01-01 --account stock 100000 -p -bm 000001.XSHE -o result.pkl —— 指定基准、输出结果文件并画曲线(预期输出:控制台打印收益与 Risk,当前目录出现 result.pkl);
2. 读指标与序列:result_dict = pd.read_pickle('result.pkl') → result_dict['summary']['sharpe'] → result_dict['total_portfolios'][-5:](预期输出:先是一个指标 dict,再是一个以日期为索引、含 annualized_returns、daily_pnl、market_value、portfolio_value、total_returns、transaction_cost 等列的 DataFrame);
3. 事后补图:rqalpha plot result.pkl --plot-save plot.png —— 不重跑回测,直接把图存成文件(预期输出:生成 plot.png;这是官方「扩展命令行」章节给出的写法);
4. 批量汇总:用 glob.glob("results/*.pkl") 遍历结果目录,取每个 summary 的 annualized_returns、sharpe、max_drawdown 拼成一张 DataFrame,再分别按 sharpe 与 annualized_returns 排序(预期输出:两张 Top 10 列表,用来看哪些参数区间稳定)。

-o 与 --report 不是一回事:前者把回测数据输出到指定文件,后者保存交易详情。两者都不开时,RQAlpha 只在控制台给一段摘要,事后无法补图、也无法逐笔核对成交——需要留档时建议两者都开。
FAQ

常见问题

结果文件只能用 pickle 吗?

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

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

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

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

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

能输出 HTML 或 PDF 报告吗?

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

trades 能导出成 Excel 核对吗?

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

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

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

下一步:把参数扫一遍

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