1.10 看懂回测报告

适用版本 V2V3

本篇重点:本篇逐块讲回测报告里的指标、收益曲线和四个标签页怎么看、怎么算。

注意

回测不代表未来收益。历史数据上表现好的策略,换一段行情可能完全失效。报告里的数字用来检查策略逻辑是否按设想执行、风险有多大,不能当作收益预期。

1 打开报告

有两种方式:

  1. 回测正常跑完后,报告窗口自动弹出。
  2. 以前的回测:点主界面右侧「回测历史管理」,在列表里找到那一条,点「报告」。

窗口右上角有「导出回测结果」按钮,见第 8 节。

「回测结果分析」窗口(最大化):左上「基本信息」、右上「收益曲线」、下方标签页,右上角是「导出回测结果」按钮
「回测结果分析」窗口(最大化):左上「基本信息」、右上「收益曲线」、下方标签页,右上角是「导出回测结果」按钮

如果本地没有基准指数数据,窗口顶部会出现一条黄色提示「缺少基准指数数据」(V2)。这时收益曲线里的基准线是一条平线,阿尔法、贝塔和基准收益没有参考意义。点提示条右侧「补基准数据」下载后,重新运行回测即可。

2 基本信息

左上「基本信息」分组列出 21 项内容。第一行是策略名称,其余两列排列。收益类数字为正时显示红色,为负时显示绿色。
下表说明每一项的含义和软件的计算方法。表中「交易日数 n」指回测第一天到最后一天之间的交易日数。

2.1 收益

指标 含义与算法
回测区间 实际有每日统计的第一天到最后一天
初始资金 主界面「账户信息」里填的初始资金
最终资金 回测最后一天收盘后的总资产(现金 + 持仓市值)
总收益率 (最终资金 − 初始资金)÷ 初始资金
年化收益率 (1 + 总收益率)^(250 ÷ n) − 1
基准收益率 基准指数在回测期间的涨幅。起点取回测开始前最后一个交易日的收盘价,终点取回测最后一天的收盘价
基准年化收益率 用基准收益率按同样的 250 天口径折算

每天收盘后的持仓市值怎么算:自定义定时触发时,持仓和基准都按当天日线的收盘价估值(tick 时按不复权价格),本地没有当天日线时才退回用当天最后一个触发时间点的价格;其他触发方式按当天最后一根 K 线(或最后一笔 tick)的价格估值。

2.2 风险

指标 含义与算法
最大回撤 按每日收盘后的总资产计算:每天相对此前最高点下跌的百分比,取其中最大值。「此前最高点」从初始资金算起,所以回测一开始就亏损,也会计入回撤。日内波动不计入。报告窗口、回测历史列表和导出的汇总文件用的是同一个口径
年化波动率 每日收益率的波动程度,按 √(250 ÷ n × Σ(当日收益率 − 平均日收益率)²) 计算
夏普比率 (策略年化收益率 − 无风险收益率)÷ 年化波动率。衡量每承担一份波动换来多少超额收益
索提诺比率 (策略年化收益率 − 无风险收益率)÷ 下行波动率。下行波动率只统计策略当日收益低于基准当日收益的那些天;没有基准数据时,和 0 比较
贝塔 策略日收益率和基准日收益率的协方差 ÷ 基准日收益率的方差。大于 1 表示比基准波动大。两者重叠的交易日不足 11 天时显示 0
阿尔法 策略年化收益率 −[无风险收益率 + 贝塔 ×(基准年化收益率 − 无风险收益率)]。以小数显示,例如 0.0523 表示 5.23%

无风险收益率默认 0.03(3%),在「设置」→「基本设置」里修改,改后重新打开报告生效。

2.3 交易

指标 含义与算法
胜率 盈利的平仓次数 ÷ 全部平仓次数
盈亏比 所有盈利平仓的盈利总额 ÷ 所有亏损平仓的亏损总额。没有亏损时显示 ∞
日均交易次数 成交笔数 ÷ 回测天数,买入和卖出都算;一笔委托分几次成交(部分成交、挂单后续成交)按实际成交的笔数算
最大连续盈利 每日收益率连续为正的最长天数
最大连续亏损 每日收益率连续为负的最长天数;收益率为 0 的一天会中断连续计数
最大单笔盈利 单次平仓的最大盈利金额
最大单笔亏损 单次平仓的最大亏损金额(显示为正数)

胜率、盈亏比、最大单笔盈亏的统计口径:

  • 只算已平仓的交易。每一次卖出算一次平仓,盈亏 =(卖出价 − 持仓均价)× 卖出数量;分几次卖出就算几次。回测结束时还没卖出的持仓不计入。
  • 持仓均价按历次买入的成交价加权计算。
  • 这几项按成交价计算,不扣手续费;手续费已经体现在总资产和收益率里。
「基本信息」分组:第一行是策略名称,下面两列是各项指标
「基本信息」分组:第一行是策略名称,下面两列是各项指标
提示

看指标时,先看总收益率和基准收益率,确认策略是否跑赢同期指数;再看最大回撤,判断中途最多可能亏多少;最后看夏普比率和胜率、盈亏比,理解收益是怎么来的。胜率低但盈亏比高,或者胜率高但盈亏比低,都可能是正常的策略特征。

3 收益曲线

右上「收益曲线」由上到下四张图,横轴对齐:

  1. 策略收益与基准对比:蓝线是策略净值(总资产 ÷ 初始资金),橙线是基准指数净值。蓝线在橙线上方表示同期跑赢基准。
  2. 回撤:红色曲线表示每天距离此前最高点(从初始资金算起)下跌了多少,最低点标注「最大回撤: xx%」。
  3. 日盈亏:每天总资产的变化金额,红柱盈利,绿柱亏损。
  4. 买入/卖出量:每天的买入股数(红)和卖出股数(蓝)。

把鼠标移到图上,会出现一条贯穿四张图的竖虚线,并弹出提示框,显示这一天的日期、策略净值、基准净值、回撤和当日盈亏。例如下图提示框里是「日期: 2025-04-28、策略: 0.9383、基准: 0.9610、回撤: 8.41%、盈亏: -826.59」。

鼠标停在收益曲线上,竖虚线和提示框显示当天的数据
鼠标停在收益曲线上,竖虚线和提示框显示当天的数据

4 交易记录

下方第一个标签页「交易记录」逐笔列出成交:交易时间、证券代码、交易方向、成交价格、成交数量、成交金额、手续费、持仓资金、可用资金、总资产。买入显示红色,卖出显示蓝色。每一笔真实成交都在这里记一次:策略当时就成交的、挂单之后才成交的、因成交量限制只成交了一部分的,都各占一行,不会漏记,也不会重复。只有真正执行成功的才算成交;资金或持仓不足被拒绝的委托不会出现在这里。
用它核对策略是否按设想下单:买卖时间对不对、数量是否符合资金和 100 股一手的限制、手续费是否正常。

「交易记录」标签页(证券代码已打码):买入为红字,卖出为蓝字
「交易记录」标签页(证券代码已打码):买入为红字,卖出为蓝字

5 日收益

「日收益」标签页每天一行:日期、总资产、持仓市值、可用资金、日收益率。日收益率为正显示红色,为负显示绿色。用了日线「日内触发上限」让策略一天运行多轮时,同样每天只有一行,记录的是当天最后一轮之后的状态;日收益率相对上一个交易日收盘后的总资产计算。
可以用它看资金是否长期闲置(可用资金一直很高),或者找出单日亏损最大的日子,再回到交易记录里查原因。

「日收益」标签页:日期、总资产、持仓市值、可用资金、日收益率
「日收益」标签页:日期、总资产、持仓市值、可用资金、日收益率

6 绩效分析

「绩效分析」标签页有两张图:

  • 收益分布:每日收益率的直方图,横轴是日收益率,纵轴是出现的天数。橙色曲线是按同样均值和标准差画的正态分布,橙色虚线是均值,白色虚线是 0,右上角标出均值和标准差。两侧的长尾说明出现过幅度较大的单日盈亏。
  • 月度收益热力图:纵轴年份、横轴月份,每格是该月的收益率(由每日收益率连乘得到)。颜色越红收益越高,越绿收益越低。用它看策略是否集中在某几个月赚钱,或者某段行情里连续亏损。
「绩效分析」标签页:左边是收益分布直方图,右边是月度收益热力图(示例里 1~7 月有数据,5、6 月为红色,表示这两个月盈利)
「绩效分析」标签页:左边是收益分布直方图,右边是月度收益热力图(示例里 1~7 月有数据,5、6 月为红色,表示这两个月盈利)

7 个股分析

多只股票的策略,只看总体曲线很难发现单只股票的问题。点标签栏最右侧的「📊 个股分析」,会打开单独的「个股分析」窗口(没有任何成交时会提示无法分析)。

  1. 左上角「选择股票」下拉框里是有过成交的股票,选一只。
  2. 右侧一行文字汇总这只股票:交易笔数(买入、卖出各几笔)、总盈亏;还有持仓时分别列出已实现和浮动盈亏;以及胜率(盈利的卖出笔数 ÷ 卖出笔数)。
  3. 上方大图是这只股票的日 K 线,买入处是橙色的向上三角和「B」,卖出处是青色的向下三角和「S」。日 K 线一直画到回测结束日,最后一天的买卖点也能看到。
  4. 下方小图是这只股票的总盈亏曲线(已实现 + 按每日收盘价计算的浮动盈亏),盈利区域红色、亏损区域绿色。
  5. 最下面是这只股票的逐笔明细:交易时间、交易方向、成交价格、成交数量、成交金额、手续费、已实现盈亏、累计已实现、浮动盈亏、总盈亏、持仓资金、可用资金、总资产。

图上的操作:

  • 按住左键拖出一个矩形:放大这一段。K 线和盈亏图的横轴一起缩放,保持同一天上下对齐。
  • 点右键:恢复原来的范围。
  • 在 K 线上单击某一天:打开这一天的日内走势窗口,同样标出当天的买卖点。日内走势固定使用 1 分钟线,复权方式和这次回测一致(例如回测用前复权,日内图也是前复权价格),和买卖点的价格对得上;本地没有这一天的 1 分钟线时会提示数据缺失。
「个股分析」窗口(股票代码已打码):顶部是选择股票和交易汇总,中间是日 K 线和买卖标记、下方小图是总盈亏,最下面是交易明细
「个股分析」窗口(股票代码已打码):顶部是选择股票和交易汇总,中间是日 K 线和买卖标记、下方小图是总盈亏,最下面是交易明细

K 线图的标题里也写着这三种操作:「日K线 (框选放大/右键还原/点击日内)」。鼠标停在某根 K 线上,会显示这一天的日期、开高低收和涨跌幅。单击这一天时,如果本地没有这一天的 1 分钟线,会弹出「数据缺失」提示,例如「无法获取 20250407 的1m分钟线数据。请确保已下载该日期的分钟线数据。」:

鼠标停在 K 线上显示当天行情;单击后因为没有 1 分钟线,弹出「数据缺失」提示
鼠标停在 K 线上显示当天行情;单击后因为没有 1 分钟线,弹出「数据缺失」提示

8 导出回测结果

点报告窗口右上角「导出回测结果」,软件会在资源管理器里打开这次回测的结果文件夹:

点「导出回测结果」后打开的结果文件夹,里面有 5 个 CSV、策略和配置文件的副本
点「导出回测结果」后打开的结果文件夹,里面有 5 个 CSV、策略和配置文件的副本

同时弹出「回测结果文件说明」对话框,说明各文件的用途,并在每项后面标明「(存在)」:

「回测结果文件说明」对话框
「回测结果文件说明」对话框
  • config.csv:回测配置(策略名称、回测区间、初始资金、基准等)
  • trades.csv:交易明细
  • daily_stats.csv:每日统计
  • benchmark.csv:基准指数数据
  • summary.csv:回测汇总指标

这些都是 CSV 文件,可以用 Excel 或 Python 打开,自己做进一步分析。

V3 亮点在浏览器和手机上看报告
V3 的报告窗口、21 项指标及计算方法、四个标签页、个股分析和「导出回测结果」与 V2 相同。除此之外,V3 还能:

  • 在 Web 回测工作台里看完整的长图报告,指标、收益曲线、交易明细都在一页里,手机上也能打开;
  • 用命令行 kh result 生成交互式 HTML 报告,或者把几次回测放在一起对比。
Web 回测工作台里的完整报告(图片来自2.6《Web 端》)
Web 回测工作台里的完整报告(图片来自2.6《Web 端》)
手机上打开的回测工作台(图片来自2.6《Web 端》)
手机上打开的回测工作台(图片来自2.6《Web 端》)

另外,V3 的报告窗口没有顶部的「缺少基准指数数据」提示条;缺少基准数据时同样会导致基准线为平线、阿尔法和贝塔为 0,请先在数据管理里补齐基准指数。

常见问题

问:阿尔法、贝塔一直是 0?
答:检查两点:本地有没有基准指数(默认沪深 300,000300.SH)的日线;回测期间策略和基准重叠的交易日是否超过 10 天。补齐基准数据后重新运行回测。

问:胜率很高,总收益却是负的?
答:胜率只看盈利次数的占比,不看每次赚亏多少。再看盈亏比和最大单笔亏损,常见情况是多次小赚、少数几次大亏。另外胜率只算已平仓交易,回测结束时仍持有的亏损仓位不计入胜率,但计入了总收益。

问:年化收益率很高,但回测只有一两个月?
答:年化是按 250 个交易日折算的,区间越短,折算后的数字越夸张。短区间请以总收益率为准,并拉长回测区间再验证。

问:个股分析里单击 K 线弹出「数据缺失」?
答:日内走势需要这一天的 1 分钟线。V2 的 1 分钟线用 Tushare 下载(需要 stk_mins 权限)。只看日 K 线和买卖点不受影响。

问:修改了无风险收益率,报告里的夏普比率没变?
答:无风险收益率在报告窗口打开时读取。保存设置后,关掉报告窗口,从「回测历史管理」里重新点「报告」。

V3

V3 的报告还能这样看
  • Web 工作台:浏览器里看完整长图报告,手机也能打开
  • CLI:kh result 生成交互式 HTML 报告
  • CLI:对比多次回测的结果

本篇基于开源 V2 和 V3.4.1.10 编写。

×
没有账号?注册  忘记密码?

风险提示

投资有风险,开户需谨慎。本系统仅为投资者提供量化交易相关的数据处理与分析工具,不构成任何投资建议。 请您在审慎思考后作出选择。特别声明:本系统对您与券商之间的交易、合作不承担任何法律责任。 市场有风险,投资需谨慎。

© 2024 khQuant看海量化回测平台 版权所有

官网:www.khsci.com/khQuant