25 min read

AI 選股實測:我讓 AI 回測 140 個台股策略,只有 2 種活下來

AI 選股有用嗎?我用 Claude Code 兩週回測 140 個台股策略:高殖利率、低股價淨值比、法人籌碼、技術指標、機器學習都沒過,只剩股價強勢與營收驚喜兩種。附防前視回測方法與可照抄的 AI 指令。
AI 選股實測:我讓 AI 回測 140 個台股策略,只有 2 種活下來

前陣子我問了 AI 一個很多人都想過的問題:

「如果把我們研究過的一百多個訊號合起來,全部成立才買,能不能把勝率拉高?交易次數少沒關係,報酬輸給買進持有也沒關係。」

聽起來很合理對吧?條件越多、越嚴格,挑出來的應該越準。

AI 照著做了:從「股價接近一年高點」開始,一層一層疊上「營收創新高」「營收年增 30% 以上」「營收大幅超出預期」。疊到第四層,九年只剩 1,202 筆交易,勝率是……

53.5%。

一開始什麼條件都不加,隨便買一檔放一個月,勝率是 45.1%。疊了四層,只多了 8 個百分點,跟丟銅板差不了多少 😂

這只是我最近兩週讓 AI 做的 140 個選股研究的其中一個。這篇想跟大家分享,「AI 選股」真正能幫上忙的地方在哪裡,還有那 140 個假設跑完,到底剩下什麼。

先講結論:

TL;DR:AI 選股最有用的方式,不是叫 AI 報明牌,而是讓它當研究助理,幫你把每個選股說法拿去回測。我用 Claude Code 搭配 FinMind 資料,用防前視的方法回測了 140 個台股策略假設:高殖利率、低股價淨值比、低波動、法人籌碼、ROE、季節性、技術指標組合、機器學習全部沒通過。活下來的只有兩類:股價強勢延續(接近 52 週高點)跟營收驚喜/營收創新高。

這篇會聊這些:

  • AI 選股是什麼?為什麼我不叫 AI 報明牌
  • 我讓 AI 做選股研究的三個鐵則
  • 140 個假設的成績單:哪些常見說法沒用
  • 活下來的兩種:股價強勢、營收驚喜
  • 機器學習選股,為什麼輸給簡單的規則
  • AI 選股指令:我實際下給 AI 的 6 句話(可以照抄)
  • 評估任何 AI 選股工具的 7 個問題
關於作者:我是工程師阿穆,寫程式十多年,這幾年在做 AI Agent 與自動化系統。本文是我用 Claude Code 實際跑出來的研究紀錄,資料來自 FinMind。

免責:本文數字全部是歷史回測,不代表未來表現,也不是投資建議。

AI 選股是什麼?我不叫 AI 報明牌

AI 選股,就是用 AI 幫你分析股票資料,篩選或排序出值得買的股票。 常見的用法有兩種:一種是直接問聊天機器人「該買哪支」,另一種是讓 AI 寫程式,把選股規則拿去歷史資料回測,確認有用才拿來用。我推薦第二種,原因如下。

講到「AI 選股」,大部分人想到的是第一種:打開 ChatGPT 或 Claude,問它:「現在買哪支股票好?」

這樣問不是不行,但有三個問題:

  1. 它手上沒有完整的歷史資料,講出來的東西常常是網路上的新聞拼湊,數字還可能是錯的
  2. 它沒辦法告訴你這個建議過去準不準,因為根本沒驗證過
  3. 它講得很有說服力,會讓人以為這個答案很可靠 😅

我用 AI 的方式剛好相反。我不問它「該買什麼」,而是問它:

「這個選股說法,拿過去 15 年的台股資料來測,到底有沒有用?」

換句話說,AI 是我的研究助理,不是我的投顧。 它負責寫程式、抓資料、跑回測、把結果記下來;我負責決定要測什麼、看結果、下判斷。

這套做法的第一步是資料,我之前寫過 用 Claude Code 建台股追蹤系統,就是從那裡開始的。這兩週它在我的研究專案裡留下了 38 個 commit、289 次回測紀錄,程式幾乎都是它寫的。

我讓 AI 做選股研究的三個鐵則

回測這件事最可怕的地方,是很容易做出一個好看但假的數字。所以在讓 AI 開跑之前,我先跟它定了三條規矩。

鐵則一:已經下市的股票也要算進去

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

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

所以我們的資料是 2010 年起、2,594 檔上市櫃普通股,連日後下市的都算進去。股價分成兩份:原始價格用來判斷流動性跟漲跌停,還原權息價格用來算報酬。

鐵則二:只能用「當時」拿得到的資訊

這條叫做防前視(look-ahead bias),是我覺得最容易踩、也最難發現的坑。

舉個例子:台股的月營收在每月 10 日前公布。如果你的回測在 9 月 1 日就用了 8 月的營收,那等於偷看了答案。所以我們規定:

  • 選股只能用換股日前一天收盤以前的資料
  • 月營收視為次月 11 日才拿得到;財報則等法定期限過了才算拿得到(Q1 算 5/16、Q2 算 8/15、Q3 算 11/15、Q4 算隔年 4/1)
  • 用隔天開盤價成交,不是當天收盤價
  • 一字漲停買不到、一字跌停賣不掉
  • 下市就用最後一天的收盤價出場
  • 每次換股都扣來回 0.585% 的成本(手續費 0.1425% × 2 + 證交稅 0.3%)

而且每個策略寫完,AI 都要跑一次前視檢查:把資料截斷到換股日前一天,重算一次分數,要跟原本算的一模一樣。只要不一樣,就代表程式偷看了未來的資料。

鐵則三:先登記再回測,最後一段資料只能看一次

我把資料切成三段:

期間 用途
開發期 dev:2010–2019 設計跟初步測試
驗證期 val:2020–2023 dev 過了才能跑,規則不能再改
封存期 holdout:2024 起 要我同意才能開,而且只看一次

每個假設跑之前,AI 要先把「假設是什麼、分數怎麼算、過關標準是什麼」寫進一份 HYPOTHESES.md,寫完才准跑。dev 沒過的不准偷跑 val;看完結果才想到的點子要標記「事後」,可信度要打折。

為什麼要這麼麻煩?因為你測得越多,就越容易「剛好」找到一個好看的結果。

我們實際量過這件事:把股票代號隨機打亂當作安慰劑,理論上這時候什麼特徵都不該有效,結果篩選標準還是放行了 19.4% 的假特徵。學術界也有類似的提醒:Harvey、Liu 與 Zhu 的 〈...and the Cross-Section of Expected Returns〉 就主張,在資料被挖過這麼多次之後,新因子的 t 值至少要超過 3.0 才可信,而不是一般的 2.0。

這三條規矩,我是直接寫進專案的 instruction 檔,讓 AI 每次開工都先讀。怎麼寫 instruction 檔,可以參考 Agent Instruction:怎麼寫 AI Agent 的「憲法」。

140 個假設的成績單:這些常見說法都沒用

兩週跑下來,140 個事前登記的假設(選股、大盤擇時、期貨、選擇權都有),絕大部分都沒過。挑幾個大家最常聽到的說法:

常見說法 回測結果
買高殖利率股 ✗ dev 前 30 檔每年輸大盤 7.4%,9 年只有 1 年贏
買低股價淨值比(便宜股) ✗ 最便宜的 1/5 股票,年化超額只有 +0.9%,t 0.52,跟雜訊差不多
買低波動股 ✗ 波動最低的 1/5,年化超額 +0.5%,t 0.18
跟著外資買 ✗ 方向相反:外資買超多的股票反而表現較差
融資減少=散戶退場是好事 ✗ 也是方向相反
投信認養、法人合計買超 ✗ 都沒過;法人買超比較像落後指標
高 ROE、高毛利、盈餘驚喜 ✗ 都沒過
春節行情、金融股 11 月 ✗ 春節 dev 過了,val 撐不住
大盤跌破 200 日線就空手 ✗ 年化 −0.8%,一直抱著是 +4.7%;月頻訊號在台股一直被來回洗
網路流傳的「布林開口+MACD 翻紅+站上往上彎的 20 日線」三條件 ✗ 扣成本後每筆平均還是虧(dev −0.20%、val −0.37%)
某堂法人選股課程教的三因子(ROIC+動能+EBITDA/EV) ✗ 每個月比單純看股價強勢少賺 1.17%(t −2.53)

(上表的超額都是跟「同一批股票等權持有」比,扣完成本;除了特別註明的,都是 dev 期間的數字。)

看到高殖利率那一行我其實有點驚訝 😱 台股存股文化這麼盛行,結果「每個月挑殖利率最高的股票」是表現最差的策略之一。不過要提醒一下,這測的是每月換股的短期報酬,不是長期領股息的存股,兩件事不能直接畫等號。

還有一個很有趣的發現:台股是「延續」的市場,不是「反轉」的市場。 「上個月跌最多的,下個月會反彈」「同產業裡落後的會補漲」這些賭反轉的說法,測出來都是方向相反:近一個月強的股票,下個月通常還是比較強。

疊越多條件,勝率會越高嗎?

回到開頭那個實驗。開跑之前,AI 先在 HYPOTHESES.md 把規則登記好,這是當時寫下的內容(節錄,代號換成白話):

## H125 條件疊加梯度(2026-10-28,跑 dev 前寫下)
動機:使用者問「挑多個訊號、全部成立才買,能不能提高勝率」
紀律:不從既有假設裡搜組合;只用 4 個單獨有效、機制不同的訊號,
      門檻用慣用值,疊加順序事前固定
⚠ 原料與門檻之前都看過 → 標「事後」

L0 = 有流動性的股票(含日後下市的)=基準勝率
L1 = L0 且 股價離 52 週高點 5% 以內
L2 = L1 且 近 3 個月營收創 12 個月新高
L3 = L2 且 營收年增 ≥ 30%
L4 = L3 且 營收大幅超出預期
勝 = 該筆扣成本後的報酬 > 0
過關(dev):勝率比基準多 10 個百分點以上、同月隨機抽樣 p ≤ 0.01

跑出來的結果是這樣(dev 期間,持有約一個月,勝率=扣成本後賺錢的比例):

層 條件 筆數 勝率
0 有流動性的股票,隨便買 103,700 45.1%
1 +股價離 52 週高點 5% 以內 17,223 48.0%
2 +近 3 個月營收創 12 個月新高 4,775 50.2%
3 +營收年增 30% 以上 2,488 51.4%
4 +營收大幅超出預期 1,202 53.5%
疊了四層條件,勝率只從 45.1% 爬到 53.5%

每多加一個條件,勝率只多 1~3 個百分點,筆數卻直接砍半。

順帶一提,照事先登記的標準(勝率要比基準多 10 個百分點),這個假設只多了 8.4,其實算沒過關,所以依規矩連驗證期都沒資格跑。這就是先登記的好處:不會因為結果「看起來還不錯」,就偷偷把標準放寬。

那疊條件有沒有用?有,但用處不在勝率:第 4 層每筆平均比大盤多賺 2.55%(t 4.07)。也就是說,條件疊上去提高的是「賺的時候賺多少」,不是「賺的機率」。 勝率還是一半一半,只是贏的那幾筆贏比較多。

這件事改變了我看選股的方式:與其追求「每檔都要賺」,不如接受「一半會虧」,然後確定贏的時候贏得夠多。

財經 YouTuber 的口訣,測起來如何?

我也把某位財經 YouTuber 系列影片裡的選股口訣,請 AI 整理成可以量化的說法,一個一個去測:

  • 「乖離太大一定會拉回」:在強勢股裡,近 5 日乖離 13~20% 的那些,下個月反而再多漲 6.6%(相對大盤)。強的繼續強
  • 「最大量那根月 K 的高點,一年內九成會被突破」:實測 59.8%,同樣距離的隨機對照組是 59.9%,成交量沒有多提供任何資訊
  • 「月 KD 在 50 以上黃金交叉」:每筆平均有 +0.70% 的超額,但 t 只有 1.09,不顯著;再加上「股價淨值比 < 1」後轉成負的

整體看下來有個規律:講「順勢」的口訣大致有資料支持,講「抄底」的(KD 低檔背離、回測季線買、下跌缺口一定會補)方向都是反的。

活下來的兩種:股價強勢、營收驚喜

140 個假設跑完,真正站得住的只有兩類。

第一種:股價強勢延續(接近 52 週高點)

做法很簡單:股價離過去一年最高點越近,分數越高。 每個月挑分數最高的那批股票,等權買進,下個月再換。

這其實是學術界的老朋友,George 與 Hwang 在 2004 年的論文 〈The 52-Week High and Momentum Investing〉 就發現,「離 52 週高點多近」預測未來報酬的能力比過去漲多少還好。

很多人看到股價創新高會覺得「太貴了不敢買」,但資料告訴我們的剛好相反:大家不敢追的時候,強勢股往往還會繼續走。

我們在台股三段資料上的結果(每月換股、前 30 檔等權、扣成本):

期間 策略年化 同一批股票等權持有 年化超額 t 值 每年都贏? 日線最大回撤
dev 2011–2019 +17.7% +4.3% +13.2% 3.71 9/9 年 −27.3%
val 2020–2023 +52.0% +20.2% +25.0% 2.84 4/4 年 −30.0%
holdout 2024/01–2026/10 +54.7% +19.7% +27.2% 2.27 3/3 年 −28.0%

(dev 從 2011 年開始,因為 2010 年還不滿 250 根 K 棒可以算 52 週高點。)

三段都過,而且挑 20、30、50 檔,結論都差不多,代表它不是靠某個剛好的參數撐起來的。

但我必須把醜話講在前面:

  • 回撤很大:三段的日線最大回撤都在 −27%~−30%,這不是一個穩穩賺的策略
  • 2024 之後剛好是 AI 大多頭,強勢股特別吃香,這段的數字很可能偏樂觀
  • 回測沒算開盤滑價,實際買進的價格會比較差

第二種:營收驚喜、營收創新高

這是台股特有的武器。美股一季才公布一次財報,台股上市櫃公司每個月都要公布營收,等於每個月都有新的基本面資訊。

我們測過好幾種營收訊號,表現最好的是「營收驚喜」:不是看營收成長多少,而是看這個月的成長,比這家公司自己過去的成長,好了多少。就像一個平常考 60 分的同學突然考 85,比一個平常就考 90 的同學考 92 更值得注意。

營收驚喜是所有特徵裡分位最單調的一個:把全市場依營收驚喜分成五組,從最差到最好,報酬一組比一組高,最好那組 t 值有 5.41。

但有個很反直覺的地方:它單獨拿來挑幾十檔股票的時候,反而過不了關。 營收訊號很擅長「排序」,但集中成小投組就容易被雜訊干擾。

直到把「股價強勢」跟「營收驚喜」合成一個分數,才真正變強。合成版三段的年化超額分別是 +28.0%、+49.2%、+52.4%(holdout t 3.66),每一段都比單看股價強勢好。

不過這個合成版有個要誠實交代的地方:它是我們從 3,330 個隨機特徵組合裡,挑出 dev 表現第一名的那一組,dev 跟 val 的數字都有選擇偏差。真正乾淨的證據,只有 holdout 那 33 個月。 33 個月不算長,所以我把它當成「目前最好的假設」,而不是「已經被證明的真理」。

機器學習選股,為什麼輸給簡單的規則?

先講結論:在我的測試裡,機器學習選股的年化報酬只有簡單規則的一半,超額報酬更只有三分之一多一點(+14.6% 對 +39.1%)。問題不在模型不夠強,而是給它的目標設錯了。

講到 AI 選股,一定有人會問:「那為什麼不直接用機器學習?把一堆特徵丟進模型,讓它自己學權重不是更強?」

我也這麼想,所以真的試了。用 20 個特徵,訓練兩種模型:一種是線性的 Fama-MacBeth 迴歸,一種是梯度提升樹(HistGradientBoosting,跟 LightGBM 是同一類)。每年用過去的資料重新訓練,嚴格不偷看未來。

2015~2023 年的樣本外結果(三種方法挑同樣數量的股票、扣成本):

方法 年化報酬 年化超額 最大回撤 預測準確度(月 IC)
股價強勢+營收驚喜(簡單規則) +60.2% +39.1% −21.5% —
梯度提升樹 +30.1% +14.6% −12.8% 0.121
線性迴歸 +22.2% +7.9% −12.4% 0.112
機器學習選股,年化超額不到簡單規則的一半

機器學習模型的「預測準確度」(IC)其實很高,比任何單一特徵都好,回撤也只有簡單規則的一半多一點。但報酬只剩一半。

為什麼?因為我們給模型的目標是「預測每一檔股票在全市場的排名」。模型為了把平均排名做好,學到的最佳策略是避開爛股:低波動、不是彩券型的股票,權重最大。

這就像請一個非常謹慎的人幫你挑球員,他很會避開會受傷、會失誤的人,整體平均很漂亮;可是你要的是能得分的球星,他反而不敢選。只挑最前面一小籃股票的投組,賺的就是那幾個大贏家,而模型的目標根本沒有對準它。

公平起見要補一句:2015~2019 剛好是簡單規則被挑出來的期間,這段比較對機器學習是不利的。但差距大到這個程度(t −3.27),我覺得結論還是成立:換了更複雜的模型,不等於會更好;目標設錯,模型再強都沒用。

AI 選股指令:我實際下給 AI 的 6 句話(可以照抄)

這套研究沒有什麼神奇的 prompt,大多是很白話的指令,重點是規矩要先講清楚。整理幾個我真的用過的:

1. 建資料

「用 FinMind 幫我建一份台股研究資料:2010 年起、上市櫃普通股,連已經下市的都要。股價存兩份,原始價跟還原權息價。」

2. 先定研究規範(寫進 instruction 檔)

## 研究規範

- 期間固定:dev 2010–2019/val 2020–2023/holdout 2024 起(要我同意才能開,只看一次)
- 先登記再回測:假設、分數、過關標準先寫進 HYPOTHESES.md,dev 沒過不准跑 val
- 防前視:只用換股日前一天收盤以前的資料;月營收視為次月 11 日才拿得到
- 成交:隔天開盤價;一字漲跌停無法成交;下市以最後收盤價出場
- 成本:來回 0.585%
- 參數用市場慣用值,不做參數搜尋;看過結果才提出的假設要標「事後」

3. 登記一個假設

「我想測『高殖利率股票會贏大盤』。先把假設、分數怎麼算、過關標準寫進 HYPOTHESES.md,我確認後再跑 dev。」

4. 結果太好的時候,叫它自己找漏洞

「這個結果好得不太正常。幫我檢查有沒有前視、倖存者偏差、成本沒算,再跑一次截斷資料的前視檢查。」

5. 估計自己被騙的機率

「把股票代號隨機打亂 20 次當安慰劑,看這個篩選標準會放行多少假訊號。」

6. 驗證網路上的說法

「這幾支影片在講選股口訣,幫我整理出可以量化的說法,一個一個登記成假設去測。」

最後那個是我最喜歡的用法。以前看到財經影片講得頭頭是道,只能選擇信或不信;現在可以直接丟給 AI,隔天就知道過去 15 年到底有沒有用 😎

資料方面要提醒一下:一次抓全市場、還原權息價這些需要 FinMind 的付費方案(我用的是 Sponsor,每小時 6,000 次)。免費版每小時 600 次,研究幾十檔股票夠用,要做全市場就會很吃力。各方案差在哪,我整理在 FinMind 是什麼?台股 API 免費額度、方案價格與 Python 教學。

另外,AI 寫回測程式也會出錯,而且常常錯得很隱密。我之前整理過 AI 寫程式的 7 個坑,裡面有好幾個就是回測相關的,建議一起看。

評估任何 AI 選股工具的 7 個問題

市面上越來越多「AI 選股 App」「AI 股票分析工具」,標榜勝率幾成、年化多少。經過這兩週,我覺得不管是別人的工具還是自己做的,都可以用這 7 個問題檢查一遍:

  1. 回測有沒有包含已經下市的股票?(沒有的話,數字一定偏好看)
  2. 用的是「當時」拿得到的資料嗎? 營收、財報是照公布日算,還是用事後的完整資料?
  3. 成交價是隔天開盤,還是當天收盤?(看到訊號的那一刻,收盤價已經回不去了)
  4. 有沒有扣手續費跟證交稅? 台股來回 0.585%,短線策略很容易被成本吃光
  5. 有沒有樣本外? 規則是事先定好的,還是看完結果才調出來的?
  6. 跟誰比? 是跟「同一批股票等權持有」比,還是只秀絕對報酬?
  7. 最大回撤是多少? 只講年化、不講回撤的,要特別小心

只要有一題答不出來,那個漂亮的數字就先打個問號吧。

常見問題

AI 選股準嗎?

看你怎麼用。叫 AI 直接推薦股票,沒有任何驗證,談不上準不準。讓 AI 當研究助理,把選股規則拿去嚴格回測,它能幫你很快排除掉大部分沒用的說法。以我的經驗,140 個假設裡能用的只有兩類,AI 最大的價值是幫你省下踩那 138 個坑的時間跟錢。

可以直接問 ChatGPT 或 Claude 該買哪支股票嗎?

可以問,但不要照做。聊天機器人沒有完整的歷史資料,也沒有辦法告訴你它的建議過去準不準。比較好的問法是:「這個選股規則,要怎麼驗證有沒有用?」

不會寫程式也能做 AI 選股研究嗎?

這兩週的回測程式幾乎都是 Claude Code 寫的,我主要負責定規矩、決定要測什麼、看結果。不過你至少要看得懂「前視」「倖存者偏差」「樣本外」這些概念,才知道 AI 有沒有做錯。這篇前面的三個鐵則,就是最低限度要懂的部分。

AI 選股有哪些常見盲點?

最常見的有五個,而且 AI 自己寫程式時一樣會踩:

  1. 前視偏差:用了當時還沒公布的資料,例如在月營收公布前就拿它來選股
  2. 倖存者偏差:只用現在還在交易的股票回測,漏掉下市的那些
  3. 過度擬合:測了幾百種組合,挑一個最好看的,結果只是剛好
  4. 成本跟成交太樂觀:用當天收盤價成交、沒扣手續費和證交稅、忽略漲跌停買不到
  5. 模型目標設錯:機器學習預測得很準,但準的是「平均排名」,不是你要的「挑出大贏家」

前面的三個鐵則跟 7 個問題,就是用來擋這些盲點的。

回測過了,實盤就會賺嗎?

不會保證。回測只能告訴你「過去這個規則有沒有用」,而且最後一段資料只有 33 個月。市場會變、成本會變、滑價會吃掉一部分,這些都要用小資金慢慢驗證。

結語

兩週、140 個假設跑下來,我最大的感想是:大部分聽起來很有道理的選股說法,其實都經不起資料的檢驗。 能活下來的,反而是最樸素的兩件事:強的股票會繼續強,營收超出預期的公司值得注意。

AI 沒有讓我找到什麼神奇的公式,但它讓「驗證一個想法」這件事,從要花好幾個週末,變成一句話就能開始。對我來說,這才是 AI 選股真正的價值。

希望這些研究對你有一丁點兒的幫助~這些坑我都幫你先踩過了,至少下次看到「勝率九成」的選股法,你知道要先問哪幾個問題 😄

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

延伸閱讀:


喜歡這篇文章嗎?

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

掰掰~👋

想學更多?

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