
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
幫我設定 FinLab,重跑月營收動能加上現金減資的策略,請讀:https://finlab.finance/setup?relatedUrl=/blog/cash-capital-reduction-revenue-momentum
單獨買剛辦完現金減資的股票,台股 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(策略頁每天更新,數字會差一點)。唯一新增的是第三條:
- 月營收動能:近三個月平均營收高於近十二個月平均營收,月營收用公布後可取得的日期。
- 股價趨勢:收盤價同時站上 20、60、120 日均線。
- 現金減資加分:近 60 個交易日內辦完現金減資、恢復買賣,而且換算比例 0.9 以下的候選股,排在所有候選股前面。
- 選股與換股:其餘候選股依五日平均漲跌幅由強到弱排,取前 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%。

換進來的報酬集中在少數幾筆:最賺的一筆 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 年。

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

三項穩健性驗證:鄰近參數、前後兩段、交易成本
三項檢查的「贏」是同一個意思:日夏普高於同一段期間的 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 組的日夏普介於 1.29 到 1.59,全部高於 0050。跟同檔數的原版比,9 組都提高,幅度從 +0.03 到 +0.14:加分窗口 20 天的三組只提高 0.03 到 0.07,120 天的三組提高 0.10 到 0.14。

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

同一批研究還測了另外 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。
延伸閱讀
- 月營收動能選股:本文的基底策略,含原版的三項驗證。
- 公司行動事件回測:庫藏股、減資、現金增資、股票股利 7 個訊號與 8 個組合的完整結果。
- 可轉債選股:同一個底策略加上避開可轉債發行公司,另一個用公司財務決策排雷的例子。
- 庫藏股是什麼?公告後買進的台股實測:另一種把錢還給股東的方式。
- 股票選股完整指南:基本面、技術面、籌碼面選股方法的總覽。
- 本文策略的策略頁:淨值曲線每天更新,程式可直接帶到 FinLab Studio 重跑。
下載資源
| 檔案 | 內容 |
|---|---|
| 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 自動驗證、回測、給你答案
免費開始

