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

現金減資選股:月營收動能加剛減資的股票,
年化 48.7%、夏普 1.50

現金減資是利多還是利空?單獨買剛辦完現金減資的股票,台股 2013 到 2026 年日夏普是負的;但疊在月營收動能上,讓剛辦完現金減資的候選股優先買進,2015 到 2026 年年化 48.7%、日夏普 1.50,原版 45.9%、1.42,0050 含息 20.2%、1.06。附程式碼、三項驗證與換股明細。

免安裝,用 AI 重跑這篇的策略

在瀏覽器開啟 FinLab Studio,AI 依本文的條件重跑回測,接著可以改條件再測。

在 Studio 重跑
剛減資的優先買 CAGR 48.7% Sharpe 1.50

現金減資選股回測:月營收動能加上現金減資、原版月營收動能與 0050 含息 2015-2026 累積淨值,年化分別為 48.7%、45.9%、20.2%

依本文重跑

執行這個策略

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

告訴你的AI:

幫我設定 FinLab,重跑月營收動能加上現金減資的策略,請讀:https://finlab.finance/setup?relatedUrl=/blog/cash-capital-reduction-revenue-momentum

免安裝,開啟 FinLab Studio

單獨買剛辦完現金減資的股票,台股 2013 到 2026 年是賠錢的;但同樣的資料當成加分條件,疊在已公開的月營收動能選股上,讓近 60 個交易日剛辦完現金減資的候選股優先買進,結果比原版好。 2015 年 2 月到 2026 年 10 月回測,年化報酬 48.7%、日夏普 1.50;原版是 45.9%、1.42;同期 0050 含息是 20.2%、1.06。

這一條規則在 12 年裡只換了 67 筆交易進來(原版有 68 筆被換掉),換進來的平均每筆賺 5.7%,被換掉的平均 2.2%。改善幅度不大,而且集中在 2015 到 2020 年的前段,後段只比原版高 0.01;這些限制下面都會寫清楚。

關鍵數字:本文策略、原版與 0050

2015-02-11 至 2026-10-30 年化報酬 日夏普 月索提諾 最大回撤 年化波動 最差單一年
月營收動能+現金減資(本文) 48.7% 1.50 2.80 -35.5% 30.6% -4.0%(2022)
原版月營收動能 45.9% 1.42 2.62 -35.6% 30.9% -2.7%(2022)
0050 含息買進持有 20.2% 1.06 1.98 -34.0% 19.8% -21.4%(2022)

本文策略在年化報酬、日夏普、月索提諾與最差單一年都勝過 0050 含息;最大回撤與年化波動輸給 0050。12 年下來淨值成長約 105 倍,原版約 84 倍,0050 含息約 8.7 倍。數字都用 finlab 2.2.24、資料截至 2026-10-30,在 2026-10-31 實際跑出,手續費 0.1425% 與證交稅 0.3% 用 sim() 預設值扣除。

現金減資是什麼

現金減資是公司把多出來的資本退還給股東:股數按比例減少,每減少一股退回面額 10 元。例如收盤 50 元的公司減資兩成,每 1,000 股換成 800 股,另外退 2,000 元。停止買賣一段時間、換發新股後恢復買賣,參考價重新計算:

參考價 =(停止買賣前收盤價 − 每股退還金額)÷ 換發比例 =(50 − 2)÷ 0.8 = 60 元

上市公司在公告裡稱為「退還股款」,上櫃公司稱為「現金減資」。另一種減資是彌補虧損減資,只把帳上虧損沖掉、股東拿不到錢,兩者在財務上的意義相反。FinLab 的 capital_reduction_tse 與 capital_reduction_otc 有恢復買賣日期、減資原因、恢復買賣參考價與換算比例(停止買賣前收盤價 ÷ 恢復買賣參考價),index 是恢復買賣日。上櫃的減資原因 2019 年起才有,之前的上櫃減資分不出是哪一種,本文不納入。

為什麼把現金減資當加分條件

公司手上有用不完的現金卻不還給股東,經理人比較容易把錢花在報酬低的地方;Jensen (1986) 稱為自由現金流量的代理問題,把錢發還股東可以降低這個成本。Ikenberry, Lakonishok & Vermaelen (1995) 研究另一種把錢還給股東的方式(公開市場買回),公告後股價長期有超額報酬,市場對這類訊號反應不足。照這兩個方向,現金減資應該是好消息。

台股的資料卻不是這樣。我們在公司行動事件回測裡測過單獨買進:2013 年 5 月起,換算比例 0.9 以下(參考價比減資前收盤價高 11% 以上)的 110 次現金減資,恢復買賣後持有 60 天(持有期滿的 107 次),平均落後 0050 含息 2.9%,只有 36% 跑贏,做成策略的日夏普是 -0.34。一個可能的解釋是辦現金減資的公司常是本業成長停下來、手上現金用不到的公司,單看減資挑到的多半不是強勢股;本文沒有驗證這一點。

所以本文換一個用法:先用月營收與股價趨勢篩出營收正在成長、股價也在走強的候選股,再在這批候選股裡,讓剛辦完現金減資的公司優先。營收在成長的公司還把錢退給股東,跟「沒事做才退錢」是不同的情況。

策略規則:沿用原版,只加一條

基底是站上的月營收動能選股,參數 2026 年初就公開了,這次完全不動,從 2015 年起算,跟它的策略頁同一段起點,原版重跑到 2026-10-30 是年化 45.9%、日夏普 1.42(策略頁每天更新,數字會差一點)。唯一新增的是第三條:

  1. 月營收動能:近三個月平均營收高於近十二個月平均營收,月營收用公布後可取得的日期。
  2. 股價趨勢:收盤價同時站上 20、60、120 日均線。
  3. 現金減資加分:近 60 個交易日內辦完現金減資、恢復買賣,而且換算比例 0.9 以下的候選股,排在所有候選股前面。
  4. 選股與換股:其餘候選股依五日平均漲跌幅由強到弱排,取前 10 檔等權持有,每月營收公布後(月初第 11 天)換股,單檔跌 10% 停損。

第三條的寫法是在五日平均漲跌幅上加 1。五日平均漲跌幅一般在正負幾個百分點之間,加 1 之後,剛辦完現金減資的候選股一定排在最前面;沒有這種股票的月份,選股結果跟原版完全一樣。核心程式碼如下,完整版可在文末下載:

顯示程式碼
import pandas as pd
from finlab import data
from finlab.backtest import sim
 
close = data.get("price:收盤價")
rev = data.get("monthly_revenue:當月營收")
 
# 月營收動能與股價趨勢(原版條件)
pct_change = (close / close.shift() - 1).rolling(5).mean()
trend = (close > close.average(60)) & (close > close.average(20)) & (close > close.average(120))
rev_up = rev.average(3) > rev.average(12)
 
# 恢復買賣日起 60 個交易日內標成 True
flag = pd.DataFrame(False, index=close.index, columns=close.columns)
for market, ratio_key in (("tse", "twse_cap_divide_ratio"), ("otc", "otc_cap_divide_ratio")):
    reason = data.get(f"capital_reduction_{market}:減資原因")
    ratio = data.get(f"capital_reduction_{market}:{ratio_key}")  # 停止買賣前收盤價 ÷ 恢復買賣參考價
    events = (reason.isin(["退還股款", "現金減資"]) & (1 - ratio >= 0.1)).stack()
    for day, stock in events[events].index:
        if stock in flag.columns:
            row = close.index.searchsorted(day, side="right") - 1
            flag.iloc[row:row + 60, flag.columns.get_loc(stock)] = True
 
# 剛辦完現金減資的候選股加 1 分,取前 10 檔
score = pct_change + flag.astype(float)
position = score[trend & rev_up].is_largest(10).loc["2015-01-01":]
 
report = sim(position, resample="M", resample_offset="11D", stop_loss=0.1, upload=False)

flag 從恢復買賣日那一列開始標記,那天收盤後才知道減資已經完成;sim() 在換股日隔天收盤成交,沒有用到當天看不到的資料。

回測結果:多賺的來自 67 筆換股

年化報酬從 45.9% 提高到 48.7%,日夏普從 1.42 提高到 1.50,月索提諾從 2.62 提高到 2.80,最大回撤幾乎不變(-35.6% 到 -35.5%)。近三年日夏普 1.86,近五年 1.55,同期 0050 是 1.86 與 1.24,近三年跟 0050 打平。

加分版 12 年 1,402 筆交易、原版 1,403 筆,其中 1,335 筆完全相同。不同的部分,加分版換進來 67 筆剛辦完現金減資的股票(40 家公司),平均每筆 5.66%,中位數 2.27%,勝率 60%;被換掉的 68 筆是原版本來會買的強勢股,平均 2.20%,中位數 -0.13%,勝率 50%。

現金減資選股:加分換進來的 67 筆交易平均報酬 5.66%,被換掉的 68 筆平均 2.20%,其餘 1,335 筆兩個版本相同

換進來的報酬集中在少數幾筆:最賺的一筆 50.7%,前五筆都在 34% 以上。扣掉最賺的 5 筆,其餘 62 筆平均 2.85%,仍然高於被換掉的 2.20%,但差距從 3.5 個百分點縮小到 0.65 個百分點。逐年看,換進來的交易在 2017 年(7 筆平均 15.6%)與 2020 年(8 筆平均 17.9%)特別好,2021、2024 與 2026 年則是平均虧損(2026 年 4 筆平均 -9.2%)。

逐年報酬,12 個年度裡本文策略有 10 年贏 0050 含息(2015 年從 2 月 11 日起算,2026 年只算到 10 月 30 日),輸的是 2016 年(5.9% 對 19.6%)與 2019 年(4.6% 對 33.5%)。跟原版比,8 年較好、3 年較差、2015 年相同;較差的是 2022、2024 與 2026 年。

現金減資選股每年報酬:加分版、原版月營收動能與 0050 含息 2015-2026 年報酬比較

最深的回撤從 2018-06-25 跌到 2020-03-19,跌幅 -35.5%,2020-05-07 回到前高,跟原版是同一段、幅度幾乎一樣。這一條規則改變的持股很少,回撤主要還是由原版決定。

月營收動能加上現金減資、原版與 0050 含息的回撤曲線,加分版與原版幾乎重疊,最深回撤 -35.5%

三項穩健性驗證:鄰近參數、前後兩段、交易成本

三項檢查的「贏」是同一個意思:日夏普高於同一段期間的 0050 含息買進持有。0050 用 etl:adj_close 還原價純算術計算、不扣成本;兩邊的日夏普都是日報酬平均除以標準差乘以 √252,不扣無風險利率。加分窗口與持股檔數在看結果前就寫定(60 天、10 檔),之後沒有改。

檢查 標準 結果
鄰近參數 加分窗口(20、60、120 個交易日)乘上持股檔數(8、10、12),9 組至少 7 組贏 9/9 組贏,過
前後兩段 2015-02-11 到 2020-12-18、2020-12-21 到 2026-10-30 兩段都贏 前段 1.53 對 0.87,後段 1.48 對 1.22,過
交易成本 原參數、sim() 預設手續費與證交稅 1.50 對 1.06,過;不扣成本時 1.73
比原版好 同一組參數,加分後日夏普高於原版 9/9 組較高,過

現金減資選股鄰近參數 9 組日夏普熱圖:9 組都高於同期 0050 含息 1.06,原參數 1.50

9 組的日夏普介於 1.29 到 1.59,全部高於 0050。跟同檔數的原版比,9 組都提高,幅度從 +0.03 到 +0.14:加分窗口 20 天的三組只提高 0.03 到 0.07,120 天的三組提高 0.10 到 0.14。

加上現金減資前後 9 組日夏普的變化:9 組都提高,加分窗口 120 天的三組提高最多

前後兩段都贏 0050,但跟原版比,提高幾乎都在前段:前段原版 1.38、本文 1.53;後段原版 1.47、本文 1.48,只差 0.01。2020 年底之後,這條規則對夏普幾乎沒有貢獻。

現金減資選股前後兩段日夏普:前段本文策略 1.53、原版 1.38、0050 含息 0.87;後段分別為 1.48、1.47、1.22

同一批研究還測了另外 7 種疊在月營收動能上的公司行動條件(庫藏股三種、高股票股利、避開彌補虧損減資、避開大額現增、三種一起避開),照規則有 4 種也過關,但換進來的交易沒有比較好,或 12 年只換了幾筆,跟原版幾乎是同一個策略,所以只有本文另開策略頁;細節在同一批 7 個公司行動訊號的研究。本文策略是從 8 種組合裡挑出來的,樣本外的表現可能比回測差。

回測方法與限制

項目 本文做法
交易成本 sim() 預設手續費 0.1425%(買賣各一次)與證交稅 0.3%(賣出),未打折
滑價 未另外假設,以收盤價成交
股票池 finlab price:收盤價 裡有月營收的上市櫃股票,含已下市股票
流動性過濾 沒有,沿用原版
排除類別 未排除金融股、KY 股或全額交割股;上櫃 2019 年以前的減資分不出種類,不加分
前視偏差 月營收用公布可取得日;減資用恢復買賣日,那天收盤後才標記,sim() 在換股日隔天收盤成交
價格調整 均線與五日漲跌幅沿用原版,用未還原的收盤價;減資恢復買賣時參考價跳高,剛減資的股票比較容易站上均線,加分條件因此也間接用到這個跳價
權重 10 檔等權,沒有單檔上限,單檔跌 10% 停損
周轉率 12 年 1,402 筆交易,每年約 120 筆,平均持有約 25 天,勝率 43%
樣本內外 全段樣本內;基底參數沿用 2026 年初公開的原版,加分條件從同批 8 種組合中選出

每月只持有 10 檔,單一股票對結果影響很大;實際能放多少資金取決於這些股票的成交量,本文沒有估算策略容量。在同一段資料上挑規則的風險,可以參考回測過度擬合的機率,前視偏差與周轉率的定義在名詞頁。月營收動能這類短期動能策略,跟 Jegadeesh & Titman (1993) 研究的 3 到 12 個月價格動能不同,本文沒有用到他們的設定。

適合誰、不適合誰

適合:已經在用月營收或動能選股、想多一條簡單加分條件的人;能接受每月換股、單月可能大跌的人(最差的一個月是 2021 年 5 月的 -30.2%);想用台股特有的減資資料做研究的人。

不適合:要求回撤比 0050 小的人,這個策略最深回撤 -35.5%;期待這條規則大幅提高報酬的人,它只改變約 5% 的交易,2020 年底以後幾乎沒有差別;資金很大、需要分散到幾十檔的人。

常見問題

現金減資是利多還是利空?

單獨看偏利空。2013 到 2026 年台股換算比例 0.9 以下的現金減資,恢復買賣後 60 天平均落後 0050 含息 2.9%,只有 36% 跑贏。但同樣是現金減資,營收正在成長、股價也在走強的公司,表現比同條件的其他強勢股好,所以本文只把它當成加分條件。

現金減資和彌補虧損減資差在哪?

現金減資會退錢給股東,每減少一股退面額 10 元;彌補虧損減資只把帳上虧損沖掉,股東拿不到錢。彌補虧損減資恢復買賣後,股價平均也落後 0050,但大多借不到券、放空也賺不到,細節在減資事件研究與放空驗證。

現金減資恢復買賣的參考價怎麼算?

參考價等於停止買賣前收盤價減去每股退還金額,再除以換發比例。收盤 50 元、減資兩成、每股退 2 元的公司,參考價是(50 − 2)÷ 0.8 = 60 元。股價看起來漲了兩成,但股東手上的股數少了兩成、多拿了現金,總價值沒有變。

換算比例 0.9 以下大約是減資多少?

看股價高低。換算比例是停止買賣前收盤價除以恢復買賣參考價,現金減資有退款,股價越低,同樣的減資比例算出的換算比例越接近 1。收盤 50 元的公司大約要減資 12% 以上才會低於 0.9,股價很高的公司大約減資一成就夠。

一年有幾次現金減資可以用?

2014 年 10 月到 2026 年 10 月,換算比例 0.9 以下的現金減資共 103 次,平均一年不到 10 次,還要同時符合營收與股價條件才會被選進來。12 年裡加分條件實際換進來的交易是 67 筆,很多月份選股結果跟原版完全一樣。

為什麼後段幾乎沒有差別?

2020 年底到 2026 年,加分版日夏普 1.48、原版 1.47。換進來的交易在 2017 與 2020 年特別好,2021、2024 與 2026 年平均是虧損的。可能是事件本來就少,好的那幾筆剛好落在前段;本文沒有辦法分辨這是運氣還是效果消失。

這個策略可以直接照做嗎?

這是研究與回測結果,不是投資建議。實際操作時要考慮滑價、成交量與資金規模,本文沒有估算容量;每月只持有 10 檔,單一股票的影響很大。想自己重跑或修改,可以下載文末的 strategy.py。

延伸閱讀

下載資源

檔案 內容
strategy.py 本文策略的完整程式碼
data.csv 本文策略與 0050 含息的每日淨值
metrics.json 本文策略與 0050 含息的核心數字
report_strategy.html 本文策略的互動式回測報告
report_baseline.html 原版月營收動能的互動式回測報告

風險提示

本文所有策略與回測結果僅供教學與研究用途,不構成投資建議,也不推薦任何個股。過去績效不代表未來表現,本文策略最大回撤 -35.5%,單一年度也可能大幅落後大盤。投資一定有風險,請依自身風險承受能力審慎評估。

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

FinLab AI

想建立自己的策略?

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

免費開始

更多多因子選股研究

查看全部