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

Claude Code 量化交易實戰:裝 finlab 跑台股籌碼回測,
從一句話到三因子迭代

Claude Code 量化交易怎麼上手?本文從安裝 Claude Code 與 FinLab Skill 開始,全程用對話下指令跑台股籌碼回測:第一版投信買超排行年化 18.1%、月索提諾 1.43;讓 Claude Code 讀回測報告自己迭代成投信外資買超持續三因子後,年化 19.8%、月索提諾 1.92、最大回撤 -32.7%。同期 0050 含息年化 25.0%,輸在哪裡、迭代改善了什麼,兩版數字與程式碼都可下載重現。

對話跑台股回測 CAGR 19.8% Sharpe 1.05

Claude Code 量化交易實戰:投信外資買超持續三因子與 naive 投信買超排行、0050 含息淨值曲線比較,2018 到 2026 年對數刻度

用 Claude Code 跑 finlab 台股量化回測,和用網頁聊天機器人問策略最大的差別是:它會在你的電腦上動手。建 Python 環境、寫策略程式、執行回測、讀報錯自己修,整條研究流程都在終端機裡完成,你負責用中文描述想法、檢查它的假設與結果。本文把這條路完整走一遍:先安裝 Claude Code 與 FinLab Skill,再用一句話要出第一版投信買超策略,最後讓它讀回測報告、自己提出改法並重跑。兩個版本的數字全部列出,包含輸給 0050 的部分。

上手問題 建議做法
Claude Code 怎麼裝 終端機跑 npm install -g @anthropic-ai/claude-code,輸入 claude 啟動;需要 Claude 訂閱方案或 API 用量
finlab 怎麼接上 裝 FinLab Skill 後,把下方 setup 提示詞交給 Claude Code,首次取資料時套件會自動引導登入
不會寫程式行不行 可以。策略邏輯用中文描述,程式由 Claude Code 生成並執行;看得懂基本邏輯,有利於檢查它有沒有用到未來資料
這篇的實測結果 第一版投信買超排行年化 18.1%;迭代後三因子年化 19.8%、月索提諾 1.92;同期 0050 含息年化 25.0%

先把本文的回測結果攤開。策略是籌碼面的「投信外資買超持續三因子」:投信買超強度、投信買超持續性、外資同步買超,三個排名相加選股:

指標 投信外資三因子(本文) naive 投信買超排行 0050 含息
年化報酬(CAGR 19.8% 18.1% 25.0%
最大回撤(MDD -32.7% -38.5% -34.0%
夏普比率 1.05 0.87 1.22
月索提諾比率 1.92 1.43 1.92
總報酬 +352% +302% +559%
平均持股 20 檔 20 檔 1 檔 ETF

口徑:2018-01 到 2026-06(資料快照 2026-06-09),策略含 finlab 預設交易成本,0050 為還原價含息買進持有,詳見文末回測方法。在本文設定與這段期間,兩版籌碼策略的年化報酬都輸給 0050 含息的 25.0%。迭代的價值出現在風險端:月索提諾從 1.43 升到 1.92、追平 0050,最大回撤從 -38.5% 收斂到 -32.7%,比 0050 的 -34.0% 略淺。這組數字同時說明兩件事:讓 AI Agent 讀報告再迭代,能實質改善策略體質;而只靠籌碼單一面向想贏過大盤,在這段權值股主導的行情裡並不容易。輸在哪裡,後面用數據拆解。

5 分鐘安裝:Claude Code 與 FinLab Skill

Claude Code 是 Anthropic 官方的終端機 AI Agent,安裝只要一行(需要先有 Node.js):

顯示程式碼
npm install -g @anthropic-ai/claude-code

裝完在任何資料夾輸入 claude 即可啟動,第一次會引導你登入 Claude 帳號。使用 Claude Code 需要 Claude Pro/Max 訂閱或 API 用量計費,額度依方案而異。

接著裝 FinLab 的 AI Skill。這份 SKILL.md 讓 Claude Code 知道怎麼抓台股資料、怎麼用 finlab 回測、怎麼避開常見的前視偏差:

顯示程式碼
npx skills add https://github.com/koreal6803/finlab-ai --skill finlab

最後把 setup 提示詞交給 Claude Code。首次取資料時,finlab 套件會自動引導登入,不需要把金鑰寫進提示詞或程式碼:

免費試用

用 AI 開始 FinLab

把這句話交給你的AI,它會帶你完成設定並做出第一個策略。

告訴你的AI:

幫我設定 FinLab,用投信與外資買賣超資料做台股籌碼選股回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/claude-code-finlab-quant-trading

Claude Code 是什麼?為什麼適合量化回測

Claude Code 是在終端機裡運作的 AI Agent:它能讀寫你電腦上的檔案、執行指令、看到程式的報錯並自己修正。對量化研究來說,這幾個能力剛好對應回測工作流的痛點:

環節 網頁聊天機器人 Claude Code
寫策略程式 給你一段程式碼,自己複製貼上 直接把檔案寫進你的專案資料夾
執行回測 不能執行,你要自己準備環境 自己建虛擬環境、裝 finlab、跑 sim()
程式報錯 把錯誤訊息貼回去問它 讀到報錯自動修正重跑,通常不用你插手
專案記憶 換一個對話就忘記設定 CLAUDE.md 記住你的回測口徑與偏好
能力擴充 無標準機制 支援 SKILL.md 標準,裝上 FinLab Skill 就懂台股資料

其中 CLAUDE.md 值得一提:在專案資料夾放一份說明檔,寫下「回測都用 2018 年起、對照 0050 含息、成本用 finlab 預設」,之後每次對話 Claude Code 都會先讀它,你不必重複交代口徑。對 AI Agent 跑量化還沒有整體概念的話,AI Agent 量化交易實戰有從零開始的完整示範;想比較 Claude Code、Codex、Hermes 等工具各自的強項,見 AI Agent 量化交易工具比較;量化交易本身的知識地圖,見量化交易完整指南

第一版:一句話要一個投信買超策略

台股的三大法人買賣超每天盤後公布,是全球少見的高透明籌碼資料。投信(國內基金公司)的買超常被視為中期波段訊號,因為投信操盤有績效壓力、選股集中,這也是很多籌碼派投資人追蹤投信與外資動向的原因。我們先用最直覺的版本開始:

💬 你對 Claude Code 說:

用 finlab 做一個投信買超選股策略:近 20 日投信買賣超股數合計排名前 20 名,等權重,每月再平衡,加上近 20 日平均成交金額大於 1,000 萬的流動性過濾。回測 2018 年至今,對照 0050 含息買進持有。

🤖 Claude Code 回覆:

已建立虛擬環境並安裝 finlab,寫好 naive_trust.py 並執行完成。結果:年化報酬 18.1%、日夏普 0.87、月索提諾 1.43、最大回撤 -38.5%、總報酬 +302%。同期 0050 含息年化 25.0%、最大回撤 -34.0%。這個版本輸給大盤,而且回撤更深。要我分析原因嗎?

一句話就跑出一個完整回測,這是 AI Agent 的門檻優勢。但結果本身不理想:報酬輸 0050 快 7 個百分點,回撤還更深。這也是AI 選股提示詞實測反覆出現的現象:直覺式的第一版提示詞,通常跑不出好策略。

提醒:文中對話為示意呈現,績效數字取自本文實際執行的回測輸出(見文末下載);你自己跑時的環境訊息與當日數據會略有不同。

迭代:讓 Claude Code 讀報告、自己提改法

接著把回測報告丟回給它。這一步是 Claude Code 和「問一次拿一次答案」的分水嶺:它能讀完整份報告與程式碼,指出結構性問題,改完直接重跑驗證:

💬 你對 Claude Code 說:

讀這份回測報告和程式碼,指出這個策略最可能的三個問題,提出具體改法,改完重跑並和第一版、0050 對照。

🤖 Claude Code 回覆:

我看到三個問題。第一,買超「股數」沒有正規化:同樣買超 5,000 張,對日成交十萬張的權值股是雜訊,對日成交一萬張的中型股是強訊號,直接排股數會系統性偏向大股本股票。第二,20 日窗口太短:投信單月的買超排行波動很大,換股率高、追價成本重。第三,沒有任何風控條件:買超排行榜上不乏一路下跌被逢低承接的股票。我建議改成三個因子:近 60 日投信買賣超佔同期成交量比(強度)、近 60 日投信站在買方的天數比例(持續性)、近 60 日外資買賣超佔成交量比(外資同步確認),三個排名相加,只買股價站上 60 日均線的標的,前 20 名依分數平方加權。正在重跑。

改進版的核心程式碼如下,每一段對應一個動作,完整可執行版本在文末下載:

顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
 
# 首次取資料時 finlab 會自動引導登入
finlab.login()
 
# 1) 載入價量與法人買賣超資料
close = data.get("price:收盤價")
volume = data.get("price:成交股數")
trust_net = data.get("institutional_investors_trading_summary:投信買賣超股數")
foreign_net = data.get("institutional_investors_trading_summary:外陸資買賣超股數(不含外資自營商)")
trust_net = trust_net.reindex(close.index).fillna(0)
foreign_net = foreign_net.reindex(close.index).fillna(0)
 
# 2) 流動性過濾與個股趨勢條件
amount20 = (close * volume).rolling(20).mean()
liquid = (amount20 > 10_000_000) & close.notna()
ma60 = close.rolling(60).mean()
 
# 3) 三個籌碼因子
vol60_sum = volume.rolling(60).sum()
trust_intensity = trust_net.rolling(60).sum() / vol60_sum      # 投信買超強度
trust_persistence = (trust_net > 0).rolling(60).mean()          # 投信買超持續性
foreign_intensity = foreign_net.rolling(60).sum() / vol60_sum   # 外資同步
 
# 4) 排名相加、取前 20、分數平方加權、每月再平衡
def rank_pct(factor):
    return factor.where(liquid).rank(axis=1, pct=True)
 
score = rank_pct(trust_intensity) + rank_pct(trust_persistence) + rank_pct(foreign_intensity)
top20 = score.where(liquid & (close > ma60)).rank(axis=1, ascending=False) <= 20
weight = score.where(top20, 0).clip(lower=0) ** 2
weight = weight.div(weight.sum(axis=1), axis=0).fillna(0)
 
report = sim(weight, resample="M", name="投信外資買超持續三因子")
report.display()

迭代前後的差異,三個指標都有感:

指標 naive 投信買超排行 投信外資三因子 變化
年化報酬 18.1% 19.8% +1.7 個百分點
月索提諾 1.43 1.92 風險調整後明顯改善
最大回撤 -38.5% -32.7% 淺了 5.8 個百分點
日夏普 0.87 1.05 改善
平均月周轉率 68% 58% 換股成本下降

投信外資買超持續三因子與 naive 投信買超排行、0050 含息的年化報酬、日夏普、月索提諾三面向長條比較

改進版年化 19.8%、月索提諾 1.92、最大回撤 -32.7%。完整互動式回測報告(月報酬熱力圖、年度績效、權益曲線都在裡面)可直接在頁面上操作:

為什麼迭代完還是輸 0050

把差距講清楚比只報好消息有用。三因子版本輸給 0050 的 5.2 個百分點年化,主要來自三個結構性原因:

  • 行情組成:2024 到 2026 年的台股漲幅高度集中在權值股,0050 的市值加權結構近半權重壓在台積電上,剛好全額吃到這段行情。三因子策略的持股由投信買超決定,偏向中型股,分散在 20 檔,權值行情下天生吃虧。
  • 成本口徑:策略每月再平衡、平均月周轉率 58%,手續費與證交稅已內扣在績效裡;0050 基準是不含任何成本的指數算術。這個比較口徑對策略偏保守,實務上買 0050 也有內扣費用與交易成本。
  • 訊號公開性:三大法人買賣超每天公布、人人看得到,公開訊號的超額報酬會被競爭壓縮。籌碼資料的優勢在於更新頻率高、不受財報延遲影響,而非獨家性。

風險端則有不同的結論。把回撤攤開看,改進版在 2020 年疫情崩盤與 2022 年升息修正的最深回撤都比 naive 版淺;對上 0050 則分段互有深淺:2020 年策略 -32.7% 比 0050 的 -28.2% 更深,2022 年策略 -23.1% 比 0050 的 -34.0% 淺得多,全期最大回撤 -32.7% 略淺於 0050 的 -34.0%:

投信外資買超持續三因子與 0050 含息回撤曲線比較,2018 到 2026 年,策略最大回撤 -32.7% 略淺於 0050 的 -34.0%

60 日均線的個股趨勢過濾在這裡發揮作用:跌勢中投信買超再多也不進場,避開一部分「逢低承接卻繼續跌」的標的。對照大盤層級的擇時,Hermes 那篇的實測顯示大盤 200 日均線擇時反而重傷績效;個股層級的趨勢條件影響溫和得多,敏感度段有數字。

回測方法與限制

這些數字怎麼算出來的,逐項交代:

項目 本文設定
回測區間 2018-01 到 2026-06(資料快照 2026-06-09)
交易成本 finlab sim() 台股預設:手續費 0.1425%(未打折)、賣出證交稅 0.3%,已內扣
滑價 未另行假設;實際衝擊取決於資金規模與個股成交量,本文未估算策略容量
股票池 全上市櫃,finlab 資料含已下市股票,無生存者偏誤;未排除金融股、KY 股與 ETF
流動性過濾 近 20 日平均成交金額大於 1,000 萬
前視偏差 三大法人買賣超為每日盤後公布資料,rolling 統計只用已公布值;本策略不含財報項目,無公布日對齊問題
權重 綜合分數平方加權(naive 版為等權),未設單檔上限
周轉率 改進版平均月周轉 58%、單月最高 95%,成本已反映在績效中
樣本內外 本文為全段 in-sample,未做樣本外切分;樣本外驗證的做法見回測是什麼Hermes 的 walk-forward 實測
0050 基準 etl:adj_close 還原價含息買進持有,純指數算術、不含交易成本;基準不扣成本而策略扣,口徑對策略偏保守

敏感度:換參數,結論會不會翻

「前 20 檔、平方加權、60 日均線」都是設計選擇。我們把持股數、趨勢過濾、加權方式各自變動重跑,看結論是否依賴特定參數:

投信外資買超持續三因子參數敏感度:持股數 15 到 30 檔、有無趨勢過濾、等權與平方加權的月索提諾與年化報酬比較

設定 年化報酬 最大回撤 日夏普 月索提諾
前 15 檔 19.8% -33.3% 1.05 1.80
前 20 檔(本文) 19.8% -32.7% 1.05 1.92
前 30 檔 20.7% -31.9% 1.08 1.88
前 20 檔、拿掉趨勢過濾 18.6% -33.7% 1.03 1.68
前 20 檔、改等權 19.8% -32.5% 1.05 1.93

三個發現。第一,五組設定的年化落在 18.6% 到 20.7%、月索提諾落在 1.68 到 1.93 的窄區間,結論不因參數翻盤。第二,平方加權和等權幾乎沒有差別(1.92 對 1.93),代表報酬來自因子本身,加權方式是次要細節。第三,拿掉 60 日均線趨勢過濾後月索提諾從 1.92 降到 1.68、年化少 1.2 個百分點,趨勢條件有貢獻但策略不靠它成立。同樣重要的是:五組設定的年化全部落在 0050 的 25.0% 之下,「輸給大盤絕對報酬、風險調整後接近」這個主結論,不因參數翻盤。敏感度表的用途是驗證穩健性,回頭挑最漂亮那格當招牌就變成過擬合了。

法人買賣超的學術根據與侷限

追蹤法人買賣不是台股獨有的土方法,實證文獻對「機構投資人的交易含資訊」有長期累積:Nofsinger & Sias (1999) 用美國市場資料發現機構持股變化與股票報酬強烈正相關,且機構買進的股票在其後表現較佳,支持機構交易含有資訊的解釋。Sias (2004) 進一步證明機構買賣具有跨季持續性:這一季被機構群體買進的股票,下一季更可能繼續被買,本文的「買超持續性」因子對應的正是這個現象。台灣市場的證據更直接:Barber, Lee, Liu & Odean (2009) 用台灣完整的交易人層級資料估計,散戶因交易造成的年損失約當台灣 GDP 的 2.2%,而法人(尤其外資)是這場零和交換裡的系統性贏家。

侷限也要說清楚。前兩篇研究用的是美國市場的季頻機構持股資料,台股的日頻買賣超公開透明得多,訊號人人可見,超額報酬更容易被競爭稀釋;本文 naive 版輸給 0050 就是提醒:文獻支持「法人交易含資訊」,不等於「照抄買超排行榜就能賺錢」。從排行榜到可用的因子,中間的正規化、持續性、風控設計才是重點,這也是值得讓 AI Agent 反覆迭代的部分。想看投信買超在不同持有期的原始表現,三大法人策略比較有另一組獨立實測。

適合誰、不適合誰

適合:

  • 想學 AI Agent 量化研究流程的人:本文的「一句話初版、讀報告迭代、敏感度驗證」三步,換成任何因子都適用。
  • 在意回撤多於絕對報酬的投資人:三因子版本最大回撤 -32.7%,略淺於 0050,月索提諾追平。
  • 重視可重現的人:全部數字附程式碼與資料,裝好環境跑一次就能驗證。

不適合:

  • 目標是打敗 0050 絕對報酬的人:本文設定下三因子年化 19.8%,輸 0050 的 25.0%。
  • 不想碰終端機的人:Claude Code 在命令列運作;想用瀏覽器直接跑回測,FinLab Studio 門檻更低。
  • 資金量大的人:策略偏中型股、月周轉 58%,本文未估算容量上限,大額進出的滑價會侵蝕回測與實單的差距。

常見問題

Claude Code 是什麼?和網頁版 Claude 有什麼不同?

Claude Code 是 Anthropic 官方的終端機 AI Agent。網頁版 Claude 只能對話與產生程式碼,Claude Code 能在你的電腦上讀寫檔案、執行指令、看報錯自己修,還能透過 CLAUDE.md 記住專案設定、透過 SKILL.md 標準載入 FinLab Skill。做量化回測時,差別就是「拿到程式碼自己想辦法跑」與「講完想法等結果」的差別。

Claude Code 怎麼安裝?要付費嗎?

終端機跑 npm install -g @anthropic-ai/claude-code(需要 Node.js),再輸入 claude 登入即可。使用需要 Claude Pro/Max 訂閱或 API 用量計費。finlab 套件本身免費註冊即可取用台股資料,回測不用額外付費。

不會寫 Python 也能用 Claude Code 做量化回測嗎?

可以。本文兩版策略的程式都由 Claude Code 生成與執行,人的工作是描述邏輯、質疑結果。不過看得懂基本程式對你有利:你才能檢查它有沒有用到未來資料、成本有沒有扣、流動性過濾合不合理。想補底子,Python 量化交易教學從環境設定帶到第一個台股回測。

Claude Code 和 Codex、Hermes 這些工具差在哪?

定位不同:Claude Code 強在寫程式與自我修錯的迭代深度,適合當研究主力;Hermes 有跨對話長期記憶與排程,適合策略的長期維護;各工具的完整比較與選擇建議見 AI Agent 量化交易工具比較。工具會迭代,比較基準是它能不能穩定完成「讀資料、跑回測、修錯、整理結果」這個迴圈。

投信買超策略輸給 0050,還有研究價值嗎?

看你要什麼。這段期間 0050 受惠於權值股行情,絕對報酬確實難贏;三因子版本的價值在風險結構:回撤較淺、月索提諾追平、持股分散在 20 檔投信著墨的中型股,報酬來源與 0050 的權值集中結構不同。它更適合當多策略組合裡的一條腿,而非單獨對標大盤。把籌碼因子和基本面、動能因子疊加會怎樣,多因子選股實測有獨立驗證。

這個回測有過擬合風險嗎?

有,而且要明說:本文為全段 in-sample,沒有做樣本外切分,參數雖然通過敏感度檢驗(持股數、加權、趨勢過濾變動下結論不變),仍不能排除整段歷史剛好有利於這組因子。比較嚴謹的做法是切研究段與樣本外段分開驗證,做法見回測是什麼

怎麼確認 Claude Code 寫的程式沒有用未來資料?

三個檢查點:一,資料的可得時點,法人買賣超是盤後公布,隔日開盤前才可用,本文的月頻再平衡遠粗於這個延遲,安全;二,rolling 類統計只能往回看,程式裡不能出現 shift(-n) 這種往未來取值的寫法;三,直接問它「這支程式有沒有前視偏差,逐行說明每個資料欄位的可得時間」,讓它自我審查,再抽查關鍵行。FinLab Skill 的說明檔內建這些提醒,這也是裝 Skill 比裸問的可靠之處。

實單執行要注意什麼?

三件事:平均月周轉 58% 代表每月約換掉一半持股,手續費折扣對長期績效影響可觀;持股偏中型股,單檔買賣金額大時滑價會高於回測假設;策略月頻再平衡,適合下單自動化,台股回測工具與下單環節的選擇見台股回測工具比較

下一步

  • 零安裝:打開 FinLab Studio,瀏覽器直接輸入選股條件跑回測。
  • 裝起來跑:安裝 Claude Code 與 FinLab Skill,把本文的對話流程重走一遍,再換成你自己的因子。
  • 進一步的提示詞寫法:怎麼把一個模糊想法逐步收斂成可回測的規格,AI 提示詞回測策略有完整的迭代示範。
  • 加入社群FinLab Discord 有上千位台股量化同好,策略卡關、回測結果怪異都可以貼出來討論。

下載與重現


投資警語:本文僅供教學參考,不構成投資建議。文中全部回測數據(年化 19.8%、最大回撤 -32.7% 等)為 2018-01 至 2026-06 的歷史模擬,已含 finlab 預設交易成本,但未含滑價與容量限制,且為全段 in-sample、未經樣本外驗證;過去績效不代表未來表現。本策略最大回撤達 -32.7%,代表 100 萬可能一度縮水至約 67 萬,請依個人風險承受度審慎評估,僅使用虧損不影響生活的閒置資金。

最後更新:2026-07|回測區間:2018-01 ~ 2026-06(資料快照 2026-06-09)|作者:FinLab 量化研究團隊(經量化研究員審閱)

FinLab AI

想建立自己的策略?

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

免費開始

更多AI 與程式研究

查看全部