Files
mymt5opp/registry/gold_scalper_pro_xauusd_2025-01-01_2026-06-26_f2_t297.md
T
gavindiaz e99c14e907 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 取代)
2026-06-27 00:49:47 +08:00

12 KiB
Raw Blame History

注册表条目 — 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
引擎 ScalperEnginestrategies/gold_scalper_pro/scalper_engine.py
交易品种 XAUUSDIC 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
finalist 排名 3 个中的第 2 个
Optuna trial 编号 297
Optuna 得分 68772.16

2. 参数(完整合并集合)

下表含每个参数的搜索范围、选定值、在 500 trials 中的百分位。参数说明取自 EA 源码注释。 "搜索"列为"是"表示该参数参与了 Optuna 搜索;"冻结"表示结构性固定值。

参数 选定值 搜索 范围 在 500 trials 中的百分位 说明
InpTimeframe 5 冻结 冻结(不搜索) 信号时间框架(ENUM_TIMEFRAMES5=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=ATR1=点数)
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.jsonfinalist 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 重新评估。 信号在完整 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 Tester1 分钟 OHLC 模型)

未提供 MT5 HTML 报告 — 跳过本节


6. 与 doc 03 §8 目标关卡的差距分析

EA 类别:BE / trailingM1 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 ATR 是 Wilder 平滑(SMA 种子 + Wilder 递归)— 与 MT5 iATR 完全一致。算法排除。
  • ScalperEngine._calc_lotsGoldScalperPro.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. 复现命令

# 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 historyobjective 在其上构建信号再切片 (镜像 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 合成 tick4 sub-ticks × 5 M1 bars 模型是 MT5 真实 tick path 的近似。 对 BE/trailing 策略,比 bar-level 大幅缩小差距(-48% → -5.6%),但仍非完美。

来源工件:studies/finalists/gold_scalper_pro_is2025-2026.jsonreports/IS-ReportTester-52845377.htmlreports/OOS-ReportTester-52845377.htmlGoldScalperPro.mq5GoldScalperPro.ex5strategies/gold_scalper_pro/scalper_engine.py