關閉選單

回測賺翻了實盤卻不行?四個把回測變成幻覺的陷阱

10 秒看懂

回測是把策略規則套到歷史資料上跑一遍。問題是只要願意調,任何策略都能在歷史上印鈔票,而那通常只是在玩統計。

我們用美股三十三年的資料做了四個實驗,結果很難看:調參數調出來的「最佳」,樣本內排名第一、樣本外掉到第 35;而純亂猜一千次挑出來的冠軍,成績比精心調出來的還漂亮。

這篇拆解四個把回測變成幻覺的陷阱:過度最佳化、資料窺探、濾網、滑價,每一個都用實測數字說明,最後附一份回測可信度檢查表。

先說結論。你該問的不是「我的回測好不好看」,而是「這東西能不能在真實市場的雜訊裡活下來」。這兩個問題的答案,經常是相反的。

陷阱一:調出來的最佳參數,對未來沒有預測力

最常見的做法是這樣:寫一個雙均線交叉策略,然後把快線與慢線的參數掃一遍,找出歷史上表現最好的那組。

我們照做。用美股大盤 SPY 的資料,掃 49 組參數組合,把 1993 到 2009 年當作樣本內(拿來挑參數),2010 到 2026 年當作樣本外(假裝是未來,拿來驗證)。

49 組均線參數的樣本內與樣本外夏普散點圖,兩者相關係數僅 0.119
每個點是一組均線參數。橫軸是樣本內的夏普比率,縱軸是樣本外的。如果調參數有用,這些點應該排成一條由左下往右上的斜線。

結果:

  • 樣本內最佳是 50/200 均線,夏普 0.806,49 組裡排名第一。看起來像個好發現。
  • 同一組參數放到樣本外,夏普掉到 0.611,排名第 35。也就是說,你精挑細選的那組參數,在後面十六年的表現落在後段班。
  • 樣本內夏普與樣本外夏普的相關係數只有 0.119。這是整個實驗最關鍵的數字:你在歷史上調出來的好壞排序,跟未來的好壞排序幾乎沒有關係。

更刺眼的是對照組:同期買進持有的年化報酬,樣本內 7.59%、樣本外 13.99%你花了大把力氣調參數,成果連躺著不動都比不上。這跟我們在200 日均線 26 年實測看到的是同一件事。

為什麼會這樣?因為你調的不是策略的真本事,是歷史資料裡的雜訊。同一段歷史只有一份,你在上面試越多組合,就越容易挑到剛好貼合那份雜訊的參數。這種現象叫過度最佳化(Overfitting),也有人叫它曲線擬合

陷阱二:測夠多次,亂猜也能挖到寶

上一個實驗還算客氣,畢竟均線交叉多少有點邏輯。這個實驗更狠:我們生成一千個完全隨機的策略,進出場訊號用亂數決定,沒有任何邏輯可言。

然後在同一段樣本內資料上,挑出表現最好的那個。

一千個隨機策略的樣本內夏普分布,最佳者 0.816,比精心調參數的 0.806 還高
一千個隨機策略的樣本內夏普分布。中位數 0.284,但最右邊那個冠軍是 0.816。
策略 樣本內夏普
買進持有 0.382
精心調參數的「最佳」均線 0.806
純亂猜一千次的冠軍 0.816

亂猜出來的冠軍,成績比你辛苦調參數的結果還好一點點。它的年化報酬 12.28%、最大跌幅 −27.8%,攤開來看像模像樣,但它百分之百是運氣,因為訊號是亂數產生的,裡面沒有半點邏輯。

這就是資料窺探(Data Snooping):只要你在同一份資料上試夠多次,總會有幾次看起來很棒。而回測軟體讓「試很多次」變得非常廉價,一個下午就能試上千次。

怎麼防?如實記錄你總共試了幾個版本。如果你試了一百個才挑出這一個,那它的成績要打的折扣,比你只試三個時大得多。這跟挑起算日是同一類的問題:選擇的自由度越高,結果越不可信。

陷阱三:每加一層濾網,可信度就少一半

第三個陷阱最隱蔽,因為它每一步看起來都很合理:策略跑得不夠好,那就加個條件過濾掉不好的訊號。

我們拿最單純的「站上 200 日均線就持有」當基礎,然後準備 15 個候選濾網(波動門檻、動能方向、RSI 高低、避開某個月份、避開某個星期幾),每一輪都挑樣本內表現最好的那個加上去,連加三層。這正是很多人優化策略的實際過程。

每加一層濾網,樣本內夏普從 0.596 升到 0.837,樣本外從 0.800 降到 0.658,交易次數從 107 暴增到 1139
兩條線交叉的地方,就是策略從「有用」變成「好看」的分界。淡金色長條是全期間的交易次數。
樣本內夏普 樣本外夏普 交易次數
基礎策略(站上 200 日均線) 0.596 0.800 107
+ 60 日動能為正 0.691 0.780 162
+ 避開週一 0.792 0.730 1,139
+ 波動低於第 70 百分位 0.837 0.658 923

樣本內夏普從 0.596 一路爬到 0.837,進步 40%。同一時間,樣本外從 0.800 掉到 0.658,退步 18%

特別注意第二層被選中的濾網:「避開週一」。這條規則沒有任何經濟意義,純粹是那段歷史裡的雜訊,但它讓樣本內數字變好看,所以貪婪演算法就選了它。而且它讓交易次數從 162 暴增到 1,139,這在下一節會要命。

一位專職做系統交易的基金經理人講過一句很好記的經驗法則:「濾網會讓你的可信度減半、跌幅加倍。」因為每加一層濾網,符合條件的樣本就變少,你的統計基礎跟著變薄;同時你又多用掉一次「在資料上做選擇」的機會。策略該有的是機制(進場、出場、部位大小、風險控制),不是一堆濾網。

陷阱四:滑價與成本,回測裡最常被省略的那一項

滑價(Slippage)的定義很簡單:你預期的成交價,跟實際成交價之間的差。回測裡通常假設你用收盤價買到,實務上你買到的是掛單簿上真正有人賣的價格,中間永遠有落差。

這一項最容易被忽略,因為在低換手的策略上它幾乎不痛。但換手率一高,它會直接把策略殺死:

三種換手率的策略在不同滑價下的年化報酬,高換手策略從 2.48% 掉到 -20.3%
同樣的 SPY 資料、同樣的三十三年,只改變每筆交易的成本假設。1 基點等於 0.01%。
策略 交易次數 零成本 10 基點 50 基點
站上 200 日均線 107 8.38% 7.69% 4.95%
20/60 均線交叉 73 6.19% 5.72% 3.88%
五日動能翻多 840 2.48% −2.53% −20.3%

高換手那個策略,在零成本的回測裡年化 2.48%,只要加上 10 基點(0.1%)的成本就變成 −2.53%。而 10 基點在真實世界是很客氣的假設。

這裡有一個很實用的判斷法:把你的策略年化報酬除以年交易次數,看看每筆交易平均要賺多少。如果這個數字接近或小於你的來回成本,那這個策略在真實世界不成立,不管回測多漂亮。順帶一提,這也是為什麼再平衡不該做太頻繁。

四個陷阱疊起來的下場

把前面的東西合起來看。我們拿第三節那個「三層濾網優化版」,加上第四節的滑價,然後看它在樣本外(2010 年之後)的真實表現:

每筆成本 基礎策略 三層濾網優化版
零成本(回測預設) 9.52% 5.53%
5 基點 9.21% 2.16%
10 基點 8.91% −1.10%
25 基點 8.02% −10.28%

而同期買進持有是 +13.99%

整條路徑是這樣的:你為了讓回測好看,加了三層濾網(樣本內夏普 +40%);濾網讓交易次數暴增;交易次數乘上滑價,把報酬啃光。最後你得到一個在歷史上閃閃發亮、在未來每年虧 1% 的系統,而它的對照組是什麼都不做。

讓回測可信的六個做法

  • 先切樣本外,而且切完就不准偷看。把資料分成兩段,只在前段調整策略。等你完全定案,才在後段跑一次。只跑一次是重點:如果你看了後段結果不滿意又回頭改,那後段就變成樣本內了,這個保護就失效了。
  • 如實記錄你試了幾個版本。不是記錄最後留下的那個,是記錄你總共試過幾個。試了一百次才找到的漂亮結果,跟第一次就跑出來的漂亮結果,可信度差非常多。
  • 先問邏輯,再看數字。每一條規則都要能講出「市場上為什麼會有這個現象」。像「避開週一」這種講不出理由的,就算讓數字變好看也要拿掉。講不出邏輯的規則,本質上就是雜訊。
  • 成本假設要抓得比你以為的高。把手續費、買賣價差、滑價都放進去,而且抓保守一點。如果策略在保守成本假設下就不成立,那它在真實世界更不會成立。
  • 檢查樣本數夠不夠。一個只交易過 20 次的策略,就算勝率 80% 也證明不了什麼。這跟勝率的迷思那篇談的是同一件事:次數太少時,好成績跟運氣分不開。
  • 看它有沒有經歷過壞天氣。只在多頭年份跑過的回測會系統性高估。至少要涵蓋一次像樣的空頭(2000、2008、2020、2022 都算),看它在裡面是怎麼活下來的。
還有一個心態上的提醒,來自一位做系統交易的基金經理人:多數人問的是「我的策略什麼時候死掉」,但更該問的是「它有沒有活過」。一個從來沒有真正存在過的優勢,你不需要等它失效,因為它一開始就不在。

回測可信度檢查表

把你手上那個回測拿出來,逐條勾選。

回測可信度檢查表

勾選你的回測確實做到的項目。分數只是參考,重點是看清楚缺了哪一塊。







可信度分數
缺少的關鍵項目
假設:分數是把八個項目加權相加,權重依它們對結論的殺傷力排序(樣本外、未來資訊、成本三項權重最高)。這是一份自我檢查用的清單,不是統計檢定,通過不代表策略一定有效,只代表最常見的幾個坑你避開了。

常見問題

過度最佳化是什麼?怎麼判斷自己有沒有?

指參數調到剛好貼合歷史資料裡的雜訊,而不是真正的規律。最直接的判斷方法是把資料切成兩段,只在前段調參數,然後在後段驗證一次。實測 49 組均線參數:樣本內夏普與樣本外夏普的相關係數只有 0.119,也就是歷史上的好壞排序對未來幾乎沒有預測力。另一個徵兆是參數稍微動一下績效就崩掉。

為什麼隨機策略也能跑出好成績?

因為同一份歷史資料只有一份,你在上面試越多次,就越可能有幾次剛好對上。實測一千個純隨機策略,最好的那個樣本內夏普 0.816、年化 12.28%,比精心調參數的 0.806 還高,但它百分之百是運氣。這叫資料窺探,防範方法是如實記錄總共試了幾個版本。

加濾網不是可以過濾掉不好的訊號嗎?

理論上是,實務上多半不是。實測用貪婪法逐層挑濾網:樣本內夏普從 0.596 升到 0.837(+40%),樣本外卻從 0.800 掉到 0.658(−18%),而且被選中的其中一條是「避開週一」這種沒有任何經濟意義的規則。有一句好記的經驗法則:濾網會讓可信度減半、跌幅加倍。

滑價要抓多少才合理?

沒有單一答案,取決於標的流動性、單量大小與下單方式,但關鍵不是抓多準,是要抓得夠保守。實測顯示,一個交易 840 次的策略在零成本回測下年化 2.48%,加上 10 基點就變成 −2.53%。實用的判斷法是把年化報酬除以年交易次數,看每筆平均要賺多少,如果接近來回成本,這個策略在真實世界就不成立。

回測要跑多長的期間才夠?

比起長度,更該看兩件事:交易次數與市場環境。次數太少時好成績跟運氣分不開,一般至少要 100 次以上。環境上要涵蓋至少一次像樣的空頭,因為只在多頭年份跑過的回測會系統性高估。一個只在 2010 到 2021 年跑過的策略,等於沒被真正考驗過。

前視偏差是什麼?

指回測用到了在當下還取得不到的資訊。常見的例子有:用當天收盤價決定當天買進、用還沒公布的財報數字選股、用事後修正過的資料。它的殺傷力很大而且很難察覺,因為程式不會報錯,只會給你一份好得不像話的績效。檢查方法是逐條問:這個數字在我下單的那一刻,真的已經知道了嗎?

林修禾 Joshua Lin

本文作者|林修禾 Joshua Lin

投資與教學資歷都超過二十年。教學橫跨三個階段:從兒童理財教育起步,到成人的價值投資,再到近年的量化交易。曾創立三間公司,並以價值投資建立起財務上的獨立與自信,也擔任過台積電的理財培訓師,是價值投資的國際級講師。他始終相信,理財是為了把生活過得更好,而看懂財報、獨立思考,遠比追逐明牌或現成的答案更重要。

延伸閱讀

計算設定:全部使用 SPY 1993 年 1 月至 2026 年 7 月的日收盤含息調整價,樣本內為 1993 至 2009 年、樣本外為 2010 至 2026 年。訊號一律隔日執行以避免前視偏差。夏普比率以年化報酬除以年化波動計算,未扣無風險利率。參數實驗掃描快線 5 至 50 日、慢線 60 至 250 日共 49 組有效組合。隨機策略實驗生成 1,000 組獨立亂數訊號,在市比例設為 55%。濾網實驗自 15 個候選濾網中以樣本內夏普貪婪挑選三層。成本以每次進出各扣指定基點計算。交易次數為進出成對計數。歷史數據不代表未來,本文為教學內容,非投資建議,文中標的僅為統計說明,不構成任何買賣推薦。