EA 優化完整指南:Walk-Forward Analysis 與防止過度擬合

📌 本文重點
深入學習 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 撰寫。內容僅供教育目的,不構成投資建議。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *