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

庫藏股是什麼?公告後買進的台股實測:19 年年化 25.4%,
近三年卻輸 0050

庫藏股是什麼?公司買回自家股票是利多還是利空?用 finlab treasury_stock 資料實測台股 2007 至 2026:公告的預定買回起始日隔天買進、持有 20 個交易日,年化 25.4%,同期含息 0050 為 13.3%;但近三年策略反而輸給大盤。五種持有天數、回撤與方法限制全部公開。

公司護盤,跟著買有用嗎?台股 19 年實測 CAGR 25.4% Sharpe 1.21

台灣公司公告買回庫藏股之後,跟著買進到底有沒有超額報酬?本文用 finlab 的 treasury_stock 資料庫,把 2007-10-12 到 2026-07-28 之間每一筆公告的「預定買回期間起始日」都當成訊號,隔天以開盤價買進、持有 20 個交易日:年化報酬 25.4%,同一段時間含息 0050 是 13.3%;換算成累積淨值,1 元分別變成 70.5 元與 10.4 元。同一份回測也給出兩個沒那麼漂亮的事實:持有天數拉長到 60 日以上,年化掉到 15% 以下、幾乎貼著大盤;而近三年(2023-07 到 2026-07)這個策略反過來輸給 0050。本文把五種持有天數、回撤、逐年成績與所有方法限制攤開來講。

庫藏股公告後持有 20 日策略與含息 0050 的累積淨值對照,2007 至 2026 台股回測

依本文重跑

執行這個策略

複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。

告訴你的AI:

幫我用 finlab 回測庫藏股公告後買進策略,比較持有 10、20、40、60、120 日的年化報酬與最大回撤,請讀:https://finlab.finance/setup?relatedUrl=/blog/treasury-stock-investment-strategy

免安裝,開啟 FinLab Studio

關鍵數字

回測區間 2007-10-12 ~ 2026-07-28,五種持有天數與含息 0050 在同一視窗對照:

指標 持有 10 日 持有 20 日 持有 40 日 持有 60 日 持有 120 日 0050 含息
年化報酬率 26.6% 25.4% 22.3% 14.7% 14.1% 13.3%
夏普比率 1.11 1.21 1.16 0.80 0.77 0.67
月索提諾比率 1.94 2.05 1.59 1.05 0.97 1.00
最大回撤 -35.6% -43.0% -48.8% -54.6% -58.6% -55.8%
平均持股數 9.2 檔 17.4 檔 33.9 檔 49.2 檔 88.9 檔 1 檔
1 元變多少 83.8 元 70.5 元 44.0 元 13.1 元 11.9 元 10.4 元

三個讀法:第一,事件效果集中在公告後的第一個月,持有 10 日與 20 日的年化都在 25% 以上,拖到 60 日以後只剩大盤水準。第二,10 日版本年化最高、回撤最淺,但平均只持有 9.2 檔,單一部位重、換股極頻繁;20 日版本在日夏普 1.21、月索提諾 2.05 的風險調整指標上最好,持股也較分散,本文的圖表以它為主。第三,全期 19 年來看,20 日版本在年化報酬(25.4% 對 13.3%)、日夏普(1.21 對 0.67)、最大回撤(-43.0% 對 -55.8%)三項都優於含息 0050;不過這個優勢近三年翻轉了,後面的衰退追蹤一節會攤開講。

庫藏股是什麼?

庫藏股(treasury stock)是公司從市場上買回、自己持有而尚未註銷的自家股票。 買回的股票沒有投票權,也不參與股利分配。台灣的庫藏股制度自 2000 年 8 月上路,依《證券交易法》第 28 條之 2,公司買回自家股票只能有三種目的:

  1. 轉讓股份給員工:作為員工獎酬或認股計畫的股票來源。
  2. 股權轉換:供發行的可轉換公司債、附認股權特別股等轉換之用。
  3. 維護公司信用及股東權益:也就是俗稱的「護盤」,買回後必須辦理註銷減資。

制度上還有幾個約束:買回數量不得超過已發行股份總數的 10%、買回總金額不得超過保留盈餘加發行溢價及已實現資本公積的總和,而且必須在董事會決議後兩個月內執行完畢。公司決議買回時,會在公開資訊觀測站公告預定買回的期間、數量與價格區間,這份公告就是本文策略的資料來源。

第三種目的的註銷型庫藏股,效果等同於減資:流通在外股數變少,每股盈餘(EPS)被動提高。想看減資事件的另一面,可以參考減資事件的放空策略實測,那是一個方向完全相反的事件交易研究。

庫藏股是利多還是利空?學術文獻怎麼說

公司宣布買回庫藏股,市場通常解讀成兩層訊息:管理層認為股價被低估(訊號效果),以及公司即將在市場上出現一股持續的買盤(供需效果)。這個現象在財務學術圈有長期的實證:

  • Ikenberry、Lakonishok 與 Vermaelen(1995)研究美股公開市場買回宣告,發現宣告後四年平均約有 12% 的累積異常報酬,價值型(高帳面市值比)公司更明顯;作者的解讀是市場對買回宣告反應不足(underreaction)。
  • Peyer 與 Vermaelen(2009)用更近的樣本確認這個異常報酬在 1990 年代之後依然存在,而且集中在宣告前股價被重挫的小型股,與「市場對先前的壞消息過度反應、買回宣告觸發修正」的解釋一致。

台股的情境跟第二篇特別像:台灣公司往往在股價急跌後宣布庫藏股護盤,事件本身同時攜帶「跌深」與「公司自認低估」兩層資訊。這也預示了後面會看到的策略性格:買到的多半是跌深的中小型股,在反彈行情裡很猛,在權值股獨強的行情裡會脫隊。

策略設計:公告後隔天買進,持有固定天數

策略規則一句話講完:某公司公告的預定買回期間起始日一到,隔天開盤買進,持有 N 個交易日後退出;期間內所有觸發的股票平均分配資金。用 finlab 寫出來如下(執行時套件會自動引導登入,不需要在程式裡填任何金鑰):

顯示程式碼
from finlab import data
from finlab.backtest import sim
import pandas as pd
 
close = data.get("price:收盤價")
 
# 庫藏股「預定買回期間-起」:每一格是該公司公告的買回起始日
raw = data.get("treasury_stock:預定買回期間-起")
 
# 攤平成「日期 × 股票」的事件表
events = pd.DataFrame({
    "stock_id": [s for s in raw.columns for _ in raw[s].dropna()],
    "dates": [d for s in raw.columns for d in raw[s].dropna()],
})
events["value"] = 1
 
# 同一檔同一天可能有多筆公告,要先去重,否則 pivot 會直接報錯
events = events.drop_duplicates(subset=["stock_id", "dates"])
events = events.pivot(index="dates", columns="stock_id", values="value").notna()
events = events.reindex(close.index, columns=close.columns).fillna(False)
 
# 只保留事件發生當天,避免整段買回期間都被標記
events = events & (~events.shift(-1).fillna(False))
 
# 事件隔天進場,持有 20 個交易日
position = events.shift(-1).rolling(20).sum().fillna(0)
report = sim(position, trade_at_price="open",
             fee_ratio=1.425 / 1000 * 0.2, market="TW_STOCK")

一個實作細節值得單獨講:本文 2023 年的初版程式碼少了 drop_duplicates 那一行,當年跑得動,但同一家公司後來出現同一天送出多筆買回公告的資料,pivot 會拋出 Index contains duplicate entries 錯誤直接中斷。如果你在別處抄過類似的事件策略程式碼,大概率也有同一顆地雷。

持有天數敏感度:事件效果只有一個月的保鮮期

初版文章只跑了持有 40 日這一種設定。這次把 10、20、40、60、120 日全部跑一遍,並對齊到同一個起始日(2007-10-12,理由見回測方法一節):

庫藏股策略持有天數敏感度:持有 10 日年化 26.6%,持有 120 日只剩 14.1%,紅線為平均持股數

年化報酬隨持有天數單調遞減:10 日 26.6%、20 日 25.4%、40 日 22.3%、60 日 14.7%、120 日 14.1%,對照含息 0050 的 13.3%。事件的超額報酬幾乎全部發生在公告後的第一個月,之後買盤退場,持股表現就退化成一籃子普通的中小型股。紅線的平均持股數則往反方向走:從 10 日的 9.2 檔一路增加到 120 日的 88.9 檔,分散是變好了,但稀釋掉的正是訊號最強的那段時間。

初版宣稱的「年化 20% 以上」(40 日版本)經這次重跑確認屬實:對齊視窗後年化 22.3%。這也是這篇改版的起點:當年的文章只給了一張截圖,沒有留下任何可下載、可重現的檔案,這次補齊。

互動式回測報告(持有 20 日版本)。要注意這份報表跑的是該策略自身的完整區間(2007-05-21 起),不是上表為了六列可比而切齊的 2007-10-12,所以面板上的年化與平均持股會略高於表格數字:

風險:最大回撤 -43%,護盤股照樣被海嘯打穿

年化 25% 的另一面是深回撤。下圖是持有 20 日版本與含息 0050 的水下曲線(距離前次淨值高點的百分比):

庫藏股策略水下曲線:最大回撤 -43.0%,含息 0050 為 -55.8%,最深處都落在 2008 年金融海嘯

2008 年金融海嘯時策略最深跌到 -43.0%,比 0050 的 -55.8% 淺。0050 那次是實實在在的腰斬,策略雖然沒到一半,四成的回撤同樣足以讓多數人中途放棄;2015 年最深回落 -30.0%,2021、2023、2025 年也各有 20% 上下的回撤。公司護盤不等於股價止跌,系統性風險來的時候,庫藏股買盤擋不住整個市場的賣壓。打算執行這類策略的人,要先確定自己承受得住連續數月帳面 -30% 以上的狀態。

逐年成績:19 個年度贏 14 年,輸的集中在最近

庫藏股策略與 0050 含息逐年報酬對照,19 個年度中策略贏 14 年

逐年對照下,策略在 19 個年度裡贏了 14 年。空頭年的防禦力很突出:2008 年策略 -24.7% 對 0050 的 -43.3%,2022 年策略 +52.2% 對 0050 的 -21.4%(那年大量公司在下跌中宣布護盤,事件供給暴增)。反轉年更是主場:2009 年策略 +207.7% 對 0050 的 +75.0%,正是 Peyer 與 Vermaelen 說的「跌深小型股修正」情境。

輸掉的 5 個年度裡,有 3 個是最近三年:2024 年策略 +19.6% 對 0050 的 +48.6%、2025 年 +11.9% 對 +36.8%、2026 年(統計至 7 月 28 日)+15.6% 對 +51.1%。這不是抽樣噪音,是結構性的,下一節單獨處理。

策略衰退追蹤:近三年為什麼輸 0050

依本站的季度重跑慣例,把最近三年(2023-07-28 ~ 2026-07-28)與 2026 年至今單獨切出來看:

區間 持有 10 日 持有 20 日 持有 40 日 0050 含息
近三年年化報酬 42.0% 21.6% 23.5% 47.6%
2026 年至 7/28 +33.8% +15.6% +5.5% +51.1%

兩個觀察。第一,事件訊號本身沒有失效:近三年 10 日版本年化仍有 42.0%,絕對報酬非常高。第二,相對表現全面落後,原因在基準端:這三年台股由台積電等權值股領漲,市值加權的 0050 年化衝到罕見的 47.6%,而庫藏股公告幾乎都發生在跌深的中小型股上,這個策略天生買不到帶動指數的那幾檔。權值股獨強的行情持續多久,這個策略就會落後多久;反過來,中小型股補漲或市場急跌後修正的環境,是它歷史上表現最好的時候。

這一段的用意是把衰退據實記錄下來,而非調整參數讓數字變好看。持有 10 日在近三年比 20 日強,是事後才知道的結果,本文維持以風險調整指標選出的 20 日為主要版本。

回測方法與限制

項目 本文設定
資料與訊號 finlab treasury_stock:預定買回期間-起;訊號日為公告中載明的預定買回起始日,公告先於或等於該日,策略在訊號日的下一個交易日才進場,無前視偏差
回測區間 2007-10-12 ~ 2026-07-28。起始日取五個變體中「最晚有部位」的那一天(120 日版本要累積滿 120 個交易日),所有變體與 0050 都從同一天起算,否則各列數字不可互相比較
交易成本 sim() 內扣手續費 0.1425% 的 2 折(fee_ratio=1.425/1000*0.2)與賣出證交稅 0.3%(預設值);若你的券商沒有折扣,實際成本更高
滑價 未假設,一律以開盤價成交。庫藏股事件股常是跌深中小型股,實單未必吃得到開盤價
股票池 回測期間內所有公告過庫藏股的上市櫃股票,含已下市個股(降低生存者偏誤);未另外排除 KY 股與全額交割股
流動性過濾 無。小型股部位的實際容量有限,本文未估算策略容量
權重 sim() 對部位值的比例配置,絕大多數時候各持股等權;同一檔在持有視窗內若出現第二筆公告,權重會加倍。未設單檔上限
周轉率 持有僅 10 至 120 個交易日,年周轉率極高(未逐月統計);持有天數越短,成本假設對結果的影響越大
樣本內外 全段 in-sample,未做樣本外切分;持有天數以敏感度表呈現,避免單點宣稱

完整可重現的檔案都放在文章目錄下,歡迎下載重跑:strategy.py(一次跑五種持有天數與 0050 對照)、data.csv(六條累積淨值日序列)、metrics.json(本文表格的全部數字)。想系統性了解回測要注意的坑,可以從回測完整指南開始。

用程式自動下單

這個策略每天都要盯公告、算部位,適合交給程式。finlab 的下單模組可以把回測部位直接轉成券商委託單,以永豐證券為例(需先申請 API,金鑰透過環境變數設定):

顯示程式碼
import os
from finlab.online.sinopac_account import SinopacAccount
from finlab.online.order_executor import OrderExecutor, Position
 
# 金鑰放在環境變數,不要寫死在程式裡
# SHIOAJI_API_KEY / SHIOAJI_SECRET_KEY / SHIOAJI_CERT_PERSON_ID
# SHIOAJI_CERT_PATH / SHIOAJI_CERT_PASSWORD
 
# 以 30 萬台幣計算當前帳戶應該持有的部位
fund = 300000
target_position = Position.from_report(report, fund)
 
# 產生並送出委託單
acc = SinopacAccount()
order_executor = OrderExecutor(target_position, acc)
order_executor.create_orders()

程式會比對目前帳戶與目標部位的差異,自動送出買賣委託;預設用限價單,也可以透過客製化設定改成漲跌停價、零股或融資券。

常見問題

庫藏股是利多還是利空?

實證上偏利多:美股文獻顯示買回宣告後有長期正異常報酬,本文的台股回測也顯示公告後一個月內有明顯超額報酬。但它同時是「公司股價已經跌深」的訊號,利多兌現與否跟後續市場環境高度相關,2024 到 2026 年策略連三年輸給 0050 就是例子。

公司實施庫藏股,股價一定會漲嗎?

不一定。2008 年金融海嘯期間照樣宣布庫藏股的公司,策略組合當年仍然 -24.7%;護盤買盤擋不住系統性賣壓。庫藏股提供的是統計上的勝率優勢(19 個年度贏 14 年),對單一公司、單一事件沒有保證。

庫藏股買回的股票後來會怎麼處理?

依目的而定:轉讓給員工、供可轉債等轉換,或辦理註銷。註銷會讓股本縮小、EPS 被動上升,效果等同減資。依規定買回的股票須在期限內處理完畢,逾期未處理即視為未發行並辦理註銷。

庫藏股公告要去哪裡查?

官方來源是公開資訊觀測站的重大訊息與庫藏股專區。用程式抓的話,finlab 的 treasury_stock 資料表整理好了每筆公告的預定買回期間、數量與價格區間,本文的策略只用到「預定買回期間-起」一個欄位。

這個策略 2026 年還有效嗎?

絕對報酬仍在(近三年 10 日版本年化 42.0%、20 日 21.6%),但近三年全面輸給含息 0050 的 47.6%,因為這波行情由權值股帶動,跌深中小型股為主的事件組合吃不到。把它當成「與大盤性格互補的事件策略」比當成「打敗大盤的聖杯」更符合數據。

為什麼持有越久報酬越差?

超額報酬集中在公告後約一個月內,那是買回買盤實際在場的時間。持有 60 日以上,事件效果被攤薄,組合退化成一籃子中小型股,年化就掉回大盤水準(14% 左右)。

手續費和證交稅有算進去嗎?

有。sim() 預設內扣賣出證交稅 0.3%,本文另設手續費 0.1425% 的 2 折。滑價未假設;由於周轉率極高,成本假設對這個策略的影響比一般月調倉策略大,券商折扣越少,實際績效與回測的差距越大。

想更進一步優化這個策略?

進階版把買回目的、公司規模等條件疊進來篩選事件,見 庫藏股策略再優化(Part 2,VIP 文章)。另一個角度是把「全市場庫藏股實施家數」當成大盤情緒指標,見庫藏股實施家數:崩盤後的長線抄底訊號

延伸閱讀


投資警語:本文僅供教學與研究參考,不構成投資建議。過去績效不代表未來表現,投資一定有風險,請審慎評估自身風險承受能力。

最後更新:2026-07|回測區間:2007-10-12~2026-07-28|作者:FinLab 量化研究團隊(經量化研究員審閱)

FinLab AI

想建立自己的策略?

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

免費開始

更多籌碼面研究

查看全部