
「月營收年增率很高的股票,買了會賺嗎?」這是台股最常被問的選股問題之一。我們用 finlab 把這個想法做成可重現的策略並回測台股 2015 年到 2026 年共 11 年:把月營收動能(近三個月平均營收高於近十二個月平均營收)疊在價格動能(站上 20、60、120 日均線、近五日平均上漲)之上,每個月在營收公布後挑動能最強的 10 檔股票。
結論先講:這個策略在這段期間年化報酬 50.0%、日夏普 1.46、最大回撤 -35.6%,風險調整後的報酬確實勝過含息 0050(年化 21.3%、日夏普 1.08、回撤 -34.0%)。但有兩件事舊版文章沒講清楚,本文會據實補上:第一,要拿到這個報酬,你得扛得住一段 -35.6% 的回撤;第二,我們試著替它「加料」(加流動性過濾、分散到 20 檔),樣本內反而沒有更好。
真實回測結果:四個版本一次看
下表是同一段視窗(2015-01 至 2026-06)、同一組成本與停損設定下,三個策略版本與含息 0050 的對照。基準採 etl:adj_close 的 0050 還原股價買進持有,與策略同口徑。
| 版本 | 年化報酬率 | 日夏普 | 最大回撤 | 最差單一年 | 平均持股 |
|---|---|---|---|---|---|
| 原始 10 檔集中版 | 50.0% | 1.46 | -35.6% | -2.7% | 約 10 檔 |
| 加流動性過濾 | 48.6% | 1.39 | -40.9% | -24.1% | 約 10 檔 |
| 分散 20 檔+部位上限 | 43.1% | 1.43 | -37.9% | -23.6% | 約 20 檔 |
| 含息 0050 買進持有 | 21.3% | 1.08 | -34.0% | — | 1 檔 |
三個版本的年化報酬都在 43% 到 50% 之間,遠高於 0050 的 21.3%;日夏普也都在 1.39 到 1.46,高於 0050 的 1.08。換句話說,月營收動能在這 11 年是一個風險調整後確實有效的訊號,不只是賭高報酬而已。
為什麼月營收動能會有效
月營收動能其實同時站在兩個學術上站得住腳的效應上。價格動能來自 Jegadeesh & Titman (1993) 的經典發現:過去相對強勢的股票,未來一段期間傾向繼續相對強勢。而把基本面消息(如營收、盈餘)的動能納入,則呼應 Chan, Jegadeesh & Lakonishok (1996) 對盈餘動能的研究:市場對基本面好消息的反應往往會延遲、逐步擴散,要一段時間才完全反映,留下可被系統化捕捉的漂移。
台股的月營收是全球少見、每月強制揭露的高頻基本面資料,這正是 finlab 資料庫的強項。月營收動能等於把「基本面在改善」與「股價已經啟動」兩個訊號疊在一起,篩掉只有題材沒有業績、或業績好但股價還沒反應的兩種雜訊。
把它「加料」,反而沒有更好
直覺上,加一層流動性過濾、或把持股分散到 20 檔,應該會讓策略更穩。我們把這兩個常見的「改良」做成對照版本,結果卻是反直覺的:

- 加流動性過濾(平均日成交 > 500 張):年化從 50.0% 小降到 48.6%,最大回撤反而從 -35.6% 加深到 -40.9%,最差單一年也從 -2.7% 惡化到 -24.1%。濾掉低量股這件事在這段樣本裡並沒有讓風險更小。
- 分散到 20 檔+單檔部位上限 8%:年化降到 43.1%,日夏普 1.43 與原版 1.46 幾乎一樣,回撤 -37.9% 也沒有比較淺。分散確實降低了單一個股風險,但代價是犧牲了報酬,風險調整後並沒有占到便宜。

這個對照的價值,在於提醒一件容易被忽略的事:在同一段歷史資料上反覆加條件去「優化」,很容易挑到剛好對這段期間有利的設定,也就是過度擬合。當一個改良在樣本內沒有明顯好處時,與其硬加,不如保留簡單版本、把判斷留給樣本外。這也是為什麼本文把三個版本的數字都攤開,而不是只挑最漂亮的那一個。
逐年報酬:多數年份領先,但波動更大

逐年看,策略在多數年份領先 0050,但年度波動明顯更大:好的年份大幅領先,遇到逆風的年份也會吃到較深的回檔。這是高動能策略的本質,不是可以靠調參數消除的特性。
方法揭露與風險
漂亮的數字需要交代清楚是怎麼算出來的,這樣你才知道哪些風險被涵蓋、哪些沒有:
- 交易成本與稅:回測已內含台股手續費與證交稅。月再平衡的年換手不低,成本對淨值的侵蝕是真實存在的,實單還會有滑價。
- 集中度與容量:原始版本只持有約 10 檔,且偏好短期動能最強的中小型股,單一個股的暴漲暴跌對組合影響大,可投入的資金規模也有上限。在意單一個股風險的人,分散 20 檔版本是合理的取捨。
- 最大回撤 -35.6%:這是這個策略真實的代價。年化 50% 的另一面,是你必須能在帳上浮虧三成五時不停損出場。扛不住回撤的人,再高的年化都拿不到。
- 前視偏誤的處理:以每月第 11 天再平衡對齊營收公布時點,已盡量避免用到未公布資料;但仍假設你能在當天以收盤價成交。
- 樣本內結果:本文是單一視窗(2015–2026)的回測,未做樣本外切割(
in_sample_only)。過去績效不保證未來,務必把上面的「加料反而沒更好」當成過度擬合的警訊看待。
常見問題
月營收選股真的有效嗎?
以這 11 年的台股回測來看,月營收動能是有效的:疊上價格動能後年化 50.0%、日夏普 1.46,風險調整後勝過含息 0050。但「有效」不等於「穩賺」,它伴隨 -35.6% 的最大回撤,需要能承受波動的資金與紀律。
月營收年增率(YoY)能用來選股嗎?
可以當條件,但單看單月年增率容易被低基期與一次性收入誤導。本文改用近三月均營收與近十二月均營收的相對位置來判斷動能,過濾掉單月暴衝,訊號更穩定。
為什麼要等到每月第 11 天再平衡?
台股月營收在每月 10 日前公布,把進場日設在第 11 天,是為了確保策略只用「已經公布」的營收資料,避免前視偏誤。提早進場會偷看到未來,回測數字會虛高。
月營收動能和月營收漂移(PEAD)一樣嗎?
不一樣。月營收動能著重在「營收趨勢向上且股價已啟動」的順勢買進;月營收漂移則是研究營收公布後股價持續漂移的事件效應。兩者可以互補,完整比較見下方延伸閱讀。
延伸閱讀
- 台股選股策略 2026:單因子全輸 0050,複合策略勝出 — 完整選股總覽,比較 ROE、動能、低波動等因子的並列回測
- 多因子選股打敗 0050 — 把營收動能和其他因子組合,看分散到多因子如何改善風險調整報酬
- 月營收漂移 PEAD 策略 — 同樣用月營收,但鎖定公布後的漂移事件效應
- 月營收的三種取得與計算方法 — 用 Python 取月營收、處理公布日與前視的完整教學
投資警語:本文僅供教學與研究參考,不構成投資建議。過去績效不代表未來表現,投資有風險,請依個人風險承受度審慎評估。
VIP 區域接著提供完整可重現的月營收動能策略:核心 finlab 程式碼、互動式回測報告,以及可下載的 strategy.py 與 data.csv(原始 10 檔版年化 50.0%、日夏普 1.46、最大回撤 -35.6%,並逐行說明 11 日再平衡與三月/十二月均營收的設計)。
VIP 區域包含策略細節
登入後可看策略優化、完整程式碼與互動式回測報告
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

