回測是什麼?股票回測入門與 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% 就賣,最多 20 批。規則要寫到「電腦能照做、不需要你判斷」的程度
- 準備資料:台積電 2020-01 到 2026-06 的每日收盤價,來源是 FinMind
- 逐日模擬:從第一天開始,每天檢查規則,該買就買、該賣就賣,記下每一筆交易
- 扣掉成本:手續費、證交稅一筆都不能少(後面會講為什麼這是第一大坑)
- 看結果:報酬多少、最慘虧多少、跟「直接買進放著」比起來如何
那次回測的結論是: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 每次開工都先讀的規則:
- 資料切三段:開發期 2010–2019、驗證期 2020–2023、封存期 2024 以後。開發期過了才能跑驗證期,封存期要我同意、而且只看一次
- 先登記再回測:跑之前先把假設、規則、過關標準寫進一份
HYPOTHESES.md,寫完才准跑。看完結果才想到的點子,要標「事後」、可信度打折 - 只用當時拿得到的資訊:收盤出訊號、隔天開盤成交;一字漲停買不到、一字跌停賣不掉;每個策略都跑一次前視檢查,把資料截斷到換股日前一天重算,結果要一模一樣
- 成本一律扣:股票來回 0.585%,期貨另外算手續費、期交稅和滑價
- 參數用市場慣用值,不做參數搜索:微調參數結果就天差地別的,直接捨棄
坑 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 跟我說一聲「交易課」就好~
延伸閱讀:
- AI 選股實測:我讓 AI 回測 140 個台股策略,只有 2 種活下來
- 網格交易回測:用台積電 6 年資料實測,99% 的月份有收入,卻輸給買進持有
- 網格交易進階手法實測:移動停利有效、RSI 過濾是毒藥
- 期貨槓桿開幾倍才安全?同一個策略開 1、2、3 倍回測
- AI 寫程式的 7 個坑:我用 Claude Code 寫自動交易程式,真實修過的 bug
喜歡這篇文章嗎?
📧 訂閱 Newsletter — 新文章直接寄到你信箱
🎬 追蹤我的 YouTube — 看 AI / 工具實作影片
💬 加我的 LINE — 想上交易課、或有問題隨時問我
🧵 追蹤 Threads — 平常的工程隨筆
掰掰~👋