EA 優化完整指南:Walk-Forward Analysis 與防止過度擬合
📌 本文重點
深入學習 EA 優化方法論:遺傳演算法優化、Walk-Forward Analysis、Monte Carlo 模擬、參數穩健性測試,以及如何識別並避免過度擬合(Overfitting)。
深入學習 EA 優化方法論:遺傳演算法優化、Walk-Forward Analysis、Monte Carlo 模擬、參數穩健性測試,以及如何識別並避免過度擬合(Overfitting)。
過度擬合的本質
過度擬合是指策略的參數被過度調整以適應歷史數據,導致回測表現優異但實盤失敗。識別過度擬合的關鍵問題:如果我稍微改變參數,策略表現會急劇下降嗎?
Walk-Forward Analysis(向前驗證)
Walk-Forward Analysis 將歷史數據分成多個滾動視窗,在每個視窗的「樣本內」數據優化,然後在「樣本外」數據驗證:
| 步驟 | 說明 | 數據比例 |
|---|---|---|
| 1. 優化期(In-Sample) | 用這段數據找最佳參數 | 70% |
| 2. 驗證期(Out-of-Sample) | 用最佳參數測試這段數據 | 30% |
| 3. 滾動前進 | 視窗往前移動,重複步驟1-2 | — |
OnTester() 防過度擬合評分
double OnTester()
{
double profit = TesterStatistics(STAT_PROFIT);
double maxDD = TesterStatistics(STAT_BALANCE_DD);
double trades = TesterStatistics(STAT_TRADES);
double winRate = TesterStatistics(STAT_WIN_TRADES) / MathMax(trades, 1);
double profitFactor= TesterStatistics(STAT_PROFIT_FACTOR);
double sharpe = TesterStatistics(STAT_SHARPE_RATIO);
double recovery = TesterStatistics(STAT_RECOVERY_FACTOR);
// 嚴格過濾條件
if (trades < 50) return 0; // 樣本太少
if (winRate < 0.35) return 0; // 勝率太低
if (profitFactor < 1.3) return 0; // 利潤因子不足
if (maxDD > AccountInfoDouble(ACCOUNT_BALANCE) * 0.25) return 0; // 回撤過大
if (sharpe < 0.5) return 0; // Sharpe 不足
// 綜合評分(平衡多個指標)
double score = profitFactor * 0.3
+ sharpe * 0.3
+ recovery * 0.2
+ winRate * 0.2;
return score;
}
參數穩健性測試
好的策略應該在參數附近的「鄰近區域」都有相近的表現,而非只在某個精確值上有效:
// 在優化結果中尋找「穩健島」
// 例如:FastMA=10, SlowMA=30 是最佳點
// 但你還應該測試:FastMA=8-12, SlowMA=25-35 的全部組合
// 如果這些鄰近參數的表現都相近 → 策略穩健
// 如果只有 FastMA=10, SlowMA=30 有效 → 可能過度擬合
Monte Carlo 模擬
透過隨機打亂交易順序或加入隨機點差,測試策略在不同情境下的穩健性:
// 概念:將回測的交易結果隨機排列 1000 次
// 計算每次排列的最大回撤
// 如果 95% 的情況下最大回撤仍在可接受範圍 → 策略穩健
// MT5 策略測試器的「蒙地卡羅」選項可自動完成此分析
避免過度擬合的實踐原則
- 優化參數不超過 3–4 個
- Out-of-Sample 績效應達到 In-Sample 的 50% 以上
- 用不同品種、不同時間框架交叉驗證
- 優先選擇「穩健區域」參數,而非孤立的最優點
- 回測期間至少包含牛市、熊市與橫盤三種市場環境
本文由 James Lee 撰寫。內容僅供教育目的,不構成投資建議。