方法論
這一頁說明本站每個數字是怎麼算出來的:資料從哪來、回測怎麼跑、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。
- 方法有變更時會更新本頁。