20 min read

回測是什麼?股票回測入門與 6 個坑:我用 AI 回測台股 373 次踩過的

回測是什麼?就是把交易規則丟回歷史資料模擬,看它過去會不會賺錢。白話講股票回測怎麼做、要看哪些數字,以及我用 AI 回測台股 373 次踩過的 6 個坑,附可照抄的 AI 回測指令。
回測是什麼?股票回測入門與 6 個坑:我用 AI 回測台股 373 次踩過的

我曾經回測出一個台積電的策略,每筆交易的勝率 84%。

十筆有八筆是賺的,聽起來很厲害吧😎

結果仔細一看,裡面有一個專做短線的子策略,每筆平均毛賺 0.28%,但台股買賣一趟的手續費加證交稅是 0.585%。扣完之後,這個子策略每一筆平均其實虧 0.3%。那個 84% 的勝率,是一堆「小贏、但付不起成本」的交易堆出來的假象。

這就是回測最迷人、也最危險的地方:它很容易做出一個好看但假的數字。

TL;DR:回測(backtesting)就是把一套買賣規則,丟回過去的歷史資料裡模擬一遍,看它在過去會不會賺錢。 它能幫你在花真錢之前,先淘汰掉沒用的策略。但回測很容易騙人,最常見的 6 個坑是:沒算交易成本、偷看未來的資料(前視偏差)、只用還活著的股票(倖存者偏差)、資料本身有錯、過度擬合、修了 bug 沒重跑。我用 Claude Code 搭配 FinMind 資料,在台股登記了 188 個假設、跑了 373 次回測,這 6 個坑我全部踩過。

這篇會聊這些:

  • 回測是什麼?用白話講
  • 回測怎麼做:5 個步驟、要看哪些數字
  • 股票回測的 6 個坑(每個都附我自己踩過的例子)
  • 不會寫程式,怎麼用 AI 回測台股(附指令)
  • 股票回測工具有哪些
  • 常見問題
關於作者:我是工程師阿穆,寫程式十多年,這幾年在做 AI Agent 與自動化系統。這篇的例子全部來自我自己的台股研究專案,回測程式是我用 Claude Code 寫的,研究紀錄都有版本控制。

免責:本文數字全部是歷史回測,不代表未來表現,也不是投資建議。我不會公開自己的實盤本金、報酬與參數設定。

回測是什麼?

回測(backtesting)就是把一套交易規則套用到過去的歷史資料上模擬,算出它在過去的報酬、虧損和交易次數。 白話講,就是「用歷史資料考模擬考」。

想像你準備考學測,手上有過去十年的考古題。你會先拿考古題寫寫看,看自己的讀書方法考得怎麼樣,而不是直接上考場賭一把。

回測也是一樣:你有一個交易想法,例如「股價站上 200 日線就買、跌破就賣」,就把這條規則丟回過去十年的股價裡,假裝自己每一天都照著規則操作,最後算算看賺了多少、最慘的時候虧了多少。

所以回測回答的問題是:

如果我過去一直照這套規則做,結果會怎樣?

它不能回答「未來會不會賺」。考古題考得好,不代表正式考試一定考得好;但考古題考得很爛的讀書方法,大概也不用帶上考場了。回測最大的用處,是幫你便宜地淘汰掉爛策略。

新聞裡的「回測季線」是另一個意思

如果你是在新聞上看到「台股回測季線」「回測 47K」,那個「回測」是另一個意思:股價跌回去測試某條支撐線,例如季線(60 日均線)或某個整數關卡,看它守不守得住。

用法 意思 例句
回測(backtesting) 用歷史資料模擬一套交易規則 「這個策略回測 10 年,年化 8%」
回測(價格) 股價跌回某條線,測試支撐 「外資大賣,台股回測季線」

這篇講的是第一種。

回測怎麼做?5 個步驟

回測的流程是:把規則寫死、準備資料、逐日模擬交易、扣掉成本、看結果指標。 用我做過的台積電網格交易回測當例子:

  1. 把規則寫死:每跌 1% 買一批、那一批漲 1% 就賣,最多 20 批。規則要寫到「電腦能照做、不需要你判斷」的程度
  2. 準備資料:台積電 2020-01 到 2026-06 的每日收盤價,來源是 FinMind
  3. 逐日模擬:從第一天開始,每天檢查規則,該買就買、該賣就賣,記下每一筆交易
  4. 扣掉成本:手續費、證交稅一筆都不能少(後面會講為什麼這是第一大坑)
  5. 看結果:報酬多少、最慘虧多少、跟「直接買進放著」比起來如何

那次回測的結論是:78 個月裡 77 個月有收入,總報酬 +41%,但同期間直接買進持有是 +611%。現金流很穩,但遠遠輸給什麼都不做。 沒有回測的話,我可能就靠「每個月都有錢進來」的感覺,一直用下去了。

回測要看哪些數字?

指標 意思 為什麼重要
年化報酬(CAGR) 平均每年賺幾 % 最基本,但只看它會被騙
最大回撤(MDD) 從最高點到最低點,最慘虧掉幾 % 決定你撐不撐得住。−62% 代表 100 萬一度只剩 38 萬
勝率 賺錢的交易佔幾成 很容易誤導,開頭那個 84% 就是例子
每筆期望值 扣成本後,平均每筆賺多少 比勝率誠實得多
對照組 跟買進持有、或隨機進場比 沒有對照組的報酬沒有意義

最大回撤這個數字,我在期貨槓桿回測那篇有實際體會:同一個策略開到 3.6 倍槓桿,年化從 +7.3% 變 +17.3%,最大回撤卻從 −22% 變成 −62%。報酬翻倍,但你很可能在 −62% 那天就砍在最低點了。

股票回測的 6 個坑(我都踩過)

股票回測最常見的 6 個坑是:沒算交易成本、偷看未來的資料、只用還活著的股票、資料本身有錯、過度擬合、修了 bug 沒重跑。 這 6 個坑每一個我都有真實的紀錄,順序大致是「越前面越常見」。

坑 1:沒算交易成本

台股買一趟、賣一趟的成本是:

項目 費率
手續費(買) 0.1425%
手續費(賣) 0.1425%
證交稅(賣出時收) 0.3%
來回合計(無折扣) 0.585%

0.585% 看起來很小,但如果你的策略每筆只想賺 1%、2%,成本就吃掉了一大半。

開頭那個 84% 勝率的策略就是這樣露餡的:裡面那個短線子策略目標只抓 +1.5%,毛賺 +0.28%/筆,扣完成本變成 −0.3%/筆,整池是虧的。後來把它改成目標 +6% 的波段,整套策略的每筆勝率掉到 73%,但每一池都真的有賺。勝率下降,才是還原真相。

期貨也一樣。我測過台指期「開盤區間突破」:開盤後 60 分鐘的區間被突破就順勢進場。扣成本前它是真的有效,毛報酬的 t 值有 5.29,每筆平均賺 4.1 點。但一趟來回的成本,微台約 5.4 點、小台約 3.4 點。140 種變化,扣完成本沒有一個是正的(用微台成本算)。

教訓:越短線的策略,越要先算成本。 很多網路上的回測截圖沒寫有沒有扣成本,看到的時候先問這一句。

坑 2:偷看未來的資料(前視偏差)

前視偏差(look-ahead bias)就是回測時用了「當時還拿不到」的資訊。 這是我覺得最容易踩、也最難發現的坑。

舉一個我測過的例子。有一個外匯課程主打「看美國 CFTC 的 COT 持倉報告,跟著大型投機者的方向做」,課程裡的圖看起來每次都對。

我叫 AI 拿 14 個市場、10 年的資料去驗證,發現:

  • COT 持倉的增減方向,跟同一週價格方向一致的比例是 64.2%
  • 但跟下一週一致的比例只有 50.4%,跟丟銅板差不多

原因是 COT 報告統計的是週二的持倉,週五才公布,你最快下週一才能進場。課程把報告數字畫在建立持倉的那根週 K 底下,看起來當然「每次都對」;但等你真的能下單的時候,資訊已經用完了。扣掉成本後,10 年都是負的。

台股最常見的前視偏差是月營收:月營收在每月 10 日前公布,如果你的回測在 9 月 1 日就用了 8 月的營收,就等於偷看了答案。我的規則是月營收一律視為次月 11 日才拿得到,財報也要等法定期限過了才能用。

坑 3:只用還活著的股票(倖存者偏差)

想像你要研究「什麼樣的學生考得上台大」,結果只去問現在在台大念書的人。答案一定很漂亮,因為沒考上的人根本不在你的樣本裡。

股票也一樣。如果只用「現在還在交易」的股票回測,那些中途下市、跌到消失的公司都被排除了,結果自然偏好看。這叫做倖存者偏差(survivorship bias)。

我自己有兩份股價資料:

  • 研究用:2010 年起 2,594 檔上市櫃普通股,連後來下市的都算進去,下市就用最後一天的收盤價出場
  • 每日快取:只有近 2 年、沒有下市股,給盯盤程式用

第二份我直接在專案的 instruction 檔裡標了「不可用於研究」,讓 AI 每次開工都先讀到,不會拿錯資料。

坑 4:資料本身有錯

這個坑很少人講,但我踩了好幾次。你的回測再嚴謹,資料錯了,結果就是錯的。

  • 減資的假暴漲:我抽查資料時發現,有些股票一天漲了 50%~130%,最大 +133%。逐筆看下去,幾乎都是減資停牌兩週後復牌。我用的還原股價只還原股利、沒還原減資,所以股東價值沒變,價格卻像是一天暴漲。如果你的策略在找「突然創新高的股票」,就會一直買到這種假訊號
  • 數字溢位:2010 年初有一段資料,股數卡在 2,147,483,647,這是電腦 int32 整數的上限。結果台積電有 19 天的市值只有真值的 1/12
  • 期貨換月的假獲利:期貨每個月換約,回測要把不同月份的合約接成一條連續價格。常見的「比例還原」會把換月那天真實的漲跌一起抹掉,讓跨月的部位憑空多出獲利。這個 bug 的來龍去脈,我寫在AI 寫程式的 7 個坑
教訓:回測最可怕的 bug,是讓結果變好看的 bug。 結果變差你會去查,結果變好你只會開心。所以看到太好的結果,先抽查資料。

坑 5:過度擬合

過度擬合(overfitting)就是策略「背」住了過去的答案,而不是學會了規律。

就像考前把考古題的答案全背下來,考古題每次 100 分,正式考試一題都不會。參數調越多、條件疊越多、試的組合越多,就越容易「剛好」找到一組在過去很漂亮的設定。

我自己踩過的例子:我測過「外資連賣 5 天、而且賣超金額創 3 年極端」的時候進場做多。在開發期(2010–2019),60 天後的勝率是 80%,同期隨便買是 68%,看起來很有東西。

但勝率只多了 12 個百分點,沒達到我事先登記的 15 個百分點門檻,照規矩不能進下一階段。因為它是那一批裡最強的,我同意破例,拿 2020–2023 年的資料再驗證一次。結果:勝率 58%,比隨便買的 69% 還低。 多頭裡外資大賣確實是好買點,但 2022 年空頭時,連三次買在下跌的半山腰。

還有一個更嚇人的數字:我把股票代號隨機打亂當作安慰劑,理論上這時候什麼特徵都不該有效,但我的篩選標準還是放行了 19.4% 的假特徵。你測得越多,假的好結果就越多。

學術界也有一樣的提醒:Harvey、Liu 與 Zhu 的 〈...and the Cross-Section of Expected Returns〉 主張,在資料被這麼多人挖過之後,新因子的 t 值至少要超過 3.0 才可信,而不是一般的 2.0。

坑 6:修了 bug,沒有重跑結論

坑 4 的期貨換月 bug 修好之後,我叫 Claude 把之前所有的網格實驗用正確的價格重跑一次:

修 bug 前 修 bug 後
基準年化 +7.0% +6.0%
移動停利年化 +7.8% +6.7%
移動停利讓空窗縮短 7 → 4 個月 7 → 6 個月

方向都還在,但幅度變小了。這些數字的細節在網格交易進階手法實測。

教訓:回測程式修了 bug,之前所有的結論都要重跑。 不要只修程式、不回頭檢查結論。

怎麼避開這些坑?我給 AI 的 5 條規矩

避開回測陷阱的重點,是在看到結果之前,就先把規矩定好。 這是我寫在研究專案 instruction 檔裡、讓 AI 每次開工都先讀的規則:

  1. 資料切三段:開發期 2010–2019、驗證期 2020–2023、封存期 2024 以後。開發期過了才能跑驗證期,封存期要我同意、而且只看一次
  2. 先登記再回測:跑之前先把假設、規則、過關標準寫進一份 HYPOTHESES.md,寫完才准跑。看完結果才想到的點子,要標「事後」、可信度打折
  3. 只用當時拿得到的資訊:收盤出訊號、隔天開盤成交;一字漲停買不到、一字跌停賣不掉;每個策略都跑一次前視檢查,把資料截斷到換股日前一天重算,結果要一模一樣
  4. 成本一律扣:股票來回 0.585%,期貨另外算手續費、期交稅和滑價
  5. 參數用市場慣用值,不做參數搜索:微調參數結果就天差地別的,直接捨棄

坑 5 那個外資策略,就是規則 2 在保護我:因為門檻是事先寫好的,我很清楚那次是「破例」,結果失敗的時候也不會自己騙自己。

怎麼寫這種 instruction 檔,可以參考 Agent Instruction:怎麼寫 AI Agent 的「憲法」。

不會寫程式,怎麼用 AI 回測台股?

用 AI 回測台股,最簡單的組合是 Claude Code + FinMind:FinMind 提供台股資料,Claude Code 幫你寫回測程式、跑程式、整理結果。 你只要用中文把規則和規矩講清楚。

資料怎麼接,可以先看 FinMind 是什麼?台股 API 免費額度與 Python 教學;Claude Code 怎麼接 FinMind,可以看 用 Claude Code 建台股追蹤系統。

接好之後,可以直接照抄這段指令,把第一行換成你自己的策略:

幫我回測這個台股策略:股價站上 200 日均線就買進,跌破就賣出,標的 0050。

回測規矩:

1. 資料用 FinMind 的還原股價,期間 2010-01-01 到 2019-12-31(先不要碰 2020 以後的資料)
2. 收盤出訊號、隔天開盤價成交,不能用當天收盤價成交
3. 每筆交易扣成本:買 0.1425%、賣 0.1425% + 證交稅 0.3%(ETF 證交稅是 0.1%)
4. 跟「同期間買進持有」比較
5. 輸出:年化報酬、最大回撤、交易次數、勝率、每筆扣成本後的平均報酬,以及逐年報酬表
6. 跑之前先把規則寫成一份文件給我確認,確認後才跑
7. 結果太好的話,先抽查有沒有偷看未來資料、或資料本身有異常,再告訴我

最後兩條最重要:先確認規則再跑,可以避免 AI 理解錯你的策略;結果太好先抽查,則是在防坑 2 和坑 4。

如果你的策略涉及選股(例如「每個月買殖利率最高的 20 檔」),記得再加一條:「股票池要包含後來下市的股票」,不然就會掉進坑 3。不過 FinMind 的 TaiwanStockInfo 股票清單不會列出全部已下市的股票(我自己就另外補了 58 檔),這部分可以叫 AI 幫你查怎麼補。

我實際讓 AI 做選股研究的完整過程,寫在 AI 選股實測:我讓 AI 回測 140 個台股策略,裡面有更多可以照抄的指令。

股票回測工具有哪些?

回測工具大致分三類:看盤軟體內建的回測、量化平台、以及自己寫程式(或叫 AI 寫)。

類型 例子 適合誰 限制
看盤軟體內建 TradingView 策略測試器、XQ 全球贏家選股中心 想快速測技術指標的人 規則受限於平台語法;選股要注意股票池有沒有含下市股
量化平台 FinLab 等台股量化平台 會一點 Python、想做選股研究 進階功能多半要付費
自己寫程式 Python 搭配 backtrader、vectorbt 工程師 要自己處理資料、成本、前視檢查
AI 幫你寫 Claude Code + FinMind 不會寫程式、但規則講得清楚的人 規矩要你自己定,AI 不會主動幫你防坑

不管用哪一種,上面那 6 個坑都一樣存在。工具只會照你的規則算,不會告訴你規則有沒有作弊。

常見問題

回測是什麼意思?

回測(backtesting)是把一套交易規則套用到過去的歷史資料上模擬,看它在過去的報酬、虧損和交易次數,用來在投入真錢之前評估策略。新聞裡的「回測季線」則是另一個意思,指股價跌回季線附近,測試支撐守不守得住。

回測賺錢,實盤就會賺錢嗎?

不一定。回測只代表「過去照這套規則做的結果」,而且很容易因為沒算成本、偷看未來資料、倖存者偏差或過度擬合而高估。比較可靠的做法是:只在一段資料上開發,再用另一段沒碰過的資料驗證,兩段都過了才算有點可信。即使如此,未來的市場也可能改變。

回測要用幾年的資料?

越長越好,至少要涵蓋一次完整的多頭和空頭。台股的話,2020 年 3 月疫情崩跌和 2022 年的空頭都是很好的壓力測試。我自己的研究用 2010 年以後的資料,切成開發、驗證、封存三段。

回測的年化報酬怎麼算?

年化報酬(CAGR)=(期末資產 ÷ 期初資產)^(1 ÷ 年數)− 1。例如 100 萬回測 10 年後變成 200 萬,年化報酬是 2^(1/10) − 1 ≈ 7.2%。記得要用扣完成本的期末資產來算,不然會高估。

ETF 或 0050 回測怎麼做?

ETF 回測最重要的是用還原股價(把配息加回去),不然會低估報酬。另外 ETF 的證交稅是 0.1%,比個股的 0.3% 低。如果是定期定額,要模擬每個月固定日期、固定金額買進,並且把手續費的最低收費算進去。

有免費的回測工具嗎?

TradingView 免費版就能用策略測試器;FinMind 免費註冊後每小時 600 次的額度,也夠用 AI 回測單一標的或 ETF。要做全市場選股回測、或需要還原股價這種進階資料,通常就要付費方案。

結語

回測對我來說,最大的價值不是找到會賺錢的策略,而是便宜地發現自己的想法是錯的。188 個假設跑下來,絕大多數都沒過;但每一個沒過的,都是我沒有拿真錢去學的一課。

AI 讓回測的門檻低到一句話就能開始,但也讓「做出好看但假的數字」變得更容易。所以規矩一定要先定好,而且要寫下來,讓 AI 每次都照著做。

希望這篇對你有一丁點兒的幫助~這些坑都是我自己踩過的,希望你不用再踩一次 😄

如果你想學怎麼用 AI 從「研究、回測」一路做到「自動下單、安全上線」,我正在把整套做法整理成一門課,想搶先知道開課消息的話,加我的 LINE 跟我說一聲「交易課」就好~

延伸閱讀:


喜歡這篇文章嗎?

📧 訂閱 Newsletter — 新文章直接寄到你信箱
🎬 追蹤我的 YouTube — 看 AI / 工具實作影片
💬 加我的 LINE — 想上交易課、或有問題隨時問我
🧵 追蹤 Threads — 平常的工程隨筆

掰掰~👋

想學更多?

訂閱電子報,每週收到最新的 AI 實戰教學。