warmup 修复后重跑 Optuna study + 重生所有产物
- 重跑 500 trials Optuna study (warmup 修复版) - 新 finalist 集合: #1 trial #491 / #2 trial #297 / #3 trial #492 - finalist #1 IS net $263k (vs 旧 $29k, warmup 修复后搜索空间扩大) - 重生 finalists JSON / features parquet / dashboard HTML - 三个独立 registry 条目 (f1_t491 / f2_t297 / f3_t492) - registry 文件名含 finalist index + trial number 避免覆盖 - registry 状态: "已记录 (无 MT5 验证)" - 待 Phase 7 MT5 验证 - 删除旧 registry 条目 (trial #324 已被新 study 取代)
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
warmup 修复后重跑 Optuna study + 重生所有产物
|
||||
|
||||
- 重跑 500 trials Optuna study (warmup 修复版)
|
||||
- 新 finalist 集合: #1 trial #491 / #2 trial #297 / #3 trial #492
|
||||
- finalist #1 IS net $263k (vs 旧 $29k, warmup 修复后搜索空间扩大)
|
||||
- 重生 finalists JSON / features parquet / dashboard HTML
|
||||
- 三个独立 registry 条目 (f1_t491 / f2_t297 / f3_t492)
|
||||
- registry 文件名含 finalist index + trial number 避免覆盖
|
||||
- registry 状态: "已记录 (无 MT5 验证)" - 待 Phase 7 MT5 验证
|
||||
- 删除旧 registry 条目 (trial #324 已被新 study 取代)
|
||||
+38
-50
@@ -1,10 +1,8 @@
|
||||
# 注册表条目 — GoldScalperPro / XAUUSD / 2025-01-01 → 2026-06-26
|
||||
|
||||
**状态:** 已批准(含已记录的已知差距) — 文档生成日期 2026-06-27
|
||||
**状态:** 已记录(无 MT5 验证 — 待 Phase 7 MT5 验证) — 文档生成日期 2026-06-27
|
||||
**生成方式:** 由 `scripts/build_registry_entry.py --finalist 1` 自动生成
|
||||
**批准依据:** 信号层对齐已验证(trades PASS,首笔交易时间戳精确匹配)。
|
||||
残留 net/PF 差距的根因为数据层差异(Python parquet 与 MT5 tester 内部 history 在 IS
|
||||
起点附近的微小差异),非引擎 bug。
|
||||
**批准依据:** 本 finalist 来自 warmup 修复后的 Optuna study 重跑。尚未通过 MT5 Strategy Tester 验证 — 需先在 MT5 里跑出 IS+OOS HTML 报告,然后用 `python scripts/build_registry_entry.py --finalist 1 --mt5-is-html ... --mt5-oos-html ...` 重新生成本条目以补齐 MT5 指标 + 差距分析。
|
||||
|
||||
---
|
||||
|
||||
@@ -19,8 +17,8 @@
|
||||
| OOS 窗口 | 2026-01-01 00:00:00 → 2026-06-26 00:00:00 |
|
||||
| Optuna study | `gold_scalper_pro_is2025`,位于 [studies/optuna/gold_scalper_pro_is2025.db](../studies/optuna/gold_scalper_pro_is2025.db) |
|
||||
| finalist 排名 | 3 个中的第 1 个 |
|
||||
| Optuna trial 编号 | 324 |
|
||||
| Optuna 得分 | 858.47 |
|
||||
| Optuna trial 编号 | 491 |
|
||||
| Optuna 得分 | 186075.40 |
|
||||
|
||||
---
|
||||
|
||||
@@ -32,34 +30,34 @@
|
||||
| 参数 | 选定值 | 搜索 | 范围 | 在 500 trials 中的百分位 | 说明 |
|
||||
|------|-------:|:----:|------|:---:|------|
|
||||
| `InpTimeframe` | 5 | 冻结 | 冻结(不搜索) | — | 信号时间框架(ENUM_TIMEFRAMES,5=M5) |
|
||||
| `InpFastEmaPeriod` | 25 | 是 | 8..34 step 1 | 78.6% | 快 EMA 周期(趋势定义) |
|
||||
| `InpSlowEmaPeriod` | 160 | 是 | 50..200 step 5 | 34.2% | 慢 EMA 周期(趋势定义) |
|
||||
| `InpRsiPeriod` | 16 | 是 | 7..28 step 1 | 54.4% | RSI 周期(回撤触发) |
|
||||
| `InpRsiBuyLevel` | 50 | 是 | 30..50 step 1 | 100.0% | RSI 买入阈值 |
|
||||
| `InpRsiSellLevel` | 56 | 是 | 50..70 step 1 | 72.2% | RSI 卖出阈值 |
|
||||
| `InpPullbackAtrMult` | 3.4 | 是 | 1..4 step 0.1 | 70.0% | 回撤 ATR 倍数(价格偏离 fast EMA 限值) |
|
||||
| `InpAtrPeriod` | 27 | 是 | 7..28 step 1 | 87.2% | ATR 周期(波动率度量) |
|
||||
| `InpFastEmaPeriod` | 33 | 是 | 8..34 step 1 | 98.2% | 快 EMA 周期(趋势定义) |
|
||||
| `InpSlowEmaPeriod` | 180 | 是 | 50..200 step 5 | 80.2% | 慢 EMA 周期(趋势定义) |
|
||||
| `InpRsiPeriod` | 11 | 是 | 7..28 step 1 | 19.6% | RSI 周期(回撤触发) |
|
||||
| `InpRsiBuyLevel` | 39 | 是 | 30..50 step 1 | 25.6% | RSI 买入阈值 |
|
||||
| `InpRsiSellLevel` | 57 | 是 | 50..70 step 1 | 73.2% | RSI 卖出阈值 |
|
||||
| `InpPullbackAtrMult` | 3.9 | 是 | 1..4 step 0.1 | 89.6% | 回撤 ATR 倍数(价格偏离 fast EMA 限值) |
|
||||
| `InpAtrPeriod` | 27 | 是 | 7..28 step 1 | 88.6% | ATR 周期(波动率度量) |
|
||||
| `InpMinAtrPoints` | 0 | 冻结 | 冻结(不搜索) | — | 最小 ATR 点数(波动率地板) |
|
||||
| `InpMaxSpreadAtrPct` | 37.5 | 是 | 10..50 step 2.5 | 73.0% | 最大点差占 ATR 百分比(成本门) |
|
||||
| `InpMaxSpreadAtrPct` | 25 | 是 | 10..50 step 2.5 | 18.4% | 最大点差占 ATR 百分比(成本门) |
|
||||
| `InpSizingMode` | 1 | 冻结 | 冻结(不搜索) | — | 仓位模式(1=risk-on-stop) |
|
||||
| `InpFixedLots` | 0.01 | 冻结 | 冻结(不搜索) | — | 固定手数(sizing=0 时用) |
|
||||
| `InpRiskPercent` | 2.25 | 是 | 0.25..3 step 0.25 | 50.6% | 单笔风险占权益 % |
|
||||
| `InpRiskPercent` | 2.5 | 是 | 0.25..3 step 0.25 | 53.0% | 单笔风险占权益 % |
|
||||
| `InpStopMode` | 0 | 冻结 | 冻结(不搜索) | — | 止损模式(0=ATR,1=点数) |
|
||||
| `InpAtrSLMult` | 1.9 | 是 | 1..3 step 0.1 | 38.6% | ATR 止损倍数 |
|
||||
| `InpAtrTPMult` | 3.1 | 是 | 1..4 step 0.1 | 50.8% | ATR 止盈倍数 |
|
||||
| `InpAtrSLMult` | 1 | 是 | 1..3 step 0.1 | 23.2% | ATR 止损倍数 |
|
||||
| `InpAtrTPMult` | 4 | 是 | 1..4 step 0.1 | 100.0% | ATR 止盈倍数 |
|
||||
| `InpStopLossPoints` | 200 | 冻结 | 冻结(不搜索) | — | 止损点数(stopmode=1 时用) |
|
||||
| `InpTakeProfitPoints` | 300 | 冻结 | 冻结(不搜索) | — | 止盈点数(stopmode=1 时用) |
|
||||
| `InpUseBreakEven` | true | 冻结 | 冻结(不搜索) | — | 启用保本 |
|
||||
| `InpBreakEvenPoints` | 50 | 是 | 50..300 step 10 | 33.0% | 保本触发点数 |
|
||||
| `InpBreakEvenLock` | 25 | 是 | 10..50 step 5 | 33.6% | 保本锁定点数 |
|
||||
| `InpBreakEvenPoints` | 60 | 是 | 50..300 step 10 | 47.6% | 保本触发点数 |
|
||||
| `InpBreakEvenLock` | 50 | 是 | 10..50 step 5 | 100.0% | 保本锁定点数 |
|
||||
| `InpUseTrailing` | true | 冻结 | 冻结(不搜索) | — | 启用追踪止损 |
|
||||
| `InpTrailStartPoints` | 400 | 是 | 100..400 step 10 | 100.0% | 追踪触发点数 |
|
||||
| `InpTrailStepPoints` | 70 | 是 | 60..240 step 10 | 35.8% | 追踪步长(点数) |
|
||||
| `InpTrailStartPoints` | 220 | 是 | 100..400 step 10 | 47.8% | 追踪触发点数 |
|
||||
| `InpTrailStepPoints` | 240 | 是 | 60..240 step 10 | 100.0% | 追踪步长(点数) |
|
||||
| `InpMaxPositions` | 1 | 冻结 | 冻结(不搜索) | — | 最大持仓数(1=单仓策略) |
|
||||
| `InpMaxTradesPerDay` | 12 | 是 | 3..12 step 1 | 100.0% | 单日最大交易数 |
|
||||
| `InpDailyLossLimit` | 5 | 是 | 2..8 step 0.5 | 50.4% | 单日最大亏损 % |
|
||||
| `InpDailyLossLimit` | 7 | 是 | 2..8 step 0.5 | 59.6% | 单日最大亏损 % |
|
||||
| `InpDailyProfitTarget` | 0 | 冻结 | 冻结(不搜索) | — | 单日利润目标(0=关闭) |
|
||||
| `InpMinSecondsBetween` | 75 | 是 | 30..180 step 15 | 49.6% | 信号最小间隔(秒) |
|
||||
| `InpMinSecondsBetween` | 30 | 是 | 30..180 step 15 | 35.6% | 信号最小间隔(秒) |
|
||||
| `InpUseSession` | false | 冻结 | 冻结(不搜索) | — | 启用交易时段过滤 |
|
||||
| `InpSessionStartHour` | 7 | 冻结 | 冻结(不搜索) | — | 时段开始小时 |
|
||||
| `InpSessionEndHour` | 20 | 冻结 | 冻结(不搜索) | — | 时段结束小时 |
|
||||
@@ -77,15 +75,15 @@
|
||||
|
||||
| 指标 | IS #1 | OOS #1 | IS #2 | OOS #2 | IS #3 | OOS #3 |
|
||||
|------|------:|------:|------:|------:|------:|------:|
|
||||
| 净利润 ($) | 28,983.81 | 4,213.78 | 471.10 | 265.82 | 5,171.29 | 1,614.25 |
|
||||
| PF | 1.7053 | 2.3636 | 1.5311 | 1.8351 | 1.5425 | 1.9341 |
|
||||
| 交易数 | 2396 | 1161 | 555 | 276 | 2260 | 1131 |
|
||||
| 回撤 % | 10.34% | 7.80% | 4.06% | 2.90% | 6.17% | 5.37% |
|
||||
| 夏普 | 6.9717 | 9.4570 | 3.6500 | 4.0478 | 5.4414 | 7.5916 |
|
||||
| 胜率 | 89.98% | 95.18% | 82.34% | 88.41% | 88.85% | 94.16% |
|
||||
| 首笔交易 | 2025-01-02T01:55:00 | 2026-01-02T08:50:00 | 2025-01-03T12:35:00 | 2026-01-07T11:10:00 | 2025-01-02T01:55:00 | 2026-01-02T08:15:00 |
|
||||
| trial 编号 | #324 | #39 | #391 |
|
||||
| Optuna 得分 | 858.47 | 159.38 | 794.99 |
|
||||
| 净利润 ($) | 263,527.63 | 10,632.70 | 94,197.91 | 11,153.84 | 165,740.84 | 6,969.58 |
|
||||
| PF | 1.8016 | 1.8001 | 2.4990 | 2.1992 | 1.6318 | 1.5137 |
|
||||
| 交易数 | 2104 | 1098 | 1605 | 874 | 2084 | 1083 |
|
||||
| 回撤 % | 10.79% | 11.04% | 3.28% | 8.70% | 14.38% | 14.33% |
|
||||
| 夏普 | 7.0019 | 8.5291 | 7.7362 | 11.0799 | 6.2544 | 6.9851 |
|
||||
| 胜率 | 81.13% | 88.89% | 86.92% | 92.45% | 79.61% | 86.89% |
|
||||
| 首笔交易 | 2025-01-02T01:50:00 | 2026-01-02T14:55:00 | 2025-01-02T01:55:00 | 2026-01-02T14:55:00 | 2025-01-02T01:50:00 | 2026-01-02T14:55:00 |
|
||||
| trial 编号 | #491 | #297 | #492 |
|
||||
| Optuna 得分 | 186075.40 | 68772.16 | 129574.90 |
|
||||
|
||||
|
||||
---
|
||||
@@ -98,18 +96,15 @@
|
||||
|
||||
| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 夏普 | 胜率 | 首笔交易 |
|
||||
|------|----------:|---:|-------:|------:|-----:|-----:|-----------|
|
||||
| IS | 28,983.81 | 1.7053 | 2396 | 10.34% | 6.9717 | 89.98% | 2025-01-02T01:55:00 |
|
||||
| OOS | 4,213.78 | 2.3636 | 1161 | 7.80% | 9.4570 | 95.18% | 2026-01-02T08:50:00 |
|
||||
| IS | 263,527.63 | 1.8016 | 2104 | 10.79% | 7.0019 | 81.13% | 2025-01-02T01:50:00 |
|
||||
| OOS | 10,632.70 | 1.8001 | 1098 | 11.04% | 8.5291 | 88.89% | 2026-01-02T14:55:00 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 5. MT5 指标(Strategy Tester,1 分钟 OHLC 模型)
|
||||
|
||||
| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 报告路径 |
|
||||
|------|----------:|---:|-------:|------:|----------|
|
||||
| IS | 6,987.34 | 1.43 | 2,348.00 | — | [IS-ReportTester-52845377.html](../reports\IS-ReportTester-52845377.html) |
|
||||
| OOS | 831.81 | 1.38 | 1,161.00 | — | [OOS-ReportTester-52845377.html](../reports\OOS-ReportTester-52845377.html) |
|
||||
_未提供 MT5 HTML 报告 — 跳过本节_
|
||||
|
||||
|
||||
---
|
||||
@@ -119,14 +114,7 @@
|
||||
EA 类别:**BE / trailing,M1 tick 级引擎**。适用关卡:net ≤ ~10%,PF ≤ ~10%,
|
||||
trades ≤ ~5%,权益回撤 ≤ ~10%。
|
||||
|
||||
| 窗口 | 指标 | Python | MT5 | 差距 | 关卡 |
|
||||
|------|------|-------:|----:|----:|------|
|
||||
| IS | net | 28,983.81 | 6,987.34 | +314.8% | **FAIL** |
|
||||
| IS | PF | 1.7053 | 1.4300 | +19.3% | **FAIL** |
|
||||
| IS | trades | 2396 | 2348 | +2.0% | **PASS** |
|
||||
| OOS | net | 4,213.78 | 831.81 | +406.6% | **FAIL** |
|
||||
| OOS | PF | 2.3636 | 1.3800 | +71.3% | **FAIL** |
|
||||
| OOS | trades | 1161 | 1161 | +0.0% | **PASS** |
|
||||
_未提供 MT5 数据 — 跳过差距分析_
|
||||
|
||||
|
||||
### 6.1 已对齐部分(可信部分)
|
||||
@@ -167,12 +155,12 @@ trades ≤ ~5%,权益回撤 ≤ ~10%。
|
||||
|
||||
- Optuna study 总 trial 数:**500**
|
||||
- 完成:**500**,剪枝:**0**,失败:**0**
|
||||
- 最高得分:**858.47**,中位得分:**579.10**
|
||||
- 最高得分:**186075.40**,中位得分:**17265.61**
|
||||
- 本 finalist 在 study 中的得分排名:**2/500**
|
||||
- 搜索空间维度:**18 个可调参数** + 16 个冻结参数
|
||||
- 与其他 finalist 的参数相似度:
|
||||
- vs finalist #2 (trial #39): 1/18 参数完全相同
|
||||
- vs finalist #3 (trial #391): 8/18 参数完全相同
|
||||
- vs finalist #2 (trial #297): 0/18 参数完全相同
|
||||
- vs finalist #3 (trial #492): 14/18 参数完全相同
|
||||
|
||||
|
||||
---
|
||||
@@ -200,7 +188,7 @@ python scripts/build_registry_entry.py --finalist 1
|
||||
```
|
||||
|
||||
EA `.ex5` / `.mq5` 和 MT5 使用的 `GoldScalperPro.set` 位于项目根目录。
|
||||
finalist 对应的 trial 编号是 **#324**,可在 Optuna dashboard 中定位。
|
||||
finalist 对应的 trial 编号是 **#491**,可在 Optuna dashboard 中定位。
|
||||
|
||||
|
||||
---
|
||||
@@ -0,0 +1,218 @@
|
||||
# 注册表条目 — GoldScalperPro / XAUUSD / 2025-01-01 → 2026-06-26
|
||||
|
||||
**状态:** 已记录(无 MT5 验证 — 待 Phase 7 MT5 验证) — 文档生成日期 2026-06-27
|
||||
**生成方式:** 由 `scripts/build_registry_entry.py --finalist 2` 自动生成
|
||||
**批准依据:** 本 finalist 来自 warmup 修复后的 Optuna study 重跑。尚未通过 MT5 Strategy Tester 验证 — 需先在 MT5 里跑出 IS+OOS HTML 报告,然后用 `python scripts/build_registry_entry.py --finalist 2 --mt5-is-html ... --mt5-oos-html ...` 重新生成本条目以补齐 MT5 指标 + 差距分析。
|
||||
|
||||
---
|
||||
|
||||
## 1. 标识信息
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|------|
|
||||
| 策略 | `gold_scalper_pro` |
|
||||
| 引擎 | `ScalperEngine`([strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py)) |
|
||||
| 交易品种 | XAUUSD(IC Markets 模拟)— `XAUUSD_REAL` 配置 |
|
||||
| IS 窗口 | 2025-01-01 00:00:00 → 2026-01-01 00:00:00 |
|
||||
| OOS 窗口 | 2026-01-01 00:00:00 → 2026-06-26 00:00:00 |
|
||||
| Optuna study | `gold_scalper_pro_is2025`,位于 [studies/optuna/gold_scalper_pro_is2025.db](../studies/optuna/gold_scalper_pro_is2025.db) |
|
||||
| finalist 排名 | 3 个中的第 2 个 |
|
||||
| Optuna trial 编号 | 297 |
|
||||
| Optuna 得分 | 68772.16 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 参数(完整合并集合)
|
||||
|
||||
下表含每个参数的搜索范围、选定值、在 500 trials 中的百分位。参数说明取自 EA 源码注释。
|
||||
"搜索"列为"是"表示该参数参与了 Optuna 搜索;"冻结"表示结构性固定值。
|
||||
|
||||
| 参数 | 选定值 | 搜索 | 范围 | 在 500 trials 中的百分位 | 说明 |
|
||||
|------|-------:|:----:|------|:---:|------|
|
||||
| `InpTimeframe` | 5 | 冻结 | 冻结(不搜索) | — | 信号时间框架(ENUM_TIMEFRAMES,5=M5) |
|
||||
| `InpFastEmaPeriod` | 9 | 是 | 8..34 step 1 | 13.4% | 快 EMA 周期(趋势定义) |
|
||||
| `InpSlowEmaPeriod` | 110 | 是 | 50..200 step 5 | 46.8% | 慢 EMA 周期(趋势定义) |
|
||||
| `InpRsiPeriod` | 17 | 是 | 7..28 step 1 | 78.4% | RSI 周期(回撤触发) |
|
||||
| `InpRsiBuyLevel` | 45 | 是 | 30..50 step 1 | 88.2% | RSI 买入阈值 |
|
||||
| `InpRsiSellLevel` | 54 | 是 | 50..70 step 1 | 30.8% | RSI 卖出阈值 |
|
||||
| `InpPullbackAtrMult` | 3.5 | 是 | 1..4 step 0.1 | 54.4% | 回撤 ATR 倍数(价格偏离 fast EMA 限值) |
|
||||
| `InpAtrPeriod` | 23 | 是 | 7..28 step 1 | 29.8% | ATR 周期(波动率度量) |
|
||||
| `InpMinAtrPoints` | 0 | 冻结 | 冻结(不搜索) | — | 最小 ATR 点数(波动率地板) |
|
||||
| `InpMaxSpreadAtrPct` | 37.5 | 是 | 10..50 step 2.5 | 71.4% | 最大点差占 ATR 百分比(成本门) |
|
||||
| `InpSizingMode` | 1 | 冻结 | 冻结(不搜索) | — | 仓位模式(1=risk-on-stop) |
|
||||
| `InpFixedLots` | 0.01 | 冻结 | 冻结(不搜索) | — | 固定手数(sizing=0 时用) |
|
||||
| `InpRiskPercent` | 2.75 | 是 | 0.25..3 step 0.25 | 85.8% | 单笔风险占权益 % |
|
||||
| `InpStopMode` | 0 | 冻结 | 冻结(不搜索) | — | 止损模式(0=ATR,1=点数) |
|
||||
| `InpAtrSLMult` | 1.3 | 是 | 1..3 step 0.1 | 68.8% | ATR 止损倍数 |
|
||||
| `InpAtrTPMult` | 3.9 | 是 | 1..4 step 0.1 | 76.4% | ATR 止盈倍数 |
|
||||
| `InpStopLossPoints` | 200 | 冻结 | 冻结(不搜索) | — | 止损点数(stopmode=1 时用) |
|
||||
| `InpTakeProfitPoints` | 300 | 冻结 | 冻结(不搜索) | — | 止盈点数(stopmode=1 时用) |
|
||||
| `InpUseBreakEven` | true | 冻结 | 冻结(不搜索) | — | 启用保本 |
|
||||
| `InpBreakEvenPoints` | 50 | 是 | 50..300 step 10 | 25.2% | 保本触发点数 |
|
||||
| `InpBreakEvenLock` | 45 | 是 | 10..50 step 5 | 64.8% | 保本锁定点数 |
|
||||
| `InpUseTrailing` | true | 冻结 | 冻结(不搜索) | — | 启用追踪止损 |
|
||||
| `InpTrailStartPoints` | 270 | 是 | 100..400 step 10 | 85.0% | 追踪触发点数 |
|
||||
| `InpTrailStepPoints` | 70 | 是 | 60..240 step 10 | 29.0% | 追踪步长(点数) |
|
||||
| `InpMaxPositions` | 1 | 冻结 | 冻结(不搜索) | — | 最大持仓数(1=单仓策略) |
|
||||
| `InpMaxTradesPerDay` | 11 | 是 | 3..12 step 1 | 57.8% | 单日最大交易数 |
|
||||
| `InpDailyLossLimit` | 7.5 | 是 | 2..8 step 0.5 | 78.4% | 单日最大亏损 % |
|
||||
| `InpDailyProfitTarget` | 0 | 冻结 | 冻结(不搜索) | — | 单日利润目标(0=关闭) |
|
||||
| `InpMinSecondsBetween` | 45 | 是 | 30..180 step 15 | 58.6% | 信号最小间隔(秒) |
|
||||
| `InpUseSession` | false | 冻结 | 冻结(不搜索) | — | 启用交易时段过滤 |
|
||||
| `InpSessionStartHour` | 7 | 冻结 | 冻结(不搜索) | — | 时段开始小时 |
|
||||
| `InpSessionEndHour` | 20 | 冻结 | 冻结(不搜索) | — | 时段结束小时 |
|
||||
| `InpMagicNumber` | 20240530 | 冻结 | 冻结(不搜索) | — | EA Magic Number |
|
||||
| `InpComment` | GoldScalperPro | 冻结 | 冻结(不搜索) | — | 订单注释 |
|
||||
|
||||
来源:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)(finalist `index=2`)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 三个 finalist 全指标对比
|
||||
|
||||
不只看本条目的 finalist —— 同一搜索中产生的其他候选也在此对比,
|
||||
便于看出本 finalist 是否在某个维度上明显占优或处于劣势。
|
||||
|
||||
| 指标 | IS #1 | OOS #1 | IS #2 | OOS #2 | IS #3 | OOS #3 |
|
||||
|------|------:|------:|------:|------:|------:|------:|
|
||||
| 净利润 ($) | 263,527.63 | 10,632.70 | 94,197.91 | 11,153.84 | 165,740.84 | 6,969.58 |
|
||||
| PF | 1.8016 | 1.8001 | 2.4990 | 2.1992 | 1.6318 | 1.5137 |
|
||||
| 交易数 | 2104 | 1098 | 1605 | 874 | 2084 | 1083 |
|
||||
| 回撤 % | 10.79% | 11.04% | 3.28% | 8.70% | 14.38% | 14.33% |
|
||||
| 夏普 | 7.0019 | 8.5291 | 7.7362 | 11.0799 | 6.2544 | 6.9851 |
|
||||
| 胜率 | 81.13% | 88.89% | 86.92% | 92.45% | 79.61% | 86.89% |
|
||||
| 首笔交易 | 2025-01-02T01:50:00 | 2026-01-02T14:55:00 | 2025-01-02T01:55:00 | 2026-01-02T14:55:00 | 2025-01-02T01:50:00 | 2026-01-02T14:55:00 |
|
||||
| trial 编号 | #491 | #297 | #492 |
|
||||
| Optuna 得分 | 186075.40 | 68772.16 | 129574.90 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. Python 指标(含指标预热,M1 tick 级出场模拟)
|
||||
|
||||
通过 [scripts/reeval_finalist_forward.py](../scripts/reeval_finalist_forward.py) 重新评估。
|
||||
信号在完整 M5 history 上计算(预热),然后修剪到评估窗口 — 与 MT5 tester
|
||||
测试前的指标预热行为一致。出场用 M1 tick 级 4-sub-tick 模拟(doc 03 §7)。
|
||||
|
||||
| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 夏普 | 胜率 | 首笔交易 |
|
||||
|------|----------:|---:|-------:|------:|-----:|-----:|-----------|
|
||||
| IS | 94,197.91 | 2.4990 | 1605 | 3.28% | 7.7362 | 86.92% | 2025-01-02T01:55:00 |
|
||||
| OOS | 11,153.84 | 2.1992 | 874 | 8.70% | 11.0799 | 92.45% | 2026-01-02T14:55:00 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 5. MT5 指标(Strategy Tester,1 分钟 OHLC 模型)
|
||||
|
||||
_未提供 MT5 HTML 报告 — 跳过本节_
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 6. 与 doc 03 §8 目标关卡的差距分析
|
||||
|
||||
EA 类别:**BE / trailing,M1 tick 级引擎**。适用关卡:net ≤ ~10%,PF ≤ ~10%,
|
||||
trades ≤ ~5%,权益回撤 ≤ ~10%。
|
||||
|
||||
_未提供 MT5 数据 — 跳过差距分析_
|
||||
|
||||
|
||||
### 6.1 已对齐部分(可信部分)
|
||||
|
||||
- **交易数**通常差距 2% 以内 — 信号层正确
|
||||
- **首笔交易时间戳**与 MT5 精确匹配到分钟
|
||||
- 逐笔 lots 从第 4 笔开始通常收敛到 MT5
|
||||
|
||||
### 6.2 偏离部分(已知差距)
|
||||
|
||||
- net 和 PF 偏离可能达 3–4 倍。差距**并非**均匀分布在所有交易上 — 集中在 IS 窗口前几笔
|
||||
- 第 1 笔交易:Python ATR 与 MT5 反推 ATR 偏差约 30%。ATR 决定 SL 距离 → 决定 lots → 复利放大
|
||||
- 在 risk-% 复利下,第 1 笔 sizing 误差通过权益曲线指数传播
|
||||
|
||||
### 6.3 根因(数据层,非引擎 bug)
|
||||
|
||||
- [shared/indicators/base.py](../shared/indicators/base.py) ATR 是 Wilder 平滑(SMA 种子 +
|
||||
Wilder 递归)— 与 MT5 `iATR` 完全一致。算法排除。
|
||||
- `ScalperEngine._calc_lots` 与 `GoldScalperPro.mq5 CalcLots` 代数等价。Sizing 公式排除。
|
||||
- `tick_value` 通过反解 MT5 第 1 笔交易 PnL 验证 = 1.0。tick_value 排除。
|
||||
- 残差:Python parquet 与 MT5 tester 内部 history 在 IS 起点附近微小偏离,
|
||||
足以偏移 Wilder ATR 种子,复利效应完成剩余放大。
|
||||
|
||||
### 6.4 为何在 FAIL 状态下仍可批准
|
||||
|
||||
1. 信号层**已证明正确** — 交易数和首笔交易时间戳匹配 MT5。这是引擎负责的部分。
|
||||
2. 残留差距有单一、已识别、机械的根因(IS 边界 OHLC 微差异 + risk-% 复利放大),
|
||||
**非**引擎 bug,也不会改变参数集合的相对排名(Optuna 的工作)。
|
||||
3. 按 doc 03 §7 策略:Python 用于排名;**MT5 才是 live 决策依据**。MT5 数值是
|
||||
任何实盘决策的可信数值;Python 数值保留用于排名可复现性。
|
||||
4. doc 04 Rule 7 接受通过"三道关卡:Python 搜索 → MT5 验证 → 人工审批"的条目。
|
||||
人工审批关卡是显式覆盖,判断关卡未通过是引擎 bug(→ 拒绝)还是已知边界效应
|
||||
(→ 附上下文接受)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 搜索统计
|
||||
|
||||
- Optuna study 总 trial 数:**500**
|
||||
- 完成:**500**,剪枝:**0**,失败:**0**
|
||||
- 最高得分:**186075.40**,中位得分:**17265.61**
|
||||
- 本 finalist 在 study 中的得分排名:**29/500**
|
||||
- 搜索空间维度:**18 个可调参数** + 16 个冻结参数
|
||||
- 与其他 finalist 的参数相似度:
|
||||
- vs finalist #1 (trial #491): 0/18 参数完全相同
|
||||
- vs finalist #3 (trial #492): 0/18 参数完全相同
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 8. 复现命令
|
||||
|
||||
```bash
|
||||
# 1. 重新评估该 finalist 的 IS + OOS Python 指标
|
||||
python scripts/reeval_finalist_forward.py
|
||||
|
||||
# 2. 与 MT5 报告对比(需先有 reports/IS-Report*.html 和 OOS-Report*.html)
|
||||
python scripts/compare_finalist.py 2
|
||||
|
||||
# 3. 检查该 finalist 的逐笔 trade 诊断
|
||||
python scripts/diag_size_after_warmup.py
|
||||
|
||||
# 4. 重新生成 Optuna 可视化仪表盘(含本 finalist 在 500 trials 中的位置)
|
||||
python scripts/build_optuna_dashboard.py
|
||||
|
||||
# 5. 重新生成特征数据集(trade-level + trial-level parquet)
|
||||
python scripts/build_feature_datasets.py
|
||||
|
||||
# 6. 重新生成本 registry 条目
|
||||
python scripts/build_registry_entry.py --finalist 2
|
||||
```
|
||||
|
||||
EA `.ex5` / `.mq5` 和 MT5 使用的 `GoldScalperPro.set` 位于项目根目录。
|
||||
finalist 对应的 trial 编号是 **#297**,可在 Optuna dashboard 中定位。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 9. 已知限制(沿用)
|
||||
|
||||
1. **Optuna objective 预热 bug**(已于 2026-06-26 修复):`scripts/optimize.py` 之前把 bars
|
||||
切到 IS 窗口后才传给 `objective()`,导致 EMA/RSI/ATR 在 IS 起点才开始预热。修复后
|
||||
`ObjectiveConfig.signals_full_bars` 携带完整 M5 history,objective 在其上构建信号再切片
|
||||
(镜像 `reeval_finalist_forward.py` 的预热模式)。本 finalist 批准于修复之前;
|
||||
用修复版重跑预计不会改变 finalist 集合(修复只影响 IS 起点约 14h 的稳定期)。
|
||||
2. **成交价约定**(次要):Python 用半点差入场(close ± spread/2);MT5 tester 用全点差
|
||||
(ask = close + spread)。单 tick 差异,不复利放大。
|
||||
3. **ATR 种子边界效应**(若 MT5 报告存在则见 §6 差距):Python parquet 与 MT5 tester
|
||||
内部 history 在 IS 起点附近微小偏离。在 risk-% 复利下可能让 Python net 膨胀。
|
||||
MT5 数值才是可信值。
|
||||
4. **M1 OHLC 合成 tick**:4 sub-ticks × 5 M1 bars 模型是 MT5 真实 tick path 的近似。
|
||||
对 BE/trailing 策略,比 bar-level 大幅缩小差距(-48% → -5.6%),但仍非完美。
|
||||
|
||||
|
||||
---
|
||||
|
||||
*来源工件:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)、
|
||||
[reports/IS-ReportTester-52845377.html](../reports/IS-ReportTester-52845377.html)、
|
||||
[reports/OOS-ReportTester-52845377.html](../reports/OOS-ReportTester-52845377.html)、
|
||||
[GoldScalperPro.mq5](../GoldScalperPro.mq5)、[GoldScalperPro.ex5](../GoldScalperPro.ex5)、
|
||||
[strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py)。*
|
||||
@@ -0,0 +1,218 @@
|
||||
# 注册表条目 — GoldScalperPro / XAUUSD / 2025-01-01 → 2026-06-26
|
||||
|
||||
**状态:** 已记录(无 MT5 验证 — 待 Phase 7 MT5 验证) — 文档生成日期 2026-06-27
|
||||
**生成方式:** 由 `scripts/build_registry_entry.py --finalist 3` 自动生成
|
||||
**批准依据:** 本 finalist 来自 warmup 修复后的 Optuna study 重跑。尚未通过 MT5 Strategy Tester 验证 — 需先在 MT5 里跑出 IS+OOS HTML 报告,然后用 `python scripts/build_registry_entry.py --finalist 3 --mt5-is-html ... --mt5-oos-html ...` 重新生成本条目以补齐 MT5 指标 + 差距分析。
|
||||
|
||||
---
|
||||
|
||||
## 1. 标识信息
|
||||
|
||||
| 字段 | 值 |
|
||||
|------|------|
|
||||
| 策略 | `gold_scalper_pro` |
|
||||
| 引擎 | `ScalperEngine`([strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py)) |
|
||||
| 交易品种 | XAUUSD(IC Markets 模拟)— `XAUUSD_REAL` 配置 |
|
||||
| IS 窗口 | 2025-01-01 00:00:00 → 2026-01-01 00:00:00 |
|
||||
| OOS 窗口 | 2026-01-01 00:00:00 → 2026-06-26 00:00:00 |
|
||||
| Optuna study | `gold_scalper_pro_is2025`,位于 [studies/optuna/gold_scalper_pro_is2025.db](../studies/optuna/gold_scalper_pro_is2025.db) |
|
||||
| finalist 排名 | 3 个中的第 3 个 |
|
||||
| Optuna trial 编号 | 492 |
|
||||
| Optuna 得分 | 129574.90 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 参数(完整合并集合)
|
||||
|
||||
下表含每个参数的搜索范围、选定值、在 500 trials 中的百分位。参数说明取自 EA 源码注释。
|
||||
"搜索"列为"是"表示该参数参与了 Optuna 搜索;"冻结"表示结构性固定值。
|
||||
|
||||
| 参数 | 选定值 | 搜索 | 范围 | 在 500 trials 中的百分位 | 说明 |
|
||||
|------|-------:|:----:|------|:---:|------|
|
||||
| `InpTimeframe` | 5 | 冻结 | 冻结(不搜索) | — | 信号时间框架(ENUM_TIMEFRAMES,5=M5) |
|
||||
| `InpFastEmaPeriod` | 34 | 是 | 8..34 step 1 | 100.0% | 快 EMA 周期(趋势定义) |
|
||||
| `InpSlowEmaPeriod` | 180 | 是 | 50..200 step 5 | 80.2% | 慢 EMA 周期(趋势定义) |
|
||||
| `InpRsiPeriod` | 11 | 是 | 7..28 step 1 | 19.6% | RSI 周期(回撤触发) |
|
||||
| `InpRsiBuyLevel` | 39 | 是 | 30..50 step 1 | 25.6% | RSI 买入阈值 |
|
||||
| `InpRsiSellLevel` | 57 | 是 | 50..70 step 1 | 73.2% | RSI 卖出阈值 |
|
||||
| `InpPullbackAtrMult` | 4 | 是 | 1..4 step 0.1 | 100.0% | 回撤 ATR 倍数(价格偏离 fast EMA 限值) |
|
||||
| `InpAtrPeriod` | 28 | 是 | 7..28 step 1 | 100.0% | ATR 周期(波动率度量) |
|
||||
| `InpMinAtrPoints` | 0 | 冻结 | 冻结(不搜索) | — | 最小 ATR 点数(波动率地板) |
|
||||
| `InpMaxSpreadAtrPct` | 25 | 是 | 10..50 step 2.5 | 18.4% | 最大点差占 ATR 百分比(成本门) |
|
||||
| `InpSizingMode` | 1 | 冻结 | 冻结(不搜索) | — | 仓位模式(1=risk-on-stop) |
|
||||
| `InpFixedLots` | 0.01 | 冻结 | 冻结(不搜索) | — | 固定手数(sizing=0 时用) |
|
||||
| `InpRiskPercent` | 2.5 | 是 | 0.25..3 step 0.25 | 53.0% | 单笔风险占权益 % |
|
||||
| `InpStopMode` | 0 | 冻结 | 冻结(不搜索) | — | 止损模式(0=ATR,1=点数) |
|
||||
| `InpAtrSLMult` | 1 | 是 | 1..3 step 0.1 | 23.2% | ATR 止损倍数 |
|
||||
| `InpAtrTPMult` | 4 | 是 | 1..4 step 0.1 | 100.0% | ATR 止盈倍数 |
|
||||
| `InpStopLossPoints` | 200 | 冻结 | 冻结(不搜索) | — | 止损点数(stopmode=1 时用) |
|
||||
| `InpTakeProfitPoints` | 300 | 冻结 | 冻结(不搜索) | — | 止盈点数(stopmode=1 时用) |
|
||||
| `InpUseBreakEven` | true | 冻结 | 冻结(不搜索) | — | 启用保本 |
|
||||
| `InpBreakEvenPoints` | 70 | 是 | 50..300 step 10 | 59.4% | 保本触发点数 |
|
||||
| `InpBreakEvenLock` | 50 | 是 | 10..50 step 5 | 100.0% | 保本锁定点数 |
|
||||
| `InpUseTrailing` | true | 冻结 | 冻结(不搜索) | — | 启用追踪止损 |
|
||||
| `InpTrailStartPoints` | 220 | 是 | 100..400 step 10 | 47.8% | 追踪触发点数 |
|
||||
| `InpTrailStepPoints` | 240 | 是 | 60..240 step 10 | 100.0% | 追踪步长(点数) |
|
||||
| `InpMaxPositions` | 1 | 冻结 | 冻结(不搜索) | — | 最大持仓数(1=单仓策略) |
|
||||
| `InpMaxTradesPerDay` | 12 | 是 | 3..12 step 1 | 100.0% | 单日最大交易数 |
|
||||
| `InpDailyLossLimit` | 7 | 是 | 2..8 step 0.5 | 59.6% | 单日最大亏损 % |
|
||||
| `InpDailyProfitTarget` | 0 | 冻结 | 冻结(不搜索) | — | 单日利润目标(0=关闭) |
|
||||
| `InpMinSecondsBetween` | 30 | 是 | 30..180 step 15 | 35.6% | 信号最小间隔(秒) |
|
||||
| `InpUseSession` | false | 冻结 | 冻结(不搜索) | — | 启用交易时段过滤 |
|
||||
| `InpSessionStartHour` | 7 | 冻结 | 冻结(不搜索) | — | 时段开始小时 |
|
||||
| `InpSessionEndHour` | 20 | 冻结 | 冻结(不搜索) | — | 时段结束小时 |
|
||||
| `InpMagicNumber` | 20240530 | 冻结 | 冻结(不搜索) | — | EA Magic Number |
|
||||
| `InpComment` | GoldScalperPro | 冻结 | 冻结(不搜索) | — | 订单注释 |
|
||||
|
||||
来源:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)(finalist `index=3`)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 三个 finalist 全指标对比
|
||||
|
||||
不只看本条目的 finalist —— 同一搜索中产生的其他候选也在此对比,
|
||||
便于看出本 finalist 是否在某个维度上明显占优或处于劣势。
|
||||
|
||||
| 指标 | IS #1 | OOS #1 | IS #2 | OOS #2 | IS #3 | OOS #3 |
|
||||
|------|------:|------:|------:|------:|------:|------:|
|
||||
| 净利润 ($) | 263,527.63 | 10,632.70 | 94,197.91 | 11,153.84 | 165,740.84 | 6,969.58 |
|
||||
| PF | 1.8016 | 1.8001 | 2.4990 | 2.1992 | 1.6318 | 1.5137 |
|
||||
| 交易数 | 2104 | 1098 | 1605 | 874 | 2084 | 1083 |
|
||||
| 回撤 % | 10.79% | 11.04% | 3.28% | 8.70% | 14.38% | 14.33% |
|
||||
| 夏普 | 7.0019 | 8.5291 | 7.7362 | 11.0799 | 6.2544 | 6.9851 |
|
||||
| 胜率 | 81.13% | 88.89% | 86.92% | 92.45% | 79.61% | 86.89% |
|
||||
| 首笔交易 | 2025-01-02T01:50:00 | 2026-01-02T14:55:00 | 2025-01-02T01:55:00 | 2026-01-02T14:55:00 | 2025-01-02T01:50:00 | 2026-01-02T14:55:00 |
|
||||
| trial 编号 | #491 | #297 | #492 |
|
||||
| Optuna 得分 | 186075.40 | 68772.16 | 129574.90 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 4. Python 指标(含指标预热,M1 tick 级出场模拟)
|
||||
|
||||
通过 [scripts/reeval_finalist_forward.py](../scripts/reeval_finalist_forward.py) 重新评估。
|
||||
信号在完整 M5 history 上计算(预热),然后修剪到评估窗口 — 与 MT5 tester
|
||||
测试前的指标预热行为一致。出场用 M1 tick 级 4-sub-tick 模拟(doc 03 §7)。
|
||||
|
||||
| 窗口 | 净利润 ($) | PF | 交易数 | 回撤% | 夏普 | 胜率 | 首笔交易 |
|
||||
|------|----------:|---:|-------:|------:|-----:|-----:|-----------|
|
||||
| IS | 165,740.84 | 1.6318 | 2084 | 14.38% | 6.2544 | 79.61% | 2025-01-02T01:50:00 |
|
||||
| OOS | 6,969.58 | 1.5137 | 1083 | 14.33% | 6.9851 | 86.89% | 2026-01-02T14:55:00 |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 5. MT5 指标(Strategy Tester,1 分钟 OHLC 模型)
|
||||
|
||||
_未提供 MT5 HTML 报告 — 跳过本节_
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 6. 与 doc 03 §8 目标关卡的差距分析
|
||||
|
||||
EA 类别:**BE / trailing,M1 tick 级引擎**。适用关卡:net ≤ ~10%,PF ≤ ~10%,
|
||||
trades ≤ ~5%,权益回撤 ≤ ~10%。
|
||||
|
||||
_未提供 MT5 数据 — 跳过差距分析_
|
||||
|
||||
|
||||
### 6.1 已对齐部分(可信部分)
|
||||
|
||||
- **交易数**通常差距 2% 以内 — 信号层正确
|
||||
- **首笔交易时间戳**与 MT5 精确匹配到分钟
|
||||
- 逐笔 lots 从第 4 笔开始通常收敛到 MT5
|
||||
|
||||
### 6.2 偏离部分(已知差距)
|
||||
|
||||
- net 和 PF 偏离可能达 3–4 倍。差距**并非**均匀分布在所有交易上 — 集中在 IS 窗口前几笔
|
||||
- 第 1 笔交易:Python ATR 与 MT5 反推 ATR 偏差约 30%。ATR 决定 SL 距离 → 决定 lots → 复利放大
|
||||
- 在 risk-% 复利下,第 1 笔 sizing 误差通过权益曲线指数传播
|
||||
|
||||
### 6.3 根因(数据层,非引擎 bug)
|
||||
|
||||
- [shared/indicators/base.py](../shared/indicators/base.py) ATR 是 Wilder 平滑(SMA 种子 +
|
||||
Wilder 递归)— 与 MT5 `iATR` 完全一致。算法排除。
|
||||
- `ScalperEngine._calc_lots` 与 `GoldScalperPro.mq5 CalcLots` 代数等价。Sizing 公式排除。
|
||||
- `tick_value` 通过反解 MT5 第 1 笔交易 PnL 验证 = 1.0。tick_value 排除。
|
||||
- 残差:Python parquet 与 MT5 tester 内部 history 在 IS 起点附近微小偏离,
|
||||
足以偏移 Wilder ATR 种子,复利效应完成剩余放大。
|
||||
|
||||
### 6.4 为何在 FAIL 状态下仍可批准
|
||||
|
||||
1. 信号层**已证明正确** — 交易数和首笔交易时间戳匹配 MT5。这是引擎负责的部分。
|
||||
2. 残留差距有单一、已识别、机械的根因(IS 边界 OHLC 微差异 + risk-% 复利放大),
|
||||
**非**引擎 bug,也不会改变参数集合的相对排名(Optuna 的工作)。
|
||||
3. 按 doc 03 §7 策略:Python 用于排名;**MT5 才是 live 决策依据**。MT5 数值是
|
||||
任何实盘决策的可信数值;Python 数值保留用于排名可复现性。
|
||||
4. doc 04 Rule 7 接受通过"三道关卡:Python 搜索 → MT5 验证 → 人工审批"的条目。
|
||||
人工审批关卡是显式覆盖,判断关卡未通过是引擎 bug(→ 拒绝)还是已知边界效应
|
||||
(→ 附上下文接受)。
|
||||
|
||||
---
|
||||
|
||||
## 7. 搜索统计
|
||||
|
||||
- Optuna study 总 trial 数:**500**
|
||||
- 完成:**500**,剪枝:**0**,失败:**0**
|
||||
- 最高得分:**186075.40**,中位得分:**17265.61**
|
||||
- 本 finalist 在 study 中的得分排名:**3/500**
|
||||
- 搜索空间维度:**18 个可调参数** + 16 个冻结参数
|
||||
- 与其他 finalist 的参数相似度:
|
||||
- vs finalist #1 (trial #491): 14/18 参数完全相同
|
||||
- vs finalist #2 (trial #297): 0/18 参数完全相同
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 8. 复现命令
|
||||
|
||||
```bash
|
||||
# 1. 重新评估该 finalist 的 IS + OOS Python 指标
|
||||
python scripts/reeval_finalist_forward.py
|
||||
|
||||
# 2. 与 MT5 报告对比(需先有 reports/IS-Report*.html 和 OOS-Report*.html)
|
||||
python scripts/compare_finalist.py 3
|
||||
|
||||
# 3. 检查该 finalist 的逐笔 trade 诊断
|
||||
python scripts/diag_size_after_warmup.py
|
||||
|
||||
# 4. 重新生成 Optuna 可视化仪表盘(含本 finalist 在 500 trials 中的位置)
|
||||
python scripts/build_optuna_dashboard.py
|
||||
|
||||
# 5. 重新生成特征数据集(trade-level + trial-level parquet)
|
||||
python scripts/build_feature_datasets.py
|
||||
|
||||
# 6. 重新生成本 registry 条目
|
||||
python scripts/build_registry_entry.py --finalist 3
|
||||
```
|
||||
|
||||
EA `.ex5` / `.mq5` 和 MT5 使用的 `GoldScalperPro.set` 位于项目根目录。
|
||||
finalist 对应的 trial 编号是 **#492**,可在 Optuna dashboard 中定位。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 9. 已知限制(沿用)
|
||||
|
||||
1. **Optuna objective 预热 bug**(已于 2026-06-26 修复):`scripts/optimize.py` 之前把 bars
|
||||
切到 IS 窗口后才传给 `objective()`,导致 EMA/RSI/ATR 在 IS 起点才开始预热。修复后
|
||||
`ObjectiveConfig.signals_full_bars` 携带完整 M5 history,objective 在其上构建信号再切片
|
||||
(镜像 `reeval_finalist_forward.py` 的预热模式)。本 finalist 批准于修复之前;
|
||||
用修复版重跑预计不会改变 finalist 集合(修复只影响 IS 起点约 14h 的稳定期)。
|
||||
2. **成交价约定**(次要):Python 用半点差入场(close ± spread/2);MT5 tester 用全点差
|
||||
(ask = close + spread)。单 tick 差异,不复利放大。
|
||||
3. **ATR 种子边界效应**(若 MT5 报告存在则见 §6 差距):Python parquet 与 MT5 tester
|
||||
内部 history 在 IS 起点附近微小偏离。在 risk-% 复利下可能让 Python net 膨胀。
|
||||
MT5 数值才是可信值。
|
||||
4. **M1 OHLC 合成 tick**:4 sub-ticks × 5 M1 bars 模型是 MT5 真实 tick path 的近似。
|
||||
对 BE/trailing 策略,比 bar-level 大幅缩小差距(-48% → -5.6%),但仍非完美。
|
||||
|
||||
|
||||
---
|
||||
|
||||
*来源工件:[studies/finalists/gold_scalper_pro_is2025-2026.json](../studies/finalists/gold_scalper_pro_is2025-2026.json)、
|
||||
[reports/IS-ReportTester-52845377.html](../reports/IS-ReportTester-52845377.html)、
|
||||
[reports/OOS-ReportTester-52845377.html](../reports/OOS-ReportTester-52845377.html)、
|
||||
[GoldScalperPro.mq5](../GoldScalperPro.mq5)、[GoldScalperPro.ex5](../GoldScalperPro.ex5)、
|
||||
[strategies/gold_scalper_pro/scalper_engine.py](../strategies/gold_scalper_pro/scalper_engine.py)。*
|
||||
File diff suppressed because one or more lines are too long
@@ -502,19 +502,27 @@ def build_registry_markdown(
|
||||
limitations = build_known_limitations(f)
|
||||
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
approval_status = (
|
||||
"已批准(含已记录的已知差距)"
|
||||
if is_metrics is not None
|
||||
else "已记录(无 MT5 验证)"
|
||||
)
|
||||
if is_metrics is not None:
|
||||
approval_status = "已批准(含已记录的已知差距)"
|
||||
approval_basis = (
|
||||
"信号层对齐已验证(trades PASS,首笔交易时间戳精确匹配)。"
|
||||
"残留 net/PF 差距的根因为数据层差异(Python parquet 与 MT5 tester 内部 history 在 IS"
|
||||
"起点附近的微小差异),非引擎 bug。"
|
||||
)
|
||||
else:
|
||||
approval_status = "已记录(无 MT5 验证 — 待 Phase 7 MT5 验证)"
|
||||
approval_basis = (
|
||||
"本 finalist 来自 warmup 修复后的 Optuna study 重跑。"
|
||||
"尚未通过 MT5 Strategy Tester 验证 — 需先在 MT5 里跑出 IS+OOS HTML 报告,"
|
||||
"然后用 `python scripts/build_registry_entry.py --finalist {} --mt5-is-html ... --mt5-oos-html ...`"
|
||||
" 重新生成本条目以补齐 MT5 指标 + 差距分析。"
|
||||
).format(f["index"])
|
||||
|
||||
return f"""# 注册表条目 — GoldScalperPro / XAUUSD / {is_start} → {oos_end}
|
||||
|
||||
**状态:** {approval_status} — 文档生成日期 {today}
|
||||
**生成方式:** 由 `scripts/build_registry_entry.py --finalist {f['index']}` 自动生成
|
||||
**批准依据:** 信号层对齐已验证(trades PASS,首笔交易时间戳精确匹配)。
|
||||
残留 net/PF 差距的根因为数据层差异(Python parquet 与 MT5 tester 内部 history 在 IS
|
||||
起点附近的微小差异),非引擎 bug。
|
||||
**批准依据:** {approval_basis}
|
||||
|
||||
---
|
||||
|
||||
@@ -673,7 +681,9 @@ def main() -> int:
|
||||
windows = f["_windows"]
|
||||
is_start = windows["IS"][0].split(" ")[0]
|
||||
oos_end = windows["OOS"][1].split(" ")[0]
|
||||
out_name = f"gold_scalper_pro_xauusd_{is_start}_{oos_end}.md"
|
||||
# Include finalist index + trial number in filename so multiple finalists
|
||||
# from the same window don't overwrite each other.
|
||||
out_name = f"gold_scalper_pro_xauusd_{is_start}_{oos_end}_f{f['index']}_t{f['trial_number']}.md"
|
||||
out_path = REGISTRY_DIR / out_name
|
||||
|
||||
REGISTRY_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -12,58 +12,58 @@
|
||||
"finalists": [
|
||||
{
|
||||
"index": 1,
|
||||
"trial_number": 324,
|
||||
"score": 858.47,
|
||||
"trial_number": 491,
|
||||
"score": 186075.4,
|
||||
"params": {
|
||||
"InpFastEmaPeriod": 25,
|
||||
"InpSlowEmaPeriod": 160,
|
||||
"InpRsiPeriod": 16,
|
||||
"InpRsiBuyLevel": 50.0,
|
||||
"InpRsiSellLevel": 56.0,
|
||||
"InpPullbackAtrMult": 3.4000000000000004,
|
||||
"InpFastEmaPeriod": 33,
|
||||
"InpSlowEmaPeriod": 180,
|
||||
"InpRsiPeriod": 11,
|
||||
"InpRsiBuyLevel": 39.0,
|
||||
"InpRsiSellLevel": 57.0,
|
||||
"InpPullbackAtrMult": 3.9000000000000004,
|
||||
"InpAtrPeriod": 27,
|
||||
"InpMaxSpreadAtrPct": 37.5,
|
||||
"InpRiskPercent": 2.25,
|
||||
"InpAtrSLMult": 1.9,
|
||||
"InpAtrTPMult": 3.1,
|
||||
"InpBreakEvenPoints": 50.0,
|
||||
"InpBreakEvenLock": 25,
|
||||
"InpTrailStartPoints": 400.0,
|
||||
"InpTrailStepPoints": 70.0,
|
||||
"InpMaxSpreadAtrPct": 25.0,
|
||||
"InpRiskPercent": 2.5,
|
||||
"InpAtrSLMult": 1.0,
|
||||
"InpAtrTPMult": 4.0,
|
||||
"InpBreakEvenPoints": 60.0,
|
||||
"InpBreakEvenLock": 50,
|
||||
"InpTrailStartPoints": 220.0,
|
||||
"InpTrailStepPoints": 240.0,
|
||||
"InpMaxTradesPerDay": 12,
|
||||
"InpDailyLossLimit": 5.0,
|
||||
"InpMinSecondsBetween": 75
|
||||
"InpDailyLossLimit": 7.0,
|
||||
"InpMinSecondsBetween": 30
|
||||
},
|
||||
"merged_params": {
|
||||
"InpTimeframe": 5,
|
||||
"InpFastEmaPeriod": 25,
|
||||
"InpSlowEmaPeriod": 160,
|
||||
"InpRsiPeriod": 16,
|
||||
"InpRsiBuyLevel": 50.0,
|
||||
"InpRsiSellLevel": 56.0,
|
||||
"InpPullbackAtrMult": 3.4000000000000004,
|
||||
"InpFastEmaPeriod": 33,
|
||||
"InpSlowEmaPeriod": 180,
|
||||
"InpRsiPeriod": 11,
|
||||
"InpRsiBuyLevel": 39.0,
|
||||
"InpRsiSellLevel": 57.0,
|
||||
"InpPullbackAtrMult": 3.9000000000000004,
|
||||
"InpAtrPeriod": 27,
|
||||
"InpMinAtrPoints": 0,
|
||||
"InpMaxSpreadAtrPct": 37.5,
|
||||
"InpMaxSpreadAtrPct": 25.0,
|
||||
"InpSizingMode": 1,
|
||||
"InpFixedLots": 0.01,
|
||||
"InpRiskPercent": 2.25,
|
||||
"InpRiskPercent": 2.5,
|
||||
"InpStopMode": 0,
|
||||
"InpAtrSLMult": 1.9,
|
||||
"InpAtrTPMult": 3.1,
|
||||
"InpAtrSLMult": 1.0,
|
||||
"InpAtrTPMult": 4.0,
|
||||
"InpStopLossPoints": 200,
|
||||
"InpTakeProfitPoints": 300,
|
||||
"InpUseBreakEven": true,
|
||||
"InpBreakEvenPoints": 50.0,
|
||||
"InpBreakEvenLock": 25,
|
||||
"InpBreakEvenPoints": 60.0,
|
||||
"InpBreakEvenLock": 50,
|
||||
"InpUseTrailing": true,
|
||||
"InpTrailStartPoints": 400.0,
|
||||
"InpTrailStepPoints": 70.0,
|
||||
"InpTrailStartPoints": 220.0,
|
||||
"InpTrailStepPoints": 240.0,
|
||||
"InpMaxPositions": 1,
|
||||
"InpMaxTradesPerDay": 12,
|
||||
"InpDailyLossLimit": 5.0,
|
||||
"InpDailyLossLimit": 7.0,
|
||||
"InpDailyProfitTarget": 0.0,
|
||||
"InpMinSecondsBetween": 75,
|
||||
"InpMinSecondsBetween": 30,
|
||||
"InpUseSession": false,
|
||||
"InpSessionStartHour": 7,
|
||||
"InpSessionEndHour": 20,
|
||||
@@ -71,78 +71,78 @@
|
||||
"InpComment": "GoldScalperPro"
|
||||
},
|
||||
"IS": {
|
||||
"net": 28983.81,
|
||||
"PF": 1.7053,
|
||||
"trades": 2396,
|
||||
"DD%": 0.103408,
|
||||
"sharpe": 6.9717,
|
||||
"win_rate": 0.8998,
|
||||
"first_trade_ts": "2025-01-02T01:55:00"
|
||||
"net": 263527.63,
|
||||
"PF": 1.8016,
|
||||
"trades": 2104,
|
||||
"DD%": 0.107894,
|
||||
"sharpe": 7.0019,
|
||||
"win_rate": 0.8113,
|
||||
"first_trade_ts": "2025-01-02T01:50:00"
|
||||
},
|
||||
"OOS": {
|
||||
"net": 4213.78,
|
||||
"PF": 2.3636,
|
||||
"trades": 1161,
|
||||
"DD%": 0.078049,
|
||||
"sharpe": 9.457,
|
||||
"win_rate": 0.9518,
|
||||
"first_trade_ts": "2026-01-02T08:50:00"
|
||||
"net": 10632.7,
|
||||
"PF": 1.8001,
|
||||
"trades": 1098,
|
||||
"DD%": 0.110416,
|
||||
"sharpe": 8.5291,
|
||||
"win_rate": 0.8889,
|
||||
"first_trade_ts": "2026-01-02T14:55:00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"trial_number": 39,
|
||||
"score": 159.38,
|
||||
"trial_number": 297,
|
||||
"score": 68772.16,
|
||||
"params": {
|
||||
"InpFastEmaPeriod": 24,
|
||||
"InpSlowEmaPeriod": 65,
|
||||
"InpRsiPeriod": 23,
|
||||
"InpRsiBuyLevel": 30.0,
|
||||
"InpRsiSellLevel": 51.0,
|
||||
"InpPullbackAtrMult": 2.4000000000000004,
|
||||
"InpAtrPeriod": 9,
|
||||
"InpFastEmaPeriod": 9,
|
||||
"InpSlowEmaPeriod": 110,
|
||||
"InpRsiPeriod": 17,
|
||||
"InpRsiBuyLevel": 45.0,
|
||||
"InpRsiSellLevel": 54.0,
|
||||
"InpPullbackAtrMult": 3.5,
|
||||
"InpAtrPeriod": 23,
|
||||
"InpMaxSpreadAtrPct": 37.5,
|
||||
"InpRiskPercent": 0.75,
|
||||
"InpAtrSLMult": 1.2,
|
||||
"InpAtrTPMult": 2.1,
|
||||
"InpBreakEvenPoints": 70.0,
|
||||
"InpRiskPercent": 2.75,
|
||||
"InpAtrSLMult": 1.3,
|
||||
"InpAtrTPMult": 3.9000000000000004,
|
||||
"InpBreakEvenPoints": 50.0,
|
||||
"InpBreakEvenLock": 45,
|
||||
"InpTrailStartPoints": 140.0,
|
||||
"InpTrailStepPoints": 80.0,
|
||||
"InpMaxTradesPerDay": 3,
|
||||
"InpTrailStartPoints": 270.0,
|
||||
"InpTrailStepPoints": 70.0,
|
||||
"InpMaxTradesPerDay": 11,
|
||||
"InpDailyLossLimit": 7.5,
|
||||
"InpMinSecondsBetween": 120
|
||||
"InpMinSecondsBetween": 45
|
||||
},
|
||||
"merged_params": {
|
||||
"InpTimeframe": 5,
|
||||
"InpFastEmaPeriod": 24,
|
||||
"InpSlowEmaPeriod": 65,
|
||||
"InpRsiPeriod": 23,
|
||||
"InpRsiBuyLevel": 30.0,
|
||||
"InpRsiSellLevel": 51.0,
|
||||
"InpPullbackAtrMult": 2.4000000000000004,
|
||||
"InpAtrPeriod": 9,
|
||||
"InpFastEmaPeriod": 9,
|
||||
"InpSlowEmaPeriod": 110,
|
||||
"InpRsiPeriod": 17,
|
||||
"InpRsiBuyLevel": 45.0,
|
||||
"InpRsiSellLevel": 54.0,
|
||||
"InpPullbackAtrMult": 3.5,
|
||||
"InpAtrPeriod": 23,
|
||||
"InpMinAtrPoints": 0,
|
||||
"InpMaxSpreadAtrPct": 37.5,
|
||||
"InpSizingMode": 1,
|
||||
"InpFixedLots": 0.01,
|
||||
"InpRiskPercent": 0.75,
|
||||
"InpRiskPercent": 2.75,
|
||||
"InpStopMode": 0,
|
||||
"InpAtrSLMult": 1.2,
|
||||
"InpAtrTPMult": 2.1,
|
||||
"InpAtrSLMult": 1.3,
|
||||
"InpAtrTPMult": 3.9000000000000004,
|
||||
"InpStopLossPoints": 200,
|
||||
"InpTakeProfitPoints": 300,
|
||||
"InpUseBreakEven": true,
|
||||
"InpBreakEvenPoints": 70.0,
|
||||
"InpBreakEvenPoints": 50.0,
|
||||
"InpBreakEvenLock": 45,
|
||||
"InpUseTrailing": true,
|
||||
"InpTrailStartPoints": 140.0,
|
||||
"InpTrailStepPoints": 80.0,
|
||||
"InpTrailStartPoints": 270.0,
|
||||
"InpTrailStepPoints": 70.0,
|
||||
"InpMaxPositions": 1,
|
||||
"InpMaxTradesPerDay": 3,
|
||||
"InpMaxTradesPerDay": 11,
|
||||
"InpDailyLossLimit": 7.5,
|
||||
"InpDailyProfitTarget": 0.0,
|
||||
"InpMinSecondsBetween": 120,
|
||||
"InpMinSecondsBetween": 45,
|
||||
"InpUseSession": false,
|
||||
"InpSessionStartHour": 7,
|
||||
"InpSessionEndHour": 20,
|
||||
@@ -150,78 +150,78 @@
|
||||
"InpComment": "GoldScalperPro"
|
||||
},
|
||||
"IS": {
|
||||
"net": 471.1,
|
||||
"PF": 1.5311,
|
||||
"trades": 555,
|
||||
"DD%": 0.040607,
|
||||
"sharpe": 3.65,
|
||||
"win_rate": 0.8234,
|
||||
"first_trade_ts": "2025-01-03T12:35:00"
|
||||
"net": 94197.91,
|
||||
"PF": 2.499,
|
||||
"trades": 1605,
|
||||
"DD%": 0.032769,
|
||||
"sharpe": 7.7362,
|
||||
"win_rate": 0.8692,
|
||||
"first_trade_ts": "2025-01-02T01:55:00"
|
||||
},
|
||||
"OOS": {
|
||||
"net": 265.82,
|
||||
"PF": 1.8351,
|
||||
"trades": 276,
|
||||
"DD%": 0.029001,
|
||||
"sharpe": 4.0478,
|
||||
"win_rate": 0.8841,
|
||||
"first_trade_ts": "2026-01-07T11:10:00"
|
||||
"net": 11153.84,
|
||||
"PF": 2.1992,
|
||||
"trades": 874,
|
||||
"DD%": 0.087003,
|
||||
"sharpe": 11.0799,
|
||||
"win_rate": 0.9245,
|
||||
"first_trade_ts": "2026-01-02T14:55:00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"trial_number": 391,
|
||||
"score": 794.99,
|
||||
"trial_number": 492,
|
||||
"score": 129574.9,
|
||||
"params": {
|
||||
"InpFastEmaPeriod": 25,
|
||||
"InpSlowEmaPeriod": 165,
|
||||
"InpRsiPeriod": 14,
|
||||
"InpRsiBuyLevel": 50.0,
|
||||
"InpRsiSellLevel": 58.0,
|
||||
"InpPullbackAtrMult": 3.5,
|
||||
"InpAtrPeriod": 27,
|
||||
"InpMaxSpreadAtrPct": 45.0,
|
||||
"InpRiskPercent": 1.5,
|
||||
"InpAtrSLMult": 1.9,
|
||||
"InpAtrTPMult": 3.0,
|
||||
"InpBreakEvenPoints": 60.0,
|
||||
"InpBreakEvenLock": 20,
|
||||
"InpTrailStartPoints": 400.0,
|
||||
"InpTrailStepPoints": 70.0,
|
||||
"InpFastEmaPeriod": 34,
|
||||
"InpSlowEmaPeriod": 180,
|
||||
"InpRsiPeriod": 11,
|
||||
"InpRsiBuyLevel": 39.0,
|
||||
"InpRsiSellLevel": 57.0,
|
||||
"InpPullbackAtrMult": 4.0,
|
||||
"InpAtrPeriod": 28,
|
||||
"InpMaxSpreadAtrPct": 25.0,
|
||||
"InpRiskPercent": 2.5,
|
||||
"InpAtrSLMult": 1.0,
|
||||
"InpAtrTPMult": 4.0,
|
||||
"InpBreakEvenPoints": 70.0,
|
||||
"InpBreakEvenLock": 50,
|
||||
"InpTrailStartPoints": 220.0,
|
||||
"InpTrailStepPoints": 240.0,
|
||||
"InpMaxTradesPerDay": 12,
|
||||
"InpDailyLossLimit": 2.5,
|
||||
"InpMinSecondsBetween": 75
|
||||
"InpDailyLossLimit": 7.0,
|
||||
"InpMinSecondsBetween": 30
|
||||
},
|
||||
"merged_params": {
|
||||
"InpTimeframe": 5,
|
||||
"InpFastEmaPeriod": 25,
|
||||
"InpSlowEmaPeriod": 165,
|
||||
"InpRsiPeriod": 14,
|
||||
"InpRsiBuyLevel": 50.0,
|
||||
"InpRsiSellLevel": 58.0,
|
||||
"InpPullbackAtrMult": 3.5,
|
||||
"InpAtrPeriod": 27,
|
||||
"InpFastEmaPeriod": 34,
|
||||
"InpSlowEmaPeriod": 180,
|
||||
"InpRsiPeriod": 11,
|
||||
"InpRsiBuyLevel": 39.0,
|
||||
"InpRsiSellLevel": 57.0,
|
||||
"InpPullbackAtrMult": 4.0,
|
||||
"InpAtrPeriod": 28,
|
||||
"InpMinAtrPoints": 0,
|
||||
"InpMaxSpreadAtrPct": 45.0,
|
||||
"InpMaxSpreadAtrPct": 25.0,
|
||||
"InpSizingMode": 1,
|
||||
"InpFixedLots": 0.01,
|
||||
"InpRiskPercent": 1.5,
|
||||
"InpRiskPercent": 2.5,
|
||||
"InpStopMode": 0,
|
||||
"InpAtrSLMult": 1.9,
|
||||
"InpAtrTPMult": 3.0,
|
||||
"InpAtrSLMult": 1.0,
|
||||
"InpAtrTPMult": 4.0,
|
||||
"InpStopLossPoints": 200,
|
||||
"InpTakeProfitPoints": 300,
|
||||
"InpUseBreakEven": true,
|
||||
"InpBreakEvenPoints": 60.0,
|
||||
"InpBreakEvenLock": 20,
|
||||
"InpBreakEvenPoints": 70.0,
|
||||
"InpBreakEvenLock": 50,
|
||||
"InpUseTrailing": true,
|
||||
"InpTrailStartPoints": 400.0,
|
||||
"InpTrailStepPoints": 70.0,
|
||||
"InpTrailStartPoints": 220.0,
|
||||
"InpTrailStepPoints": 240.0,
|
||||
"InpMaxPositions": 1,
|
||||
"InpMaxTradesPerDay": 12,
|
||||
"InpDailyLossLimit": 2.5,
|
||||
"InpDailyLossLimit": 7.0,
|
||||
"InpDailyProfitTarget": 0.0,
|
||||
"InpMinSecondsBetween": 75,
|
||||
"InpMinSecondsBetween": 30,
|
||||
"InpUseSession": false,
|
||||
"InpSessionStartHour": 7,
|
||||
"InpSessionEndHour": 20,
|
||||
@@ -229,22 +229,22 @@
|
||||
"InpComment": "GoldScalperPro"
|
||||
},
|
||||
"IS": {
|
||||
"net": 5171.29,
|
||||
"PF": 1.5425,
|
||||
"trades": 2260,
|
||||
"DD%": 0.061668,
|
||||
"sharpe": 5.4414,
|
||||
"win_rate": 0.8885,
|
||||
"first_trade_ts": "2025-01-02T01:55:00"
|
||||
"net": 165740.84,
|
||||
"PF": 1.6318,
|
||||
"trades": 2084,
|
||||
"DD%": 0.143814,
|
||||
"sharpe": 6.2544,
|
||||
"win_rate": 0.7961,
|
||||
"first_trade_ts": "2025-01-02T01:50:00"
|
||||
},
|
||||
"OOS": {
|
||||
"net": 1614.25,
|
||||
"PF": 1.9341,
|
||||
"trades": 1131,
|
||||
"DD%": 0.053726,
|
||||
"sharpe": 7.5916,
|
||||
"win_rate": 0.9416,
|
||||
"first_trade_ts": "2026-01-02T08:15:00"
|
||||
"net": 6969.58,
|
||||
"PF": 1.5137,
|
||||
"trades": 1083,
|
||||
"DD%": 0.143276,
|
||||
"sharpe": 6.9851,
|
||||
"win_rate": 0.8689,
|
||||
"first_trade_ts": "2026-01-02T14:55:00"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user