方法论
这一页说明本站每个数字是怎么算出来的:数据从哪来、回测怎么跑、A–F 评级的分数怎么给, 以及我们如何验证生成的 EA 与回测引擎行为一致。不确定的地方,我们直接标为局限,而不是含糊带过。
1. 历史数据
- 数据源为 Dukascopy 的分钟级(M1)历史行情,时区为 UTC。
- 当前覆盖 14 个品种,数据自 2022 年 1 月起,每日自动更新到前一天收盘。
- 未指定区间时,回测默认取最近 24 个月的滚动窗口。
- 更高周期(M5 至 D1)的 K 线由 M1 数据聚合而成,而非分别下载。
2. 回测如何执行
- 逐根 K 线推进,信号在每根 K 线收盘时评估一次,不使用未来数据。
- 止损与止盈按 M1 精度逐分钟检查——而不是只看主周期 K 线的最高最低价。
- 同一根 K 线内若止损与止盈都被触及,按不利的一侧成交(保守假设)。
- 点差按品种固定值扣除,开仓价含滑点设置。手续费与隔夜利息未计入(见第 6 节)。
- 多周期策略中,高周期指标只取已收盘的高周期 K 线值,读不到当时尚未形成的数据。
3. 样本外切分
默认把回测区间最后 20% 的时间划为样本外(out-of-sample):这段行情不参与调参, 报告中单独列出它的交易笔数、净利、盈亏比与胜率。两栏差距很大,通常意味着参数过度贴合了历史。
4. A–F 评级怎么算
总分 100,由五项加权构成:
| 项目 | 满分 | 取满分的条件 |
|---|---|---|
| 盈亏比(PF) | 25 | PF ≥ 3.0(PF ≤ 0.5 得 0 分) |
| 夏普比率 | 25 | 夏普 ≥ 3.0 |
| 最大回撤 | 20 | 回撤 0%;回撤 ≥ 40% 得 0 分 |
| 样本外一致性 | 20 | 样本外 PF ÷ 整体 PF ≥ 1.2(样本外需 ≥ 5 笔) |
| 样本量 | 10 | 成交 ≥ 60 笔 |
字母对应分数区间:A ≥ 80 · B ≥ 65 · C ≥ 50 · D ≥ 35 · F < 35。 另有一条硬规则:整体净利为负时总分封顶 40,即亏损策略最高只能是 D。
评级是对历史统计特征的汇总,不是对未来盈利概率的预测。
一个 A 级策略完全可能在未来亏钱。
5. 生成的 EA 与回测引擎是否一致
这是最容易被忽略、却最该验证的一环:回测再准,如果生成的 MQL5 代码行为不同,那也没有意义。 我们把同一份策略在两边同时跑,逐笔比对成交单:
- 把 Dukascopy 数据导入 MT5 自定义品种,用 MetaTrader 5 策略测试器运行生成的 EA;
- 与本站引擎在同一区间的成交记录做 diff。
- 实测:单周期策略 48/48 笔配对成功,进场价 48/48 完全一致,出场原因 48/48 一致; 多周期(三重滤网)策略 17/17 全部一致。
- 已知良性差异:MT5 测试器的 tick 生成方式会让止损成交价出现不超过约 1.2 点的过冲。
此外,每个生成的 EA 在交付前都经 MetaEditor 编译检查,必须 0 错误。
6. 局限(我们知道,并如实告知)
- 手续费与隔夜利息未计入。持仓时间长的策略,实盘收益会低于回测值。
- 点差按固定值模拟,不还原重大数据发布时的点差扩大与流动性枯竭。
- 不模拟部分成交、拒单与滑点分布,假设委托按预期价格成交(止损除外)。
- 你的券商数据与我们不同:报价源、服务器时区(多为 EET)、点差模型都不一样, 你在自己 MT5 里复测必然得到不同数字。判断策略请看趋势与统计特征是否一致, 而非逐笔对齐(详见学堂)。
- 历史表现不代表未来收益。回测的作用是筛掉明显不行的策略,不是预测未来。
7. 我们的自我约束
- 站上每个数字都由上述引擎跑出,无法复现的结果我们不发布。
- 回测报告永不打码、永不美化,该拿 F 的策略就拿 F。
- 方法有变更时会更新本页。