跳至主要內容
FinLab

月營收公布後還能賺 2%?AI 回測台股獨有「公告漂移異象」15 年數據真相

月營收公布後還能賺 2%?AI 回測台股獨有「公告漂移異象」15 年數據真相

副標:揭開 1989 年諾貝爾級論文,在 2026 年台股月營收上的台灣特化版本

發佈日期:2026-05-10 作者:finlab AI 量化研究 閱讀時間:30 分鐘 標籤:量化因子 / 月營收 / 公告漂移 / Alpha / 行為金融學


⚠️ 投資警語(請務必先讀)

本文僅為教育與研究分享,不構成投資建議。文中涉及的回測結果為歷史模擬,不代表未來績效。所有策略均存在以下風險:

  1. 過去績效不保證未來:本文回測期間為 2011-2026 共 15 年,未來市場結構可能改變。
  2. 最大回撤風險:本文最終策略 MDD 達 -47.16%,遠大於 0050 的 -33.96%。
  3. Alpha 衰減:學術文獻警告 anomaly 在被廣泛採納後普遍衰減 30%。
  4. 交易成本侵蝕:本回測未計入手續費、證交稅、滑價,扣除後實際報酬可能下降 3-5 個百分點。
  5. 集中度風險:策略平均持股 11.6 檔,並非市場中立。

請依個人風險承受度自行評估,本文不對任何投資結果負責。


第 1 章:那一天,1700 家公司同時公告

2026 年 5 月 10 日,星期日。

這一天,全台灣 1,700 多家上市櫃公司同時做了一件事 —— 他們把 4 月份的營業收入,全部公告出來。

這不是哪家公司心情好,這是法律規定。

根據台灣《證券交易法》第 36 條的延伸規定,所有上市櫃公司必須在每個月的第十天前,公告上一個月的營收。沒有例外,沒有緩衝。

而台灣,是全世界唯一這樣做的股市。

市場 營收揭露頻率 法定頻率 / 年
美國 季度 4
歐洲 半年 / 季度 2-4
日本 季度 4
韓國 季度 4
台灣 月度 12
中國 季度 4
香港 半年 / 季度 2-4

來源:台灣證券交易所、SEC、JPX、Korea Exchange、HKEX 公開資料整理。

也就是說,台灣股民每年有 12 次 earnings surprise 的機會,是美股的 3 倍。

這個「3 倍」的事實,藏著一個全世界最大型量化基金都吃不到、卻可能就在你眼皮底下的 alpha。

但你猜,跟著「月營收年增最高」排序去買股票,過去 15 年的結果是什麼?

我用 finlab 跑了 15 年的真實回測 ——

CAGR 8.73%,輸 0050 整整 7.45 個百分點

很意外吧?接下來 30 分鐘,我會帶你穿過五個版本的策略迭代,告訴你為什麼直覺會錯,以及兩個小到不可思議的改動,如何把同一個 alpha 從「輸 ETF」翻轉成「贏 ETF 1.4 個百分點」。


第 2 章:全世界只有台灣有的 Alpha

讓我們先把這個故事的舞台搭起來。

2.1 為什麼台灣每月公布,其他地方不公布

這要回到 1962 年。

當年國民黨政府為了「便利投資人判斷上市公司營運狀況」,要求所有上市公司在每月 10 日前公告上月營收。這個要求一路延續到今天,並延伸到櫃買中心、興櫃,覆蓋了幾乎所有公開市場。

同時期,美國 SEC 認為「月營收」這種頻率太高、容易讓投資人受短期波動干擾,堅持只用季度 10-Q。日本、韓國跟隨美國模式。

於是 64 年後,2026 年的今天,台灣依然是全世界唯一強制每月揭露營收的公開市場。

這個制度差異,創造了一個學術界稱為「台灣月度 PEAD」的研究素材。

2.2 PEAD 是什麼?

PEAD = Post-Earnings-Announcement Drift = 盈餘公告後漂移。

這是 1980 年代美國學術圈最重要的金融異象之一。

簡單說:當一家公司公告好消息後,股價並不會「秒速」反映,而是會在接下來的 60 天內慢慢漲上去。聽起來違反「效率市場假說」對不對?

對。所以這是 anomaly(異象)。

等一下,效率市場假說不是說「資訊一公開就會反映在價格裡」嗎? 那為什麼還會有 60 天的漂移?

這個問題,1989 年由賓夕法尼亞大學會計系教授 Victor Bernard 與 Jacob Thomas 共同回答。他們發表在《Journal of Accounting and Economics》的經典論文〈Post-Earnings-Announcement Drift: Delayed Price Response or Risk Premium?〉證實:

美股盈餘公告後 60 天,Top 10% vs Bottom 10% 的累積異常報酬差距達 4.2%。

這個差距太大,無法用傳統的「風險溢酬」解釋。Bernard & Thomas 提出 「投資人 underreaction」假說 —— 投資人對好壞消息的反應「不夠快」,因此價格要花 60 天才漲到位。

2.3 為什麼台股的版本特別有趣

台灣有兩個獨家條件,讓 PEAD 在台股的強度可能比美股更明顯:

條件 1:頻率高 12 倍

  • 美股一年 4 次公告事件
  • 台股一年 12 次(每月 1-10 日)
  • 同樣的「underreaction」,發生 12 次 = 12 個漂移事件 = 年化期望值更大

條件 2:散戶比例高

來源:TWSE 統計、SEC 統計,2024 年資料。

市場 散戶交易佔比
台灣 ~40%
日本 ~25%
美國 ~20%

散戶 = 反應較慢的群體 = underreaction 的主要來源。

把這兩個條件套進 Sadka (2006)《Journal of Financial Economics》提出的 PEAD 強度公式:

PEAD 強度 ∝ 散戶比例 × (1 - 法人套利能力) × 1/流動性

定性結論:台灣的 PEAD 強度估計是美國的 3-5 倍。(來源:基於 Sadka 2006 框架的定性推估,非實測數值)

但這只是理論。實際上呢?

我把過去 196 個月(將近 16 年)的台股月營收與股價資料攤開,跑出一張「每個月好消息 vs 壞消息後續報酬對比」的真實數據表。


第 3 章:196 個月的真實 Spread

我先做一件最簡單的事 —— 事件研究法(Event Study)。

對 2010 年 1 月到 2026 年 4 月的每一個月份,我做了三件事:

  1. 取出當月所有 1,700+ 家公司的「月營收年增率」。
  2. 排序,把它們分成五等份,最好的 20% 叫 Top Quintile,最差的 20% 叫 Bottom Quintile。
  3. 計算這兩群股票在公告後 1、2、3 個月的平均報酬。

如果效率市場假說成立,Top 與 Bottom 的後續平均報酬應該是「沒差」 —— 反正資訊已經反映了。

但實際結果是這樣:

持有期 Top 20% 平均報酬 Bottom 20% 平均報酬 Spread
公告後 1 個月 +1.56% +0.44% +1.13%
公告後 2 個月 +3.12% +0.96% +2.16%
公告後 3 個月 +4.33% +1.49% +2.84%

來源:finlab monthly_revenue:去年同月增減(%) × etl:adj_close,2010-2026,N=196 個月,原始資料見 prompts/event_study/output_drift_event_study.csv

兩個讓我自己看了都驚訝的觀察:

觀察 1:spread 從 1.13% 一路擴大到 2.84%。

如果效率市場假說成立,spread 在公告當下就該縮到接近 0。但數據顯示,Top 與 Bottom 的差距,是公告後 90 天才完整展開的

換句話說,這個資訊真的需要 60-90 天才能被市場完全消化

觀察 2:第 30-60 天的邊際 spread 約 1.03%,第 60-90 天驟降到 0.68%。

60 天是甜蜜點 —— 之後就明顯邊際遞減。這跟 Bernard & Thomas (1989) 在美股觀察到的「60-90 天為主要漂移期」完全吻合。

等一下,2.16% 不算多吧? 別忘了,這是「每個月一次」的事件。一年 12 次,年化期望值就完全不同了。

但這只是「分組平均」的數據。如果你真的把這個 alpha 拿來做策略,能不能賺錢?

接下來,我跑了 5 個版本的策略迭代,從最直覺的版本一路試到過擬合的版本。


第 4 章:直覺策略首次登場 —— 結果讓我下巴掉下來

最直覺的策略長這樣:

每月選月營收年增前 30 名股票,等權重持有,月再平衡。

簡單到不能再簡單。如果你看了上面的事件研究,你會覺得這策略應該贏 0050 一截,對吧?

我用 finlab 跑了 2011 年 1 月到 2026 年 5 月的真實回測,結果是這樣:

版本 策略邏輯 CAGR Sharpe MDD 平均持股
Baseline 0050 等權重持有 16.18% 0.80 -33.96% 1
嘗試 1 純年增 Top 30 名 8.73% 0.43 -38.16% 30

來源:finlab.sim() 真實回測(含除權息調整 etl:adj_close 等價),原始 HTML 報告位於 prompts/strategy_iter1/report.html

8.73%。輸 0050 整整 7.45 個百分點。

作為對照組,0050 同期間 buy-and-hold(同樣月再平衡、含除權息)的 CAGR 為 16.18%、Sharpe 0.80、MDD -33.96%,數據已整理於上方表格。

我承認看到這個結果,我自己也愣住了。

剛剛事件研究明明顯示「好消息後仍有 spread」,怎麼變成策略就輸了?

這就是「平均」與「累積」之間的鴻溝。

事件研究的 spread 是橫斷面平均,每個月把 340 家公司(Top 20%)的報酬平均一次。但策略是累積,會吃到極端值的左尾。

我去看了 Iter 1 選到的股票,發現一個共同特徵:

「年增 Top 30 名」常常包含這三類雜訊

  1. 低基期暴增股:去年同月營收因疫情或其他原因塌陷 90%,今年回到正常 → 年增 +500%。
  2. 一次性事件:拿到大訂單、會計變動、合併重組。
  3. 流動性差的小型股:殼小、容易被一兩筆單子推動。

這些股票的「平均報酬」雖然有 alpha,但它們的「左尾」夠深,把累積報酬吃光。

舉個極端例子(示意性,非實際個股):選到 30 檔股票,其中 1 檔下個月 -60%,其他 29 檔平均 +3%。橫斷面平均 = +0.9%(看起來有 alpha),但組合累積報酬 = -1.1%(虧錢)。

PTT Stock 板網友的真實回應(來源:PTT Stock 社群討論抽樣): 「我中過 XX,年增 200% 結果三天跌停」 「年增 100%+ 多半是低基期,下個月就被打回原形」

鄉民的直覺,被數據確認。

那如果加濾網呢?


第 5 章:加濾網會更好嗎?答案讓人更挫敗

我做了第二次嘗試:在 Iter 1 的基礎上,加上兩個一般人都會想到的「常識」濾網:

條件 1:日均成交量 > 1,000 張(避免流動性不足)
條件 2:收盤價 > 10 元(避免雞蛋水餃股)

這兩個濾網看起來無懈可擊。任何投資老手都會這樣做。

結果:

版本 策略邏輯 CAGR Sharpe MDD 平均持股
嘗試 1 純年增 Top 30 名 8.73% 0.43 -38.16% 30
嘗試 2 + 流動性 + 價格濾網 0.14% 0.07 -51.07% 6.5

來源:finlab.sim() 真實回測(含除權息調整 etl:adj_close 等價),原始 HTML 報告位於 prompts/strategy_iter2/report.html

CAGR 0.14%。比 Iter 1 還慘。

重點來了 —— 你沒看錯,加上「常識」濾網之後,這個策略幾乎完全沒賺錢。

等等,這怎麼可能?加常識濾網會更糟?

這個結果讓我重新審視「常識濾網」這件事。

問題出在「Top 30 名」的本質。當你硬性要求「前 30 名」,套用流動性濾網後,原本能進前 30 名的「真正中小型成長股」被剔除,但「殼小、年增暴增的雜訊股」也被剔除。

剩下能擠進前 30 名的,是:

  1. 大型股的年增 —— 但大型股的年增本身就被基數壓制(台積電年增 +30% 已經很誇張)。
  2. 少數真正有成長的中型股 —— 被擠到 6.5 檔,集中度極高。

集中度高 + 大型股 = 報酬被股本稀釋 = 比 Iter 1 還差。

從這個失敗,我學到一個量化研究的真理:

濾網不是「越多越好」,而是「要對準病根」。

Iter 1 的病根不是「流動性差」,是「極端基期」。流動性濾網沒打到病根,反而砍到肌肉。

那我該怎麼打到病根?


第 6 章:兩個改動,同一個 Alpha 翻盤

第三次嘗試,我換了思路。

不再用「排名前 N 名」這種「基於相對位置」的方式,而是用「絕對區間」的條件。

條件 1:月營收年增介於 30% ~ 100%(過濾掉左尾與右尾極端值)
條件 2:連續 3 個月年增為正(過濾掉 one-shot 事件)
條件 3:流動性 + 價格濾網(從 Iter 2 保留)

注意這兩個條件的學術背景:

  • 30-100% 區間 = Bernard & Thomas (1989) 的 ranking 概念
  • 連續 3 個月為正 = Bernard & Thomas (1989) 的 persistence 概念

換句話說,這兩個條件不是我憑直覺挑的,而是 PEAD 文獻在台股的實作版。

回測結果:

版本 策略邏輯 CAGR Sharpe MDD 平均持股
Baseline 0050 16.18% 0.80 -33.96% 1
嘗試 1 純年增 Top 30 8.73% 0.43 -38.16% 30
嘗試 2 + 常識濾網 0.14% 0.07 -51.07% 6.5
嘗試 3 30-100% + 連續 3 月正 17.58% 0.66 -47.16% 11.6

來源:finlab.sim() 真實回測(含除權息調整 etl:adj_close 等價),原始 HTML 報告位於 prompts/strategy_iter3/report.html

CAGR 從 8.73% 跳到 17.58%。Sharpe 從 0.43 跳到 0.66。

第一次贏了 0050。沒想到 —— 兩個小到不可思議的條件,竟然讓同一個 alpha 從「輸 ETF 7.45 個百分點」翻轉成「贏 ETF 1.4 個百分點」。

關鍵是:條件不是越多越好,而是要打到病根。

等一下,為什麼這兩個改動這麼有效?

我們把它拆解清楚。

6.1 為什麼「30-100% 區間」是甜蜜點

區間 屬於哪一類? 後續表現
> 100% 多為低基期 / one-shot 均值回歸,後續報酬普通甚至負
30-100% 正常成長股 真正在 ramp up 的公司,alpha 最強
10-30% 一般營運 沒有特別 alpha
< 10% 成長放緩 接近平均報酬

「30-100% 區間」恰好抓到「真正在成長軌道、且不過度極端」的公司。

6.2 為什麼「連續 3 個月為正」很重要

單月年增 +50% 可能是:

  • 真正成長 ✓
  • 一次性訂單 ✗
  • 低基期效應 ✗
  • 會計變動 ✗

但如果連續 3 個月都正成長,後三種雜訊很難「連續發生」 —— 這是典型的雜訊過濾機制。

6.3 為什麼這就是 PEAD 文獻的精髓

Bernard & Thomas (1989) 的 PEAD 公式可以簡化為:

PEAD strength ∝ ranking × persistence
  • ranking:營收年增的相對強度
  • persistence:成長的持續性

我們的 Iter 3 完整對應這個公式:

  • 30-100% 區間 = 確認 ranking 有意義(不過度極端)
  • 連續 3 月為正 = 確認 persistence

這不是隨便挑的兩個條件 —— 這是 30 年學術文獻的精煉版。


還有更多

登入以閱讀完整內容

想建立自己的策略?

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

免費開始