跳至主要內容
台股研究 約 9 分鐘閱讀

回測是什麼?2026 量化投資回測入門:怎麼做、有哪些陷阱(附台股實例)

回測是用歷史資料模擬一套交易策略過去的表現,在投入真錢前先評估報酬與風險。本文用台股實例講回測怎麼做、要看哪些數字(CAGR、最大回撤、夏普值)、為什麼會失真(過度擬合、生存者偏差、前視偏誤),以及一個被回測照出年化 -11.2% 的無效策略對照。

回測不是答案,是一面照妖鏡

回測是什麼?

回測,是把一套交易規則寫死、丟進過去的市場資料從頭跑一遍,看它在歷史上會賺多少、最慘賠多少,藉此在投入真錢之前先評估報酬與風險。

換個說法:你先把進出場規則講到電腦聽得懂——例如「每月初買進本益比最低的二十檔、跌破季線就出場」——再讓程式拿過去十年的台股資料,逐日照這套規則模擬,最後攤出一條淨值曲線,告訴你帳上是賺是賠、中間最深賠到哪裡。回測的價值不在「預測未來」,而在於把一個模糊的直覺,變成一條有報酬、有回撤、可以攤開來檢討的紀錄。它是評估策略的起點,不是終點,更不是保證書。

三十秒看懂回測

  • 回測 = 規則化 + 歷史模擬 + 讀指標。 把盤感寫成明確規則,用歷史資料跑,再讀年化報酬、最大回撤、夏普值等數字。
  • 回測最大的用途是「否證」。 它最值錢的時刻,往往不是證明某招會賺,而是照出某個聽起來很合理的直覺其實沒用——例如「外資賣超就反向買進」這種跟單法,攤開資料就站不住腳。
  • 漂亮的曲線最危險。 同一段資料,參數調到績效變好為止,總能變出誘人的線;過度擬合、生存者偏差、前視偏誤、沒扣成本,都會讓回測比實際樂觀。
  • 真實案例: FinLab 的法人策略回測裡,「逆向外資」這套直覺被回測照出年化報酬為 -11.2%(實際上虧錢),而換成「投信買超+營收動能」後,年化報酬拉到 31.68%、夏普值約 0.99——同一個回測引擎,照出一個無效、驗證一個有效。
  • 想看回測在整套方法裡的位置,從 pillar 文章量化交易是什麼讀起;名詞定義查詞彙表

回測在量化流程裡的定位

量化交易的骨架,簡化成一句話是:先有假設 → 把假設寫成規則 → 用回測驗證 → 小額實單 → 監控與汰換。 回測卡在「驗證」這一格,是把主觀想法擋在真金白銀之前的那道閘門。

它的作用,是把「我覺得這招會賺」這種無法討論的說法,翻譯成「攤開過去十年的資料,這套規則會這樣」的可檢驗陳述。一旦寫成回測,兩個人就不用再憑感覺吵——數字攤在桌上,有報酬、有回撤、有勝率,能對著同一份結果討論哪裡好、哪裡有問題。這也是為什麼量化研究的工作,有很大一部分時間其實花在反覆回測、推翻自己的假設,而不是在追逐單一爆紅標的。

要注意,回測只是流程的一格,不是全部。一套策略就算回測好看,後面還有實單滑價、資金容量、心理承受度等關卡。回測過不了,後面免談;回測過了,也只是拿到下一關的門票。想完整理解這套流程怎麼從選股一路接到下單,可參考程式交易是什麼台股選股方法總覽

回測怎麼做:三個步驟

回測聽起來高深,拆開其實就三步。

第一步,規則化。 把腦中的想法寫成明確、沒有模糊空間、可以重複執行的條件。「買強勢股」不是規則,因為「強勢」沒定義;「買近 60 日漲幅前 20 名、且月營收年增率大於 20% 的股票」才是規則。規則化的過程本身就有價值——很多直覺一旦被逼著寫精確,就會發現根本講不清楚,那它八成也不是個能執行的策略。

第二步,歷史模擬。 把規則餵進程式,讓它拿一段歷史資料逐日跑:今天符合條件的就買、不符合的就賣,扣掉手續費與證交稅,記錄每天的持倉與淨值。在 FinLab,這一步只要 pip install finlab 取得真實台股資料,再呼叫 sim() 就能把想法跑成一份完整的回測報告(sim() 預設已扣台股手續費與賣出 0.3% 證交稅,這點對結果影響不小,務必確認有算進去)。

第三步,讀指標。 模擬完會吐出一份報告,重點是讀懂裡面的數字、而不是只看年化報酬那一格。下一節細談要看哪些。

要看哪些數字

一份回測報告會給你一堆指標,學會讀它們,比記住任何單一策略都重要。下面四類是最低限度要看的:

指標 它在回答什麼 怎麼看(參考,非保證)
年化報酬(CAGR) 平均每年複利成長多少 看數字也要看穩不穩,單一暴衝年份會美化它
最大回撤(MDD) 從高點到低點最慘賠多少 決定你抱不抱得住,回撤越深越考驗人性
夏普值 / 索提諾值 每承擔一單位風險換到多少報酬 風險調整後的成績,比單看報酬公允(夏普值常見以 1 為一個分水嶺,但要連同回測區間一起看)
勝率與賺賠比 多常做對、做對時賺多少 高勝率不等於賺錢,要搭配賺賠比一起看

兩個容易踩的觀念坑:第一,報酬要配著回撤一起看。年化報酬亮眼、但最大回撤接近腰斬的策略,多數人實際上抱不住,半路就停損出場,根本領不到那個漂亮年化。第二,勝率高 ≠ 賺錢。一套勝率 70% 的策略,如果做對只小賺、做錯就大賠,長期照樣是輸的——這也是為什麼要把勝率和賺賠比綁在一起判讀。想更深入理解單筆交易的賺賠結構與停損停利怎麼影響整體績效,可參考 MAE / MFE 分析

還有一個重點:這些數字全是「過去」的描述,是參考,不是對未來的保證。 一條漂亮的回測曲線,只代表「如果歷史原封不動重演,這套規則會這樣」。歷史不會重演到那麼乾淨,所以回測的角色比較像體檢報告——告訴你這套策略的體質與弱點在哪,而不是替你蓋一張保證書。

多少算好?先別問這個

新手最常問「夏普值要多高才算好策略」,但這問題本身就埋著陷阱。在回測這件事上,比「數字多高」更該先問的是「這個數字可不可信」——因為一條看起來完美的曲線,太容易做出來了。

同一套資料,只要你不斷調參數試到績效變好為止,總能湊出一條誘人的線;參數調得越多、試得越久,做出漂亮回測的機率越高,但那條線跟未來的關係也越薄。學界對這件事有過嚴肅的量化分析:Bailey, Borwein, López de Prado & Zhu(2014) 在《Pseudo-Mathematics and Financial Charlatanism》一文指出,只要你在同一份資料上反覆試夠多組策略,光靠運氣就能挑出一條夏普值很高、但樣本外完全失效的回測——白話說,試的次數越多,那個「最好」的結果就越可能是噪音,而不是真本事。Harvey, Liu & Zhu(2016) 在《… and the Cross-Section of Expected Returns》進一步點出,學界與業界翻遍資料找出的「有效因子」多到不合理,很多是大量重複測試下的假陽性;他們主張,當你試過很多組設定,傳統的顯著門檻要拉得更嚴,否則你只是在向歷史資料的隨機波動致敬。

兩篇的共同結論很實用:真正決定回測可不可信的,不是那條曲線本身,而是你「為了找到它試了幾次」。 所以與其追問夏普值幾分才算好,不如先盤點:這個結果是第一次跑就有,還是調了五十組參數才湊出來的?這也是下兩節的主軸。

常見陷阱

回測會失真,幾乎都來自下面這幾類,每一個都會讓數字比實際樂觀:

  • 過度擬合(overfitting): 把策略調到剛好貼合歷史的每個轉折,看起來無懈可擊,其實是在背答案,換到沒看過的行情就原形畢露。這是上一節兩篇文獻講的核心問題。怎麼用機率角度判斷一條曲線是真有效還是運氣好,可讀回測過擬合機率
  • 生存者偏差(survivorship bias): 如果你的資料只剩「活到今天」的公司,那些下市、被清算、全額交割的股票早被剔除,你等於一開始就只在贏家堆裡挑,回測自然偏樂觀。嚴謹的回測要明確交代股票池怎麼定義、排除了哪些類別。
  • 前視偏誤(look-ahead bias): 用了當下根本還拿不到的未來資料。最典型的是財報與月營收——你必須用「公布日當天才可得」的資料來進場,而不是用財報期間結束就馬上拿到,否則回測等於開了天眼。
  • 沒扣交易成本: 手續費、證交稅、滑價一旦不計,高週轉策略的帳面報酬會被嚴重高估。台股賣出要扣 0.3% 證交稅,換股越頻繁,這筆成本吃掉的就越多。
  • 樣本太短: 只測了兩三年、剛好是一段多頭,很難分清是策略有效還是大盤抬轎。回測區間要夠長、最好跨過多空,結論才站得住。

盲點:怎麼不被自己的回測騙到

陷阱列得出來,難的是這些陷阱多半是「你騙自己」——是研究者在不知不覺中讓回測變好看,而不是別人來騙你。幾個實務上能降低自欺機率的習慣:

樣本內外切分。 把資料切成兩段:一段「樣本內」拿來調策略,另一段「樣本外」鎖起來,調完才拿出來驗收。如果一套策略在沒看過的樣本外資料一樣站得住,它是真本事的機率才高。誠實的做法是直接揭露「本文是全段 in-sample、未做樣本外」,而不是假裝嚴謹——很多 AI 量產的策略文,指標一堆、語氣很篤定,但完全不交代這件事。

控制你試了幾次。 呼應上面兩篇文獻:你在同一份資料上試過的參數組合越多,挑出來那個「最好」的越可能是運氣。少試、把假設想清楚再測,比暴力掃參數健康得多。想量化「試這麼多次、這個結果還能信幾分」,可看回測過擬合機率資訊係數 IC這類衡量因子預測力的方法。

壓低週轉、誠實算成本。 換股別太頻繁,否則手續費和證交稅會把帳面報酬吃掉一大塊;回測時把成本、甚至滑價加倍再測一次,看結論還在不在。

對「好到不像話」保持懷疑。 遇到年化高得離譜、回撤又淺的策略,第一反應該是「是不是哪裡偷看了未來資料」,而不是「我發財了」。多數高得反常的回測,問題出在前視偏誤或沒扣成本。

真實 finlab 台股實例:回測怎麼照出無效策略

講再多原理,不如看一個真的被回測照出來的例子。FinLab 的法人策略回測就示範了回測最有價值的一面——否證一個流行的直覺。

很多人相信「外資都在割韭菜,反著做就能賺」。這聽起來很合理,但合不合理不該用嘴吵,該丟進回測。那篇文章把「外資連續賣超就反向買進」寫成明確規則跑回測,結果這套逆向外資策略的年化報酬是 -11.2%——不是少賺,是實際上虧錢,夏普值只有 0.15。回測在這裡的作用不是幫你賺錢,而是幫你在賠真錢之前,先證明這個聽起來很順的直覺根本不成立。原因也很清楚:外資賣超只占當天成交的一小部分,又常來自匯率避險、ETF 被動調整等與基本面無關的理由,本身不帶可靠的方向資訊。

接著那篇文章換了個方向:跟著對台股研究更深、持股更集中的投信走。單純跟投信買超,年化報酬約 17.5%、夏普值約 0.6,已明顯優於逆向外資;再疊上「月營收創 12 個月新高、年增率大於 20%」的基本面篩選後,整體年化報酬拉到 31.68%、夏普值約 0.99、最大回撤約 -45%。

這個對照之所以值得記住,是因為它同時演示了本文的每一個重點:同一個回測引擎,照出一個無效策略(逆向外資)、驗證一個相對有效的策略(投信+營收);而那個有效策略也誠實揭露了最大回撤接近腰斬、未計滑價與容量、存在生存者偏差等限制——這正是一份不騙人的回測該有的樣子。數字怎麼算、Python 程式碼長什麼樣、風險怎麼揭露,完整版都在法人策略回測

想再看更多用真實台股資料跑回測的範例,可參考多因子選股打敗 0050三因子模型分析融資維持率擇時肯特納通道等策略文,每一篇的數字都附可下載程式碼,自己就能重現。

常見問題(FAQ)

回測是什麼?

回測是用歷史資料模擬一套交易策略過去的表現,在投入真錢之前,先評估它的報酬與風險。它把模糊的盤感變成一條可檢討的淨值曲線,最大的用途之一是「否證」——照出某個聽起來合理的直覺其實沒用。

回測怎麼做?

三步:先把進出場規則寫成明確、可重複的條件;再餵進一段歷史資料讓程式逐日模擬、扣掉手續費與證交稅;最後讀年化報酬、最大回撤、夏普值、勝率等指標。在 FinLab 用 pip install finlab 取得真實台股資料、呼叫 sim() 就能跑出一份回測報告。

回測要看哪些數字?

至少四類:年化報酬(CAGR)看長期成長、最大回撤(MDD)看你抱不抱得住、夏普值看風險調整後的效率、勝率搭配賺賠比看交易結構。重點是配著一起看——光看年化報酬最容易被誤導。

回測績效好就代表未來會賺嗎?

不代表。回測只描述過去,是參考而非保證。一條漂亮曲線很可能是過度擬合、生存者偏差或前視偏誤的產物。要先排除這些陷阱、用樣本外資料檢驗、再小額起步,才比較踏實。

什麼是過度擬合?為什麼這麼危險?

過度擬合是把參數調到剛好貼合歷史、等於在背答案。Bailey, Borwein, López de Prado & Zhu(2014)指出,只要在同一份資料上試夠多組策略,光靠運氣就能挑出一條夏普值很高、樣本外卻失效的回測。試的次數越多,那個「最好」的結果越可能是噪音。

怎麼判斷一份回測可不可信?

先問它「為了找到這個結果試了幾次」。第一次跑就有,比調五十組參數才湊出來可信得多。再看它有沒有做樣本內外切分、有沒有誠實扣成本、回測區間夠不夠長、有沒有交代排除哪些股票(生存者偏差)。Harvey, Liu & Zhu(2016)提醒,試得越多,可信的門檻就要拉得越嚴。

為什麼一定要扣交易成本?

台股賣出要扣 0.3% 證交稅,加上手續費與可能的滑價,換股越頻繁、成本吃掉的報酬越多。不扣成本的回測會嚴重高估高週轉策略;FinLab 的 sim() 預設已含手續費與證交稅,但你要確認有把它算進去、別只看未扣成本的數字。

回測過了就可以直接上實單嗎?

不建議。回測只是流程的一格,過了只是拿到下一關門票。後面還有實單滑價、資金容量、心理承受度等關卡。實務上會先小額實單跑一段、確認回測與實際落差可接受,再逐步加碼,而不是看到漂亮回測就重押。關於回測與實盤之間為什麼會有落差、又該如何縮小,可進一步參考回測的局限與實盤落差


投資有風險,過去績效不代表未來表現。本文所引用之回測數字(年化報酬 -11.2%、31.68% 等)皆出自 FinLab 既有公開文章之台股回測,附可下載程式碼可自行重現;本內容僅供教學參考,不構成投資建議,請依個人風險承受度審慎評估。

最後更新:2026-06|作者:FinLab 量化研究團隊

FinLab AI

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始

更多教學與觀念研究

查看全部