Files
gavindiaz 9cdf93cc3d docs: 添加指标说明书 METRICS_GUIDE.md
用大白话解释所有分析指标的原理、公式、好坏阈值和"出了问题该改什么",
零基础可读。README 顶部加入链接引导。
2026-06-28 02:50:09 +08:00

567 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 指标说明书 & 原理解释
> 本文档用大白话解释项目里出现的所有分析指标:是什么、怎么算、什么算好/坏、怎么用、出现在哪个模块。
> 零基础可读,配合 [README.md](README.md) 食用。
---
## 目录
- [一、为什么要算这些指标](#一为什么要算这些指标)
- [二、基础盈利指标](#二基础盈利指标)
- 净盈利、毛利、毛损、盈利因子(PF)、胜率、平均盈利/亏损、盈亏比、期望收益
- [三、风险与回撤指标](#三风险与回撤指标)
- 最大回撤、夏普比率、Sortino、Calmar、最大连胜/连败
- [四、稳健性指标](#四稳健性指标)
- 滚动PF、滚动窗口盈利比例、蒙特卡洛回撤模拟
- [五、Walk-Forward 验证指标](#五walk-forward-验证指标)
- WFE、IS-OOS PF 相关性
- [六、参数扫描指标](#六参数扫描指标)
- 高原、过拟合评分、峰值孤立度、高原覆盖率
- [七、MAE/MFE 指标](#七maemfe-指标)
- [八、What-If 场景含义](#八what-if-场景含义)
- [九、各指标速查表](#九各指标速查表)
---
## 一、为什么要算这些指标
新手常犯的错误:**只看净盈利**。"这份回测赚了 $1000,挺好吧?" —— 不一定。
考虑这两个策略:
- **策略 A**:赚 $1000,过程中最多亏到 -$800(差点爆仓),靠最后一把运气翻盘
- **策略 B**:赚 $1000,过程中最多只回撤 -$50,稳定增长
净盈利相同,但 A 是赌徒、B 是好策略。光看净盈利分不清。所以我们用一组指标从**盈利能力、风险、稳健性**三个维度交叉评估。
类比体检:净盈利像体重,单看体重看不出健康;还要看血压(回撤)、心率(夏普)、耐力(稳健性)等。
---
## 二、基础盈利指标
### 1. 净盈利 (Net Profit)
**是什么**:所有交易盈亏求和。
**怎么算**`净盈利 = Σ 每笔净盈亏`(含手续费/swap
**好坏**:正数=赚,负数=亏。但**正数不代表策略好**(要看风险)。
**在哪看**:所有模块的卡片顶部。
---
### 2. 毛利 / 毛损 (Gross Profit / Gross Loss)
**是什么**:把盈利笔和亏损笔分开求和。
**怎么算**
- `毛利 = Σ 盈利笔的盈利`
- `毛损 = Σ 亏损笔的亏损`(负数)
**用途**:是算 PF 的中间量,本身少看。
---
### 3. 盈利因子 (Profit Factor, PF) ⭐ 最重要
**是什么**:赚的总额 / 亏的总额。**最关键的单个指标**。
**怎么算**`PF = 毛利 / |毛损|`
**好坏阈值**
| PF | 含义 |
|---|---|
| < 1.0 | **亏钱**,策略期望为负,不能用 |
| 1.0 - 1.3 | 勉强盈利,扣掉滑点/点差可能就亏了,危险 |
| 1.3 - 1.5 | 合格,有正期望 |
| 1.5 - 2.0 | 良好 |
| > 2.0 | 优秀(但要警惕过拟合,太完美往往不真实) |
**类比**:你摆摊,PF=1.5 意思是每亏 1 块钱能赚回 1.5 块。
**在哪看**:主报告卡片、核心指标对比表、What-If 表、参数扫描热力图(默认 metric=pf)。
---
### 4. 胜率 (Win Rate)
**是什么**:盈利笔数占总笔数的百分比。
**怎么算**`胜率 = 盈利笔数 / 总笔数 × 100%`
**好坏**:**单独看胜率没用**!要配合盈亏比。
- 胜率 90% 但每笔赢 $1 输 $20 → 还是亏
- 胜率 30% 但每笔赢 $50 输 $5 → 还是赚
**在哪看**:核心指标表、方向性诊断、What-If 表。
---
### 5. 平均盈利 / 平均亏损 (Avg Win / Avg Loss)
**是什么**:盈利笔的平均赚多少 / 亏损笔的平均亏多少。
**好坏**:单独看意义不大,用来算盈亏比。
---
### 6. 盈亏比 (Payoff Ratio)
**是什么**:平均每笔赢的 vs 平均每笔亏的。
**怎么算**`盈亏比 = 平均盈利 / |平均亏损|`
**好坏**
| 盈亏比 | 含义 |
|---|---|
| < 0.5 | 赢太小输太大,**必须靠高胜率才能活** |
| 0.5 - 1.0 | 输赢相当 |
| 1.0 - 2.0 | 健康,赢的比输的多 |
| > 2.0 | 优秀,砍单快、让利润跑 |
**和胜率的关系**(关键公式):
- 若胜率 W、盈亏比 R,长期盈利 ⟺ `W × R > (1-W) × 1`,即 `W > 1/(R+1)`
- 例:盈亏比 2.0 → 胜率 > 33% 就能赚;盈亏比 0.5 → 胜率要 > 67% 才赚
**在哪看**:核心指标表、方向性诊断。
---
### 7. 期望收益 (Expectancy)
**是什么**:平均每笔交易能赚多少。
**怎么算**`期望 = 净盈利 / 总笔数`(即每笔的数学期望)
**好坏**:必须为正。正期望 + 大样本 = 长期赚钱。
**类比**:期望 +$0.5 意思是长期平均每笔赚 5 毛钱,1000 笔后大约赚 $500。
**在哪看**:核心指标表、What-If 表。
---
## 三、风险与回撤指标
### 8. 最大回撤 (Max Drawdown) ⭐
**是什么**:从资金曲线的最高点跌到下一个最低点,跌了多少。**最重要的风险指标**。
**怎么算**:在资金曲线上,每个时点算"当前资金 - 历史最高资金",取最小的那个值(负数)。
**两种口径**
- 金额回撤:`-$963`
- 百分比回撤:`96%`(账户从最高点跌了 96%
**好坏阈值**
| 回撤% | 含义 |
|---|---|
| < 10% | 优秀 |
| 10-25% | 合格 |
| 25-40% | 警告,扛不住连续亏损 |
| > 40% | **危险,接近爆仓** |
| > 80% | 实际上已经废了 |
**类比**:账户最高 $1000,跌到 $400 才回升,最大回撤 = 60%。
**在哪看**:核心指标表、蒙特卡洛模拟表、Walk-Forward 窗口表。
---
### 9. 夏普比率 (Sharpe Ratio)
**是什么**:每承担 1 单位风险(波动)能换回多少超额收益。
**怎么算**`夏普 = (平均收益 - 无风险收益) / 收益标准差`
(项目里用逐笔口径近似,无风险收益简化为 0)
**好坏阈值**
| 夏普 | 含义 |
|---|---|
| < 0 | 亏钱 |
| 0 - 0.5 | 不值得做 |
| 0.5 - 1.0 | 一般 |
| 1.0 - 2.0 | 良好 |
| > 2.0 | 优秀 |
**注意**:单笔口径的夏普数值会比年化口径低很多,本工具的夏普**只用于横向对比两份报告**,绝对数值不与教科书对齐。
**在哪看**:核心指标表(从 MT5 报告读取)。
---
### 10. Sortino 比率
**是什么**:夏普的改进版。夏普把上涨和下跌波动都算风险,Sortino **只把下跌(亏损)当风险**
**怎么算**`Sortino = 平均收益 / 亏损笔的标准差`
**为什么更好**:赚钱的波动是好事(你希望大赚),不该被罚;只有亏钱的波动才是风险。
**好坏**:和夏普类似,但通常数值更高。负数=亏钱,>1 算不错。
**在哪看**:核心指标表(本工具逐笔口径计算)。
---
### 11. Calmar 比率
**是什么**:净盈利 / 最大回撤。**收益与风险的直白比值**。
**怎么算**`Calmar = 净盈利 / |最大回撤|`
**好坏**
- < 0:亏钱
- 0 - 1:赚的没回撤多,风险大
- > 1:赚的比回撤多,开始合格
- > 3:优秀
**类比**:赚 $1000 但最大回撤 -$500Calmar=2,意思是"每承受 1 块回撤能换 2 块利润"。
**在哪看**:核心指标表。
---
### 12. 最大连胜 / 最大连败 (Max Streak Win/Loss)
**是什么**:历史上最多连续赢/连续亏了几笔。
**好坏**
- 最大连败是关键 —— 决定你能扛多久不爆仓
- 连败 10 笔、每笔亏 1% 账户 = 跌 10%,还可接受
- 连败 10 笔、每笔亏 5% 账户 = 跌 50%,危险
**配合仓位看**:连败本身不可怕,可怕的是"连败 × 单笔风险"。
**在哪看**:核心指标表、Walk-Forward 表。
---
## 四、稳健性指标
> 稳健性 = 策略在未来不同行情下还能不能赚。一个策略在历史回测里赚翻,但换个时间段就亏光,就是"过拟合",不稳健。
### 13. 滚动 PF (Rolling PF)
**是什么**:把全部交易切成 100 笔一个窗口,每个窗口单独算 PF。
**怎么算**:滑动窗口(步长=25),每段算一次 PF。
**看什么**
- **最低值**:最差的窗口表现多差?如果最低 PF < 1,说明有行情段会亏
- **最高值**:最好的窗口多好
- **波动大小**:高低差距大 = 策略对行情敏感 = 不稳健
**在哪看**:核心指标表的"滚动PF 区间"。
---
### 14. 滚动窗口盈利比例 (Pct Profitable Window)
**是什么**:在所有 100 笔窗口里,有多少比例的窗口 PF > 1(盈利)。
**怎么算**`盈利窗口数 / 总窗口数 × 100%`
**好坏**
- > 80%:策略在大部分行情段都能赚,稳健
- 50-80%:中等,对行情有依赖
- < 50%:大部分时段都亏,不稳健
**在哪看**:核心指标表。
---
### 15. 蒙特卡洛回撤模拟 ⭐
**是什么**:把所有交易**随机打乱顺序** 1000 次,每次重新算最大回撤,看回撤的分布。
**为什么这么做**:实盘里交易发生的顺序是随机的,回测里那个顺序只是历史的一种可能。打乱重排 = 模拟"如果行情以不同顺序发生,最坏会怎样"。
**4 个关键值**
| 值 | 含义 |
|---|---|
| **实际回撤** | 真实历史回测里的回撤 |
| **5% 分位** | 1000 次模拟里最糟的 5%,**极端坏运气下的回撤** |
| **50% 分位(中位)** | 一半模拟比这好、一半比这差 |
| **95% 分位** | 比较好的那 5% |
**怎么判断**(本工具的"连败聚集"规则):
- 实际回撤 ≈ 中位 → 顺序无自相关,回撤属正常范围
- **实际回撤 显著差于中位(>1.3 倍)** → 顺序有自我相关,亏损倾向连发,需加连亏保护
**类比**:你抛硬币 100 次,理论正反各 50。"实际最差连续正面数 vs 蒙特卡洛的典型最差连续正面数"对比,能看出硬币有没有被动过手脚。
**在哪看**:主报告第 5 节、SVG 条形图。
---
## 五、Walk-Forward 验证指标
> Walk-Forward 是比单次 IS/OSS 更严格的稳健性检验:把数据切成多段,每段前半做"训练(IS)"、后半做"验证(OOS)",看 IS 段的好表现能否延续到 OOS 段。
### 16. WFE (Walk-Forward Efficiency) ⭐
**是什么**:所有 OOS 段净盈利之和 / 所有 IS 段净盈利之和。
**怎么算**`WFE = Σ OOS净盈利 / Σ IS净盈利`
**好坏**
| WFE | 含义 |
|---|---|
| < 0 | OOS 总体亏钱,策略没泛化,**不能用** |
| 0 - 0.3 | OOS 只能保留 IS 的 30% 利润,泛化差 |
| 0.3 - 0.7 | 中等,有一定泛化 |
| 0.7 - 1.0 | 良好,OOS 保留大部分 IS 利润 |
| > 1.0 | OOS 比 IS 还赚(罕见,可能 IS 段行情特殊) |
**类比**:IS 段是模拟考,OOS 段是高考。WFE=0.5 意思是高考成绩只有模拟考的一半 —— 模拟考成绩虚高,真实水平没这么好。
**在哪看**Walk-Forward 报告卡片、主报告第 9 节。
---
### 17. IS-OOS PF 相关性
**是什么**:每个窗口的 IS PF 和 OOS PF 之间的相关系数(-1 到 1)。
**怎么算**:所有窗口的 (IS_PF, OOS_PF) 配对,算皮尔逊相关系数。
**好坏**
| 相关性 | 含义 |
|---|---|
| > 0.6 | IS 好的窗口 OOS 也好 → **泛化能力强**,参数稳健 |
| 0.2 - 0.6 | 中等,部分泛化 |
| < 0.2 | IS 表现不能预测 OOS → **过拟合风险高**,参数对行情敏感 |
**为什么重要**:高相关性比高 WFE 更可靠 —— WFE 可能被一两个极端窗口带偏,相关性看的是"稳定的预测关系"。
**在哪看**Walk-Forward 报告卡片。
---
### 18. OOS 盈利窗口占比
**是什么**:所有 OOS 窗口里,有多少比例是盈利的。
**好坏**
- > 70%:策略在多数行情段都能赚,稳健
- 50-70%:中等
- < 50%:多数时段亏,不稳健
**在哪看**Walk-Forward 报告卡片。
---
## 六、参数扫描指标
> 参数扫描 = 对 EA 的输入参数做网格回测,看不同参数下的表现,找最优参数。
### 19. 响应面 (Response Surface)
**是什么**:把两个参数当 X/Y 轴,把指标(如 PF)当高度,画成的"地形图"。
**怎么读**
- **山峰**(尖峰):某组参数特别好,但周围快速下降 → 单点最优,过拟合风险
- **高原**(宽阔平顶):一大片参数都表现不错 → 稳健区域,选参应在这里
- **山谷**:某组参数特别差 → 避开
**在哪看**:参数扫描的 2D 热力图、3D 等距投影曲面。
---
### 20. 高原 (Plateau) ⭐
**是什么**:响应面上"指标高于 80 分位且 4-邻域连通 ≥ 4 格"的区域。
**怎么检测**
1. 把所有指标值排序,取 80 分位作为阈值
2. 把高于阈值的格子标记为"好点"
3. 用 4-连通(上下左右相邻)找连通区域
4. 面积 ≥ 4 格的区域才算高原
**为什么重要**
- 高原 = "参数即使小幅扰动,表现仍然不错" → 实盘更可靠
- 单点峰值 = "参数稍微改一点就完蛋" → 过拟合,实盘必死
**类比**:选扎营地点。单点峰值像一根针尖,站上去稍微动一下就掉下去;高原像台地,怎么走都稳。
**在哪看**:参数扫描热力图上的 P1/P2/P3 粗框、高原清单表。
---
### 21. 过拟合评分 (Robust Score) ⭐
**是什么**:综合"峰值孤立度"和"高原覆盖率"得出的稳健性 0~1 评分。
**怎么算**`稳健性 = 峰值孤立度 × 0.5 + min(1, 高原覆盖率 × 4) × 0.5`
**两个分量**
#### 21a. 峰值孤立度 (Peak Isolation Ratio)
- `= 峰值周围 8 邻域的均值 / 峰值`
- 接近 1:峰值和邻域差不多,是高原的一部分,稳健
- 接近 0:峰值远高于邻域,孤立尖峰,过拟合
#### 21b. 高原覆盖率 (Plateau Coverage)
- `= 高原格子数 / 总格子数`
- 越大 = 高原越宽阔 = 越多参数组合都好用
**好坏**
| 评分 | 含义 |
|---|---|
| < 0.4 | **过拟合**,最优参数是孤立尖峰,实盘风险高 |
| 0.4 - 0.7 | 中等,有高原但峰值仍突出 |
| > 0.7 | **稳健**,存在宽阔高原,泛化好 |
**在哪看**:参数扫描报告卡片。
---
### 22. 选参策略 (Strategy: peak / plateau)
**两种策略**
- `--strategy plateau`(默认,推荐):取最大高原的中心点参数。抗扰动,实盘更稳。
- `--strategy peak`:取全局单点峰值。理论最优但孤立,实盘易退化。
**为什么不直接用峰值**:回测的最优参数是"对历史过度适配"的结果,实盘行情稍有不同就会失效。高原中心留有安全边际。
---
## 七、MAE/MFE 指标
> MAE/MFE 是诊断"止损/止盈设得对不对"的工具。MT5 标准报告不含,需要 EA 自己导出。
### 23. MAE (Maximum Adverse Excursion)
**是什么**:每笔交易持仓期间,**逆向走的最大点数**。
- 多单的 MAE = 开仓后最低价距开仓价的点数
- 空单的 MAE = 开仓后最高价距开仓价的点数
**怎么用**
- 画 MAE vs 盈亏散点(绿=赢,红=输)
- 看亏损笔(红点)集中在 MAE 多大处 → 那就是 SL 应该设的位置
- 工具自动取"亏损笔 MAE 的 75 分位"作为 **SL 候选**
**类比**:MAE 是"账单 —— 这笔交易最多被套了多少点"。被套很深还能翻红的是运气,被套很深最终亏损的是常态,所以深 MAE 区基本全红。
---
### 24. MFE (Maximum Favorable Excursion)
**是什么**:每笔交易持仓期间,**顺向走的最大点数**。
- 多单的 MFE = 开仓后最高价距开仓价的点数
- 空单的 MFE = 开仓后最低价距开仓价的点数
**怎么用**
- 画 MFE vs 盈亏散点
- 看盈利笔(绿点)从 MFE 多大开始变多 → 那就是 TP 应该设的位置
- 工具自动取"盈利笔 MFE 的中位数"作为 **TP 候选**
- **关键洞察**:如果很多高 MFE 笔(涨了很多)最终却亏损,说明 **TP 太贪**,价格涨到位又跌回来,应该早点止盈
---
### 25. TP×SL 扫描热力图
**是什么**:把 TP 和 SL 各取 30 个值组成 900 个组合,每个组合基于历史 MAE/MFE 重算理论净盈利,画成热力图。
**重算规则**(对每笔):
- 若 MAE ≥ SL → 该笔按 SL 亏损离场
- 否则若 MFE ≥ TP → 该笔按 TP 盈利离场
- 否则按原盈亏
**看什么**
- 最优点(圈出):理论净盈利最大
- 但要看**周围是否宽阔**(和高原同理)—— 单点最优过拟合,宽绿区才稳健
**在哪看**MAE/MFE 报告第 2 节。
---
### 26. 盈亏-MAE/MFE 相关系数
**是什么**:每笔的盈亏金额与 MAE/MFE 的相关系数(-1 到 1)。
**怎么用**
- 盈亏-MAE 负相关(如 -0.4):逆向偏移越大越易亏 → 设 SL 有意义
- 盈亏-MFE 正相关(如 0.5):顺向偏移越大越易赚 → 设 TP 有意义
- 若相关性弱 → MAE/MFE 对盈亏影响小,TP/SL 优化空间有限,应改入场逻辑
---
## 八、What-If 场景含义
> What-If = "如果这样改,会变成怎样"。对每份报告模拟改造,重算指标,看哪种改法能让策略转正。
### 9 个通用场景
| 场景 | 怎么做 | 想验证什么 |
|---|---|---|
| **基线(现状)** | 不改 | 对照基准 |
| **仅做空 sell-only** | 剔除所有 long 单 | 空头方向单独有没有正期望 |
| **仅做多 buy-only** | 剔除所有 short 单 | 多头方向单独有没有正期望 |
| **信号反向** | 净盈亏全部 ×(-1) | **如果方向逻辑写反了,反向后会变盈利** |
| **过滤最差星期** | 剔除净盈利最差的那个星期 | 时间过滤能否改善 |
| **过滤最差 N 小时** | 剔除净盈利最差的 1/6 小时窗口 | 时段过滤能否改善 |
| **仓位减半** | 净盈亏 ×0.5 | 回撤与盈利同步减半,看风险收益比 |
| **盈利单放大 ×1.5** | 盈利笔 ×1.5 | **让盈利单跑更远能否改善**(验证离场逻辑) |
| **亏损截断** | 单笔亏损封顶(中位亏损为阈) | **更紧止损能否改善** |
| **启用 BE** | 盈利笔 ×0.5 | 模拟保本止损触发后部分回吐 |
**怎么读 What-If 表**
- 看每个场景的 **PF 是否站上 1**、**回撤是否收敛**、**期望是否转正**
- 比基线明显改善的场景 → 对应方向是优化重点
- **特别警惕**:若"信号反向"两份报告都转正,强烈怀疑代码方向写反,需人工复核源码
---
## 九、各指标速查表
### 按重要性 ⭐
| 优先级 | 指标 | 一句话 |
|---|---|---|
| ⭐⭐⭐⭐⭐ | PF | 赚的/亏的,必须 >1.3 |
| ⭐⭐⭐⭐⭐ | 最大回撤% | 不能 >40% |
| ⭐⭐⭐⭐⭐ | 期望收益 | 必须为正 |
| ⭐⭐⭐⭐ | WFE | OOS 能保留多少 IS 利润 |
| ⭐⭐⭐⭐ | 高原/稳健性评分 | 参数是否抗扰动 |
| ⭐⭐⭐⭐ | 信号反向 What-If | 方向逻辑是否写反 |
| ⭐⭐⭐ | 盈亏比 + 胜率 | 配合看,不能单独看胜率 |
| ⭐⭐⭐ | 蒙特卡洛实际 vs 中位 | 是否有连败聚集 |
| ⭐⭐⭐ | 最大连败 | 决定能扛多久不爆仓 |
| ⭐⭐ | 滚动PF区间 | 不同行情段的表现差异 |
| ⭐⭐ | 夏普/Sortino/Calmar | 风险调整后收益 |
| ⭐⭐ | IS-OOS PF 相关性 | 参数泛化能力 |
| ⭐ | 滚动窗口盈利比例 | 多少行情段能赚 |
### 按"出了问题该改什么"
| 指标异常 | 可能原因 | 优化方向 |
|---|---|---|
| PF < 1 | 整体期望为负 | 先看方向诊断,再离场逻辑 |
| 买入胜率 << 卖出胜率 | 多空信号不对称 | 检查入场信号逻辑(看 What-If 反向) |
| 卖出胜率高但 PF < 1 | 赢的太小输的太大 | 改离场(看 What-If "盈利单放大" |
| 回撤 > 40% | 单笔风险太大 / 连败 | 缩 SL、加连亏保护 |
| 蒙特卡洛实际远差于中位 | 连败聚集 | 连亏 N 笔暂停 |
| WFE < 0.3 | IS 不能泛化到 OOS | 参数扫描找高原,别用单点峰值 |
| 稳健性评分 < 0.4 | 参数是孤立尖峰 | 用 `--strategy plateau` 选高原中心 |
| 高 MFE 笔最终亏损 | TP 太贪 | 缩小 TP(看 MAE/MFE 报告) |
| 高 MAE 笔全亏 | 没止损或 SL 太宽 | 缩小 SL 到 MAE 75 分位 |
---
## 附:本工具的指标计算口径
- **夏普/Sortino/Calmar**:本工具用**逐笔口径**(每笔交易作为一个样本),非年化口径。数值与教科书不同,**仅用于横向对比两份报告**,绝对值不可与年化夏普对齐。
- **滚动 PF**100 笔窗口,步长 25 笔。
- **蒙特卡洛**:1000 次打乱,固定随机种子 42(可复现)。
- **高原检测**:80 分位阈值,4-连通,最小面积 4 格。
- **MAE/MFE**M1 周期 K 线扫描近似(非 tick 级),略有误差但对 TP/SL 决策足够。
---
如有疑问,对照本表回看 [README.md](README.md) 里的模块说明与各 HTML 报告的具体数值。