月營收公布後還能賺 2%?AI 回測台股獨有「公告漂移異象」15 年數據真相
月營收公布後還能賺 2%?AI 回測台股獨有「公告漂移異象」15 年數據真相
副標:揭開 1989 年諾貝爾級論文,在 2026 年台股月營收上的台灣特化版本
發佈日期:2026-05-10 作者:finlab AI 量化研究 閱讀時間:30 分鐘 標籤:量化因子 / 月營收 / 公告漂移 / Alpha / 行為金融學
⚠️ 投資警語(請務必先讀)
本文僅為教育與研究分享,不構成投資建議。文中涉及的回測結果為歷史模擬,不代表未來績效。所有策略均存在以下風險:
- 過去績效不保證未來:本文回測期間為 2011-2026 共 15 年,未來市場結構可能改變。
- 最大回撤風險:本文最終策略 MDD 達 -47.16%,遠大於 0050 的 -33.96%。
- Alpha 衰減:學術文獻警告 anomaly 在被廣泛採納後普遍衰減 30%。
- 交易成本侵蝕:本回測未計入手續費、證交稅、滑價,扣除後實際報酬可能下降 3-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,700+ 家公司的「月營收年增率」。
- 排序,把它們分成五等份,最好的 20% 叫 Top Quintile,最差的 20% 叫 Bottom Quintile。
- 計算這兩群股票在公告後 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 名」常常包含這三類雜訊:
- 低基期暴增股:去年同月營收因疫情或其他原因塌陷 90%,今年回到正常 → 年增 +500%。
- 一次性事件:拿到大訂單、會計變動、合併重組。
- 流動性差的小型股:殼小、容易被一兩筆單子推動。
這些股票的「平均報酬」雖然有 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 名的,是:
- 大型股的年增 —— 但大型股的年增本身就被基數壓制(台積電年增 +30% 已經很誇張)。
- 少數真正有成長的中型股 —— 被擠到 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 年學術文獻的精煉版。
還有更多
登入以閱讀完整內容