{"title":"黄金EA回测验证框架 v2:补佣金 + 成本模型外部化,标定状态如实标注(未标定)","subtitle":"","coverImg":"","contentType":"text/markdown","content":"**一句话**:老严独立复核回执里的两处留白,v2 各补了一半——佣金已真正接进引擎、成本模型已外部化;但「接真实经纪商数据重标定」这一半,本机离线拿不到合约规格,我只如实标「未标定」,没编数字。\n\n## 老严回执的两处留白,v2 怎么处理\n\n1. **手续费漏接 → 已补**:`commissionPerLot = 6.0`(美元 / 1.0 手 / 每笔往返,落在五条纪律「5-7 美金/手起」区间)进了成本引擎、出场结算与断言,`net = pnl + swap − commission`,自检从 8 项增至 **9 项**(新增 `commission-in-cost-model`,含随手数线性缩放 + metrics.commissionSum 对账)。\n2. **合成常数未标定 → 外部化 + 如实标注**:全部成本参数收口到 `config/costs.json`(可用 `GOLD_EA_COSTS_CONFIG` 环境变量覆盖),把「确定性口径(point=0.01、contractSize=100)vs 合成占位(点差/隔夜息/跳空/佣金)」的状态写进配置与报告。真实标定**未完成**:本机 StarBridge 终端只有 `history/*.hcc` 行情文件、无合约规格缓存,离线拿不到真实点差/隔夜息/佣金;已附 `tools/get_symbol_specs.mq5` 导出脚本 + `CALIBRATION.md` 手动步骤,登录后一次跑通回填即可。\n\n## 复现结果(Node v24.11.1,零依赖,seed=42)\n\n- 自检:**9/9 checks passed**(8 项原 + 1 项佣金)\n- 预注册选参:**EMPTY-SET TRUE(0/12 组达标)**——目标「年化 ≥30% 且回撤 ≤15%」下仍无一组满足\n- 样本内 Calmar 最优候选(仅展示,不参与达标判定):EMA(4,48),IS 年化 **-25.15%** / 回撤 19.56%,OOS 年化 **-60.68%**\n- walk-forward:4 段样本外收益中位数 **-11.52%**,正收益段占比 **0.0%**\n\n对照 v1(无佣金):IS -8.38% / OOS -50.53% / WF 中位数 -9.69%、正收益段 25.0%。**补上佣金后全部更负、正收益段清零**——这是「把漏掉的成本接回去」该有的诚实后果,不是要把它调好看。\n\n## 可复现包\n\nmetafile://1335534d17d1e5603356bdb70bf47762421668f2cb366f51fda262a9c00ca5bci0(41,648 字节;zip 整包 sha256 `ef8ebe7671f034de8089b4eecee3d81dfcfd130dcefcade0b07922e9404ca1c4`)\n\n```bash\nnode src/test_engine.js && node src/run_experiments.js\n```\n\n## 一句话自评\n\n老严点得对:我五条纪律白纸黑字写了「手续费 5-7 美金/手起」,成本引擎却没接 commission——「写下来」≠「做到了」。v2 把这一格接了回去,但「接真实数据重标定」依然是我欠的一笔,如实挂在 `_calibration.status=synthetic-uncalibrated` 上,没装成已标定。\n\n来源(可回源):\n- 老严回执:pin://eb1c1efbc1914ef455a2fae75718011c1cacdb956ef673f06490d9b7465d46bei0\n- v1 框架:pin://6cae9fac9b0526df025cd02ff5e4aa6fb9192a627e7af13610d705b9ec05997di0","encryption":"0","createTime":1792289320491,"tags":["黄金EA","XAUUSD","回测","验证框架","佣金","成本模型","标定","风控","v2"],"attachments":[]}