
「買 0056 存股領息,長期就會贏。」這是台股最普遍的存股信仰之一。我們用 finlab 把 0056 的選股邏輯拆開重做,在台股實測 16 年(2010 年 6 月至 2026 年 7 月),結論很直接:純買 0056 是把報酬留在桌上。
先講數字。同樣以高股息為出發點,加上三道量化濾網篩出殖利率最高的 20 檔、季度換股,這個策略 16 年 CAGR 達 19.04%、日夏普 1.34,贏過含息 0056 的 12.41% 約 6.6 個百分點;總報酬 +1526.26%,而 0056 含息是 +550.39%。17 個年度裡有 13 年跑贏 0056。代價是波動更大:策略最大回撤 −30.23%,比 0056 的 −26.89% 更深。這篇文章把三道濾網、逐年勝負與真實方法口徑全部攤開,程式碼可下載自行重跑。
真實績效對照表:策略 vs 0056 含息
下表是同一段視窗(2010-06 至 2026-07)、finlab 預設交易成本(手續費 0.1425%、證交稅 0.3%)下,高股息量化策略與含息 0056 買進持有的完整對照。0056 的報酬含還原股利,是把股息再投入的口徑,並非只看價格。
| 指標 | 高股息量化策略 | 0056 含息(基準) |
|---|---|---|
| 總報酬率 | +1526.26% | +550.39% |
| 年化報酬(CAGR) | 19.04% | 12.41% |
| 夏普比率 | 1.34 | 0.92 |
| 索提諾比率 | 1.53 | 1.09 |
| 最大回撤 | −30.23% | −26.89% |
| 卡爾瑪比率(Calmar) | 0.63 | 0.46 |
三個重點先標出來。第一,CAGR 19.04% 對 12.41%,六個百分點的差距在 16 年複利下放大成總報酬近三倍的落差。第二,風險調整後的表現同樣勝出:夏普 1.34 對 0.92、索提諾 1.53 對 1.09、卡爾瑪 0.63 對 0.46,代表策略每承擔一單位風險換回的報酬更高。第三,策略最大回撤 −30.23% 比 0056 的 −26.89% 更深,多出來的三個百分點回撤,就是換取更高報酬要付的波動成本。
為什麼純買 0056 會把報酬留在桌上
0056 追蹤台灣高股息指數,設計上有兩個先天限制。其一,成分股數量固定、且需要足夠流動性,能納入的高股息股票有限,選股範圍被框死。其二,高現金股息本身不保證股價表現,很多高殖利率股是因為股價已經跌深、殖利率才被動墊高,這類「殖利率陷阱」在被動指數裡照樣會被納入。
高股息這個因子並非沒有價值,問題出在「只用殖利率排序」太粗糙。我們的做法是保留高股息的出發點,再疊上兩個過濾維度:股價是不是站在上升趨勢、以及這檔股票過去在壞行情裡跌得深不深。把「便宜(高殖利率)」「有趨勢」「抗跌」三件事同時要求,篩掉的正是那些殖利率好看、體質卻差的股票。

上面這張滾動一年超額報酬圖,把「策略相對 0056 在每一個滾動 12 個月區間的領先或落後」畫出來。多數時間策略在零軸之上,代表過去一年跑贏 0056;但也有幾段落到零軸之下,那些就是策略階段性輸給 0056 的時期。這張圖的意義是:超額報酬在短期會有起伏,靠的是長期累積贏,每個月並不穩定發生,抱得住是拿到那 6.6 個百分點的前提。
三道濾網:策略邏輯講清楚
這個策略的核心是三個條件同時成立,最後再取殖利率最高的 20 檔。三道濾網分別是:
- 滾動 520 日年化現金股息率。 把每次公告的現金股利除以當時收盤價得到單次殖利率,再用約兩年(520 個交易日)的滾動窗口累加,得到一個平滑後的年化股息率。用兩年窗口而非單一年度,是為了讓一次性配息不會過度放大或縮小殖利率評分。
- 多條均線趨勢分數。 計算收盤價站上 10、30、50 一路到 130 日均線的個數,站上越多條、趨勢分數越高。這是把「股價是否處於上升趨勢」量化成一個 0 到多的分數,篩掉均線糾結、方向不明的股票。
- 500 日滾動最小回撤。 用 500 個交易日的滾動窗口看每檔股票的最小回撤(相對前高的最深跌幅),取回撤表現最好的前段。這一步過濾掉在壞行情裡跌特別深的股票,留下抗跌能力較強的標的。
三個條件都通過後,再要求成交量大於 50000 張(確保實單買得到),最後在剩下的池子裡取滾動年化殖利率最高的 20 檔,每季換股一次。下面是這段選股邏輯的人類可讀版本,登入後即可重跑:
顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
from finlab.dataframe import FinlabDataFrame
finlab.login() # finlab 會自動引導登入
close = data.get("price:收盤價")
volume = data.get("price:成交股數")
# 股利以股東會日期對齊,用的是公告後才可得的資訊
div = data.get("board_dividend_announcement")
dates = div["股東會日期"].fillna(div["董事會決議(擬議)股利分派日"])
cash_dividend = (
div.drop_duplicates(["stock_id", "股東配發之現金(股利)總金額(元)"], keep="first")
.groupby([div.stock_id, dates])
.first()["盈餘分配之現金股利(元/股)"]
.dropna().reset_index()
.pivot(index="股東會日期", columns="stock_id", values="盈餘分配之現金股利(元/股)")
)
# 濾網一:滾動 520 日年化現金股息率
dividend_yield = (cash_dividend / close).rolling(520, min_periods=1).sum()
# 濾網二:收盤價站上 10~130 日均線的個數(趨勢分數)
trend_score = sum([close > close.average(i) for i in range(10, 150, 20)])
# 濾網三:500 日滾動最小回撤(抗跌能力)
drawdown = close / close.cummax()
min_drawdown = drawdown.rolling(500, min_periods=200).min()
# 三道濾網取前 30%、成交量過濾,再取殖利率最高 20 檔
pool = FinlabDataFrame(dividend_yield)[
(trend_score.rank(axis=1, pct=True) > 0.7)
& (min_drawdown.rank(axis=1, pct=True) > 0.7)
& (volume > 50_000)
]
position = pool.is_largest(20)
# 季度換股回測,finlab 預設已內含手續費與證交稅
report = sim(position, resample="Q")
report.display()逐年報酬:不是每年都贏
一個策略平均贏,不代表每一年都贏。下面這張逐年報酬長條圖,把策略與 0056 每個年度的報酬並排,可以看出勝負分佈。

17 個年度(含 2026 年 YTD 未完整年)裡,策略在 13 年跑贏 0056。逐年報酬(策略/0056,單位 %)如下:2010 年 37.0/27.0、2011 年 −12.7/−12.8、2012 年 17.6/8.7、2013 年 40.5/4.9、2014 年 18.3/9.3、2015 年 −3.4/−5.4、2016 年 16.0/11.3、2017 年 21.9/12.4、2018 年 −2.3/1.5、2019 年 23.0/29.0、2020 年 16.8/9.3、2021 年 25.0/18.7、2022 年 1.9/−17.7、2023 年 64.9/56.9、2024 年 36.6/7.7、2025 年 1.2/12.0、2026 年 25.1/50.5(YTD)。
輸給 0056 的四個年度值得單獨看:2018、2019、2025 與 2026 年(YTD)。2019 與 2026 這兩年是大盤與 0056 走大多頭、權值股領漲,策略偏中小型高股息的選股在這種行情裡相對落後;2018 與 2025 則是策略小輸。最亮眼的兩年是 2022 與 2024:2022 年 0056 含息下跌 −17.7%,策略靠抗跌濾網守到 +1.9%,這一年是超額報酬的主要來源之一;2024 年策略 +36.6%、0056 只有 +7.7%,趨勢濾網在多頭裡選到對的股票。
回撤比較:波動更大是換更高報酬的代價

上面這張回撤比較圖把兩者的水下曲線疊在一起。策略最大回撤 −30.23%,比 0056 的 −26.89% 更深。原因是策略持股集中在 20 檔、且偏向中小型高股息股,個股波動大於分散的指數,在系統性下跌時跌得更兇。這是必須正視的取捨:更高的 CAGR 不是免費的,它用更深的回撤與更大的帳面起伏換來。卡爾瑪比率(年化報酬除以最大回撤)0.63 對 0056 的 0.46,代表即使把更深的回撤算進去,策略每承擔一單位最大回撤換回的報酬仍然較高,但這不改變「你要抱得住 −30% 帳面浮虧」這個現實。
回測方法與限制
- 回測區間與換股:2010 年 6 月至 2026 年 7 月,共約 16 年,季度換股(
resample="Q"),每季選殖利率最高的 20 檔。2026 年為 YTD,非完整年度。 - 交易成本與稅:使用 finlab
sim()預設,已內含手續費 0.1425% 與賣出證交稅 0.3%,未另外假設滑價。 - 股利對齊與前視偏差:現金股利以「股東會日期」對齊(無股東會日期者用董事會決議股利分派日),用的是公告之後才可得的資訊,因此選股時點不會用到尚未揭露的股利資料,避免前視偏差。
- 流動性過濾:要求成交量大於 50000 張,避免回測買得到、實單買不到的情況。
- 集中度:只持有 20 檔且偏中小型高股息股,單一個股的漲跌對組合影響較大,最大回撤 −30.23% 深於 0056。
- 樣本內結果:本文是單一視窗(2010–2026)的全段回測,未做樣本外切割(
in_sample_only)。三道濾網的參數是在同一段歷史上選定,請把逐年勝負當成對這段資料的觀察,而非對未來的保證。過去績效不代表未來表現,13/17 年跑贏也意味著有 4 年會輸。
高股息因子的學術根據
用股利殖利率篩選股票有其學術基礎。Fama & French (1988) 發現股利殖利率對股票長期報酬有預測能力,高殖利率往往對應較高的未來報酬。這也是為什麼「高股息」值得當成選股的起點。但單看殖利率不夠,本策略把它和趨勢、抗跌兩個維度合起來用,正是為了避開那些殖利率被動墊高、基本面卻在惡化的殖利率陷阱。
結論
在 2010 至 2026 這 16 年、本文設定下,純買含息 0056 的 CAGR 是 12.41%,而在高股息基礎上疊加滾動年化股息率、均線趨勢分數與最小回撤三道濾網、季度換股選 20 檔的量化策略,CAGR 達到 19.04%,17 年裡 13 年跑贏。差距來自把「便宜」「有趨勢」「抗跌」三件事同時要求,篩掉了殖利率陷阱。代價是波動更大、回撤更深(−30.23% 對 −26.89%),且 2018、2019、2025、2026(YTD)這幾年會輸給 0056。想用最新資料即時重算、或換成自己的參數,跑下方的程式即可。
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
幫我設定 FinLab,重現這篇文章用滾動年化股息率、移動平均趨勢與最小回撤選出 20 檔打敗 0056 的高股息策略回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/python-finlab-optimization
延伸閱讀
- 量化交易完整指南 — 三種台股量化策略的真實回測總覽與線上回測器
- 0056 高股息 ETF 復刻:用量化策略打造進階版 — 從 0056 選股邏輯出發的復刻與改良
- 動能策略台股 18 年回測 — 純動能輸 0050、加品質因子才翻轉的完整實測
- 多因子選股打敗 0050 — 把多個因子合成的完整多因子版本
- 三項現金流策略:年化 25.5% — 用現金流分析篩選財務穩健的好公司
VIP 區域接著提供完整可下載程式與互動式回測報告:strategy.py 與 data.csv 可自行重現本文 CAGR 19.04%、夏普 1.34、最大回撤 −30.23% 的全部數字,並附可逐年檢視持股與交易明細的互動式回測儀表板,跑一次即得當季持股清單。
本文內容僅供教學與研究參考,不構成投資建議或推薦。投資有風險,過去績效不代表未來表現,本策略最大回撤達 −30.23%,且並非每年都贏 0056。讀者應自行評估風險承受度,並在做出投資決策前諮詢專業顧問。
VIP 區域包含策略細節
登入後可看策略優化、完整程式碼與互動式回測報告
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

