重點摘要:
- 「前行測試」(Walk-forward testing)用從未用過的數據驗證交易策略,而不只看策略為配合歷史數據而調校過的表現。
- 方法會把數據分為「樣本內」(in-sample,用作優化)及「樣本外」(out-of-sample,用作驗證),再按時間向前推進反覆測試。
- 重點是及早揭示「過度擬合」(overfitting/curve fitting,即策略只貼合過去噪音,未必可重複的規律),避免投入真實資金後失效。
- 「前行效率」(Walk-forward efficiency)把結果化為單一指標,用來衡量樣本內的優勢在近似實盤環境下能保留多少。
不少交易者都會遇過:策略在歷史數據看似完美,一到實盤就失靈。原因通常是策略為迎合過去走勢而調得太細,記住了「雜訊」(noise,指價格中的隨機波動),而不是捕捉真正的市場規律。
前行測試就是用來及早發現這個問題:先用一段數據優化規則,再用較後、未見過的數據測試,重複進行。
本文逐步介紹實用的前行測試策略做法,協助你在投入資金前更有把握地驗證想法。
前行測試(Walk-Forward Testing)解釋

前行測試是一種「驗證方法」(validation method,即用另一段資料檢查策略是否可靠),模擬策略隨時間調整的過程。它不會把全部歷史一次過優化,而是分階段優化;每一階段再用模型未見過的新數據測試。
樣本內(In-Sample)與樣本外(Out-Of-Sample)數據
每次前行測試都依賴兩段數據:樣本內數據用來找出較佳設定;樣本外數據會保留起來,只用於檢查這些設定是否仍然有效,可理解為「練習」與「正式考試」。
- 樣本內:用來練習與調校的資料。
- 樣本外:未見過、用來驗證的資料。
- 只在樣本內發光的策略,往往只是背熟答案。
單看樣本內表現意義不大;真正反映優勢是否存在的是樣本外表現(out-of-sample performance,即在未見過數據上的績效)。
優化窗口如何向前滾動
「前行」指測試會向時間前推:先用較早的一段歷史數據優化,然後用下一段數據測試;之後把整個窗口向前移,再重複。
多個樣本外結果會連接成一條完整紀錄,較能反映市場環境變化下策略的承受力,而不是只在某一段期間「剛好吻合」。
前行測試要解決的問題:過度擬合(Overfitting)與曲線擬合(Curve Fitting)
前行測試的核心用途是揭示過度擬合(overfitting,也常被稱為曲線擬合/curve fitting;意思是策略過度貼合歷史價格,捕捉到隨機波動而非可重複的模式)。常見警號包括:
- 參數(parameters,即策略可調校的設定)數量過多,而且調得太細
- 回測(backtest,即用歷史數據模擬交易)回報驚人、幾乎沒有虧損交易
- 一有新數據,表現即急跌
曲線擬合的策略在測試環境像「天才」,到真實市場卻可能失控。前行測試迫使規則在未曾用作優化的數據上自證。
前行測試運作步驟
前行測試可以視為循環流程,每次循環有四個步驟;理解一次,就能套用到後續所有時間段。
1. 把數據分為優化段與測試段
先把歷史數據(historical data,即過去的價格與成交等資料)切成多段。每段包含較長的優化區間,以及較短的測試區間。
- 每個窗口約 70% 至 80% 作樣本內優化
- 其餘 20% 至 30% 作樣本外測試
例子:用 12 個月數據優化,再用之後 3 個月測試。比例取決於策略特性與數據量。
2. 在樣本內窗口優化參數
只在樣本內數據進行參數優化(parameter optimisation,即嘗試不同設定組合以找出較佳方案)。軟件會測試不同設定,例如移動平均線(moving average,用一段期間的平均價格平滑波動)的周期長短,或止蝕距離(stop distance,即觸發止蝕的價格距離)。
目標不是追求最高回報,而是找出穩定、合理的參數範圍,避免只在某個狹窄時段才有效的極端設定。
3. 用未見過的樣本外窗口驗證
把選定設定套用到樣本外數據;此步驟不再重新優化,只按規則向前跑,當作接近實盤的模擬。
這一步最關鍵:若策略在從未接觸的數據仍表現良好,代表優勢較可信;若明顯失靈,樣本內成績可能只是幻象。
4. 把窗口向前推進並重複
把整個窗口向前移,再重複所有步驟。每次都用新的樣本內數據優化,並在下一段未見過的數據驗證。以下示例以 12 個月優化、3 個月測試:
| Run | 樣本內(優化) | 樣本外(測試) |
| Run 1 | 2023年1月–12月 | 2024年1月–3月 |
| Run 2 | 2023年4月–2024年3月 | 2024年4月–6月 |
| Run 3 | 2023年7月–2024年6月 | 2024年7月–9月 |
| Run 4 | 2023年10月–2024年9月 | 2024年10月–12月 |
把多段樣本外結果連接起來,就得到一條連續、未見過數據的表現紀錄。
固定起點(Anchored)與滾動窗口(Rolling)的前行分析
窗口向前推進主要有兩種做法,選擇取決於策略如何受市場環境變化影響。
1. 固定起點(Anchored)前行:起始日期不變
固定起點前行(anchored walk-forward)會固定起始日期,只把樣本內窗口的結束日期向前移,令優化資料逐步增加,較適合需要「長記憶」的策略。
- 每一步都使用更多歷史數據。
- 假設較舊數據仍有參考價值。
- 適合偏慢、偏結構性的策略(structural strategies,即依賴較長期市場特徵的策略)。
缺點是過舊數據可能稀釋近期更相關環境的影響。
2. 滾動窗口(Rolling)前行:窗口長度固定
滾動前行(rolling walk-forward)使用固定長度窗口向前滑動;新數據加入,同時剔除最舊數據。
- 優化更集中在近期環境。
- 更快適應波幅(volatility,即價格上落幅度)與趨勢變化。
- 適合較短線、反應較快的系統。
由於不保留很久以前的資料,遇到「市況轉換」(regime change,即市場特性轉變)反應更快,但每次結果之間的波動可能更大。
如何選擇固定起點或滾動窗口
兩者沒有絕對優劣,取決於策略週期及你對舊數據的信任程度。
| 特點 | 固定起點前行 | 滾動前行 |
| 起始日期 | 固定 | 向前移 |
| 使用數據 | 每次增加 | 長度固定 |
| 較適合 | 長線、結構性系統 | 短線、適應型系統 |
| 主要風險 | 舊數據稀釋訊號 | 遺忘有用歷史 |
前行效率(Walk-Forward Efficiency)與解讀結果

完成多次測試後,需要方法評估。最常用的單一指標是前行效率(walk-forward efficiency),把多段結果化為可比較的數字,便於不同策略之間對照。
計算前行效率
前行效率比較樣本外與樣本內表現,公式如下:
前行效率 =(樣本外回報 ÷ 樣本內回報)× 100
例如(以年化回報計,annualised return 即把回報換算成每年水平):
- 樣本內回報:40%
- 樣本外回報:24%
前行效率 =(24 ÷ 40)× 100 = 60%
60%代表樣本外大約保留了樣本內成績的六成;越接近 100%,代表優勢越能在近似實盤環境保留。
配合資金曲線(Equity Curve)與回撤(Drawdown)檢查
單一數字不足以概括策略質素,應同時看其他指標:
- 連接後的資金曲線(equity curve,即帳戶資金隨時間的變化),理想是穩步上升,而非一次爆升。
- 最大回撤(maximum drawdown,即由高位到低位的最大跌幅,用來量度最差虧損期)。
- 每次測試結果是否一致,而非只看平均值。
即使前行效率不錯,但回撤過大仍可能難以承受;穩定性往往比單一亮眼數字更重要。
如何設置前行測試
設置前行測試的關鍵是事前選擇:窗口長度、測試次數、使用平台。
1. 設定樣本內與樣本外期間長度
窗口長度要配合交易頻率。每日交易的系統,每個窗口可用較短數據;每月只交易幾次的系統需要更長窗口。常見做法:
- 樣本內:樣本外約 3:1 或 4:1。
- 樣本外要有足夠交易次數,才有代表性。
- 窗口要涵蓋不同市況。
2. 決定前行測試次數
次數越多,樣本外證據越多,一般較好。可參考:
- 數據許可下,至少做 8 至 10 次。
- 每段樣本外要有具意義的交易數目。
- 整體涵蓋趨勢市與橫行市(ranging market,即價格在區間內上落)。
3. 在 MT5、Python 與 Amibroker 進行前行優化
多個工具可直接支援前行優化:
- MetaTrader 5(MT5)內置策略測試器(Strategy Tester),支援前行模式,用於EA(Expert Advisor,自動交易程式)。
- MetaTrader 4(MT4)可分段優化,但需要較多手動管理窗口。
- Python可用程式自訂前行測試循環。
- Amibroker提供前行功能,可自動滾動窗口。
若使用VT Markets等經紀商,可在 MT4 及 MT5 先測試演算法交易系統(algorithmic trading systems,即按程式規則自動下單的系統),再投入實盤。
前行測試與相關方法比較
把前行測試與其他驗證方法對照,有助更清楚每種方法在檢查什麼。
1. 前行測試 vs 一般回測(Backtesting)
回測(backtest)往往在同一段歷史數據同時「優化」與「測試」,過度擬合更容易被掩蓋。前行測試把兩者分開,並用未見過數據驗證。
- 回測:這些設定在這段歷史會如何?
- 前行測試:這些設定在未用來調校的數據會如何?
後者更接近實盤,因此可信度通常較高。
2. 前行測試 vs 交叉驗證(Cross-Validation)
交叉驗證常見於機器學習(machine learning,即讓電腦由數據中學習規律)。它把數據分成多份輪流測試,主要差異在「時間順序」。
- 交叉驗證可能會打亂數據,忽略時間先後。
- 前行測試保留時間順序。
金融市場非常重視時間先後;用「未來」資料去測「過去」不合理,因此前行測試通常更貼近現實。
3. 前行測試 vs 單次樣本外測試
單次樣本外測試只保留一段近期數據作驗證,雖比沒有好,但只覆蓋一個時段。前行測試的改進在於:
- 測多段樣本外數據。
- 涵蓋多種市場環境。
- 降低單一「幸運時段」令結果變好看的機會。
樣本外證據越多,越能減少之後的意外。
可靠性、限制與常見錯誤
前行測試很有用,但不能預知未來。了解限制,有助由測試過渡到真實資金時保持務實。
前行測試可以與不可以確認什麼
前行測試可以確認策略邏輯在未見過的歷史數據是否仍有效,但不能保證未來一定盈利。
- 即使未見過,仍然是過去數據。
- 市場可能進入歷史未出現的新環境。
- 滑點(slippage,即實際成交價與預期價的差距)與點差(spread,即買入價與賣出價的差距)等成本會蠶食回報。
前行結果強,只代表證據較好,不是承諾。
設定窗口與解讀結果的常見錯誤
常見問題多來自設定不當或過度解讀。以下做法會令測試失真:
- 窗口太短,交易次數不足。
- 看到樣本外結果後再重新優化,令驗證失去意義。
- 測試時忽略交易成本(包括點差、佣金、隔夜利息等)。
- 只看平均回報,不看回撤與一致性。
- 只挑最好看的那一段結果。
嚴謹的前行測試,是如實接納結果。
常見問題(FAQs)
Q1:什麼是前行測試(Walk-Forward Testing)?
前行測試是一種驗證方法:先用一段歷史數據優化交易策略,再用之後、未見過的數據測試。窗口按時間向前移並重複,可更貼近實盤環境下的表現。
Q2:固定起點(Anchored)與滾動窗口(Rolling)前行分析有何分別?
固定起點前行會固定起始日期,樣本內窗口逐步增大;滾動前行則使用固定長度窗口向前移,加入新數據並剔除舊數據。固定起點較適合長線系統;滾動窗口較快反映近期環境。
Q3:如何選擇樣本內與樣本外期間?
按策略交易頻率設定。常見起點是樣本內:樣本外約 3:1 或 4:1;每段樣本外需有足夠交易次數才有參考價值。
Q4:前行測試與回測有何分別?
一般回測常在同一段數據同時優化與測試,容易忽略過度擬合;前行測試會用未用作調校的數據驗證,結果通常更接近實盤。
使用 VT Markets 練習前行測試
一套策略要值得用真實資金交易,必須在未見過的數據下仍能站得住腳;這正是前行測試的用途,讓你用證據取代猜測。
能長期生存的交易者會用未見過數據驗證,理解方法限制,不把漂亮回測當成保證。建立這個習慣,之後每個策略都會受益。
透過VT Markets,你可在MetaTrader 4(MT4)及MetaTrader 5(MT5)運行你的前行測試策略,以接近真實市場的條件、較快成交速度,以及交易工具輔助決策。