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

美股公司行動事件回測:配息調升、拆股、納入 S&P 500,
六種訊號全輸 QQQ

美股公司行動能當交易訊號嗎?2016 到 2026 年實測配息調升、首次配息、除息捕捉、正向拆股、納入與剔除 S&P 500 共六種事件,54 組參數只有 1 組扣成本前贏 QQQ,收每邊 0.1% 成本後夏普變成 -0.51,附程式可重跑。

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

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

在 Studio 重跑
六種公司行動,沒有一種贏 QQQ

美股公司行動事件回測:配息調升、首次配息、除息捕捉、正向拆股、納入與剔除 S&P 500 對 QQQ 含息的累積淨值,2018 至 2026 年

依本文重跑

執行這個策略

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

告訴你的AI:

幫我設定 FinLab,重跑美股公司行動事件回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/us-corporate-actions-event-backtest

免安裝,開啟 FinLab Studio

我們把六種公司行動寫成交易規則,在美股普通股上測 2016 年 7 月到 2026 年 11 月:配息調升、首次或恢復配息、除息捕捉、正向拆股、納入 S&P 500、剔除出 S&P 500。六種都沒有贏含息的 QQQ。日夏普最高的是除息捕捉 0.75,QQQ 是 0.93,收每邊 0.1% 成本後掉到 0.29。配息調升年化 12.4%、夏普 0.72,和等權 S&P 500 的 RSP 打平,離 QQQ 的年化 20.0% 還很遠。54 組參數只有 1 組扣成本前贏 QQQ,收每邊 0.1% 成本後夏普變成 -0.51。

站上的美股研究多半是用因子排序股票,或替大盤擇時。公司行動是另一種訊號:公司或指數委員會公布的事件,有明確日期,學術研究也累積了幾十年。這篇只問一個實際的問題:用當時真的查得到的日期,在事件之後買進,結果有沒有比直接買 Nasdaq 100 好?

公司行動訊號關鍵數字

訊號 原參數 日夏普 年化報酬 最大回撤 贏 QQQ 前後兩段夏普 每邊 0.1% 夏普 扣 BIL 夏普
配息調升 持有 120 日、$20M 0.72 12.4% -41.6% 0 / 9 0.79 / 0.64 0.68 0.60
首次或恢復配息 持有 120 日、$5M 0.33 4.1% -26.0% 0 / 9 0.41 / 0.24 0.31 0.17
除息捕捉 除息前 3 日、殖利率 1% 0.75 8.6% -30.1% 1 / 9 0.70 / 0.86 0.29 0.57
正向拆股 持有 120 日、$20M 0.56 5.0% -17.6% 0 / 9 1.01 / 0.32 0.54 0.33
S&P 500 納入 持有 60 日、單檔 10% 0.47 6.0% -25.3% 0 / 9 0.57 / 0.39 0.44 0.32
S&P 500 剔除 持有 60 日、單檔 10% 0.52 5.4% -27.9% 0 / 9 0.79 / 0.20 0.50 0.32
QQQ 含息 基準 0.93 20.0% -35.1% 1.27 / 0.60 0.92 0.83
SPY 含息 參考 0.86 14.8% -33.7%
RSP 等權 S&P 500 參考 0.72 12.0% -39.0%

QQQ、SPY、RSP 的區間是 2016-07-05 至 2026-11-06。首次配息的第一筆事件在 2018 年 1 月,剔除規則的第一筆交易在 2016 年 11 月,兩者各自和同一段日期的 QQQ 比(QQQ 夏普分別是 0.79 和 0.91)。參數裡的金額是日均成交值下限,單位美元。

六種美股公司行動訊號原設定的日夏普,對照 RSP、SPY 與 QQQ,零成本

測試的六條規則

  • 配息調升。 公司的常規每股股利比上一次常規配息高出 1% 以上(已調整拆股)。持有 60、120 或 240 個交易日,流動性門檻 500 萬、2,000 萬或 5,000 萬美元。
  • 首次或恢復配息。 公司在兩年沒有配息之後配息,且至少有兩年股價資料。持有 60、120 或 240 日,門檻 100 萬、500 萬或 2,000 萬美元。這類事件少,所以門檻放低。
  • 除息捕捉。 除息日前 1、3 或 5 個交易日買進,除息日收盤賣出,只做單次股利佔股價至少 0.5%、1% 或 2% 的配息。細節見除息日價差與成本的實測。
  • 正向拆股。 拆股比例至少 1 股拆成 1.5 股。持有 60、120 或 240 日,門檻 500 萬、2,000 萬或 5,000 萬美元。
  • 納入與剔除 S&P 500。 兩條獨立規則,股票進入或離開指數時買進。持有 20、60 或 120 日,單檔上限帳戶的 5%、10% 或 20%。細節見指數成分變動前後的路徑。

每條規則是 3 × 3 的參數格點,中間那格是原設定,格點在看到任何結果前就寫好。持股等權,單檔上限 5%(格點另有設定者除外),符合的股票少於 20 檔時其餘留現金。

事件研究最難的是日期

公司行動要在你知道的那天才有用,規則的日期都用當時已公開的資訊來定。

事件 使用的日期 為什麼重要
配息 宣告日;來源沒有宣告日時用除息日 宣告日的涵蓋率依年份約 80% 到 90%。來源的 key_date 欄位都是 2026 年回補的時間,不能當作股利公開的日子
正向拆股 拆股日 來源沒有宣告日,所以規則沒辦法交易拆股公告本身
S&P 500 變動 名單被觀察到的日子 2022 年 11 月以前快照間隔的中位數是 8 天,這個日子可能比實際公告晚好幾週

有三項清理對結果影響很大。來源的股利沒有調整拆股(蘋果 2020 年 1 拆 4 前後,每股股利從 0.82 美元變成 0.205 美元),所以比較前先用同一張表的拆股比例換算。特別股利不列入調升基準:距離上一次配息不到 20 天,或金額達到最近四次常規配息中位數的兩倍以上,都不算調升。代號變更(例如 Fiserv 的 FISV 變成 FI)不算真的納入,一週內就被改回的名單編輯也不算,我們從 S&P 500 名單刪掉這樣的 32 對。沒做這一步,納入規則的夏普是 0.41,做完是 0.47。

股票池是美股普通股,含下市股票,一家公司留一個股別,排除 ETF、基金與 ADR。事件當天收盤價要高於 5 美元,過去一年沒有單日漲跌 50% 以上,日均成交值用未還原的收盤價計算;用還原價會高估之後做過反向分割的股票的成交值。公司資料註明美國以外國家的公司不列入配息與拆股規則,因為它們的股利是換算成美元,股利沒變也可能看起來像調升。

策略怎樣才算過關

「贏」指同一段日期裡,日夏普高於含息的 QQQ,沒有扣無風險利率。以下條件都在看到結果前固定:

  1. 鄰近參數。 9 組參數至少 7 組贏 QQQ。
  2. 前後兩段。 原設定在前後兩段都要贏。
  3. 成本。 finlab 美股預設成本 0 和每邊 0.1% 都要贏。
  4. 現金。 扣掉短天期國庫券(BIL)後的報酬也要贏,因為有些規則大多時間留現金。
  5. 單一年份。 拿掉領先 QQQ 最多的那個日曆年後,還要領先。

六條規則五項全部沒過。54 組參數裡唯一贏 QQQ 的是除息前 1 日買進、殖利率下限 0.5% 的除息捕捉,扣成本前夏普 1.11。

六種美股公司行動訊號 9 組參數的日夏普減 QQQ 熱力圖

每張小圖是一條規則,列是持有天數(除息捕捉是提前買進的天數),欄是第二個參數:流動性、殖利率下限或單檔上限。結果一致低於 QQQ,看不到只在少數倒楣參數上輸的情況。

配息調升:持股很廣,結果和 RSP 打平

配息調升規則平均持有 256 檔,一直滿倉。這麼多檔,行為就像一個等權的大中型配息股組合:夏普 0.72,RSP 也是 0.72;年化 12.4%,RSP 12.0%。最大回撤 -41.6%,比 RSP 的 -39.0% 深一點。單邊週轉一年 3.1 次,成本影響小,每邊 0.1% 下夏普從 0.72 變成 0.68。

事件本身沒有帶來能量測到的優勢。配息調升後 120 個交易日,平均比 QQQ 少 4.87 個百分點,只有 38.6% 的事件領先。5,828 次調升幾乎涵蓋市場上大部分配息公司,所以這個比較多半是在比配息股和 Nasdaq 100。Benartzi、Michaely 與 Thaler(1997)發現股利調升反映的多半是過去的盈餘,對未來盈餘成長的訊息有限,和這裡看到的訊號比好消息晚到一致。相關的研究有美股知名選股公式回測裡的股利成長條件,它要求連續三年調升。台股類似的做法見現金股利調高選股,單獨買也輸 0050,要搭配月營收動能才有用。

首次或恢復配息

2018 年起,日均成交值 500 萬美元以上的股票有 220 次首次或恢復配息。組合平均持有約 12 檔,平均投入 58%,常常有一部分留現金。年化 4.1%、夏普 0.33,前後兩段 0.41 和 0.24,QQQ 同期是 0.57 和 1.06。

Michaely、Thaler 與 Womack(1995)發現首次配息後股價持續上漲。這裡 20 天後平均領先 QQQ 0.77 個百分點,120 天後落後 3.94 個百分點,120 天時只有 37.1% 的事件領先。只有 220 次事件,短天期的數字都在雜訊範圍內,樣本的市場環境也和他們當年研究的很不一樣。

正向拆股:看不到漂移

規則平均持有約 7 檔,平均投入 37%。前半段夏普 1.01,QQQ 是 1.27;後半段 0.32,QQQ 是 0.60。Ikenberry、Rankine 與 Stice(1996)和 Desai 與 Jain(1997)發現拆股後一年以上有正的異常報酬。這個樣本裡,拆股後 120 天平均落後 QQQ 1.61 個百分點,240 天落後 6.29 個百分點。中位數落後更多,120 天 -5.19 個百分點,少數大贏家把平均值拉高了。

事件之後平均發生什麼事

訊號 事件數 1 日 5 日 20 日 60 日 120 日 240 日 120 日贏 QQQ 的比例
配息調升 5,828 +0.01% -0.10% -0.68% -2.41% -4.87% -10.39% 38.6%
首次或恢復配息 220 -0.14% +0.39% +0.77% -1.76% -3.94% -9.09% 37.1%
正向拆股 164 -0.33% -0.11% -0.18% -1.43% -1.61% -6.29% 41.7%
S&P 500 納入 201 -0.02% +0.39% -0.71% -1.09% -0.85% -9.98% 36.4%
S&P 500 剔除 119 +0.09% -0.04% -1.24% -0.76% +0.45% -5.90% 44.5%

報酬從成交日(訊號隔天)起算,減同一段日期的 QQQ。之後價格不夠長的事件不列入較長天期的欄位。

五種公司行動事件後 1 到 240 個交易日的平均報酬減 QQQ,除息捕捉另見專文

表上看得出兩件事。第一,前一週的數字都很小,之後偏向負值,看不到舊論文裡的那種漂移。第二,QQQ 的門檻很高:年化 20.0%,到了 240 天,每一列只有 32% 到 38% 的事件領先它。

為什麼 2022 年是六條規則領先最多的一年

領先 QQQ 最多的日曆年,六條規則都是 2022 年。那年 QQQ 跌 32.6%,這些組合跌得少很多,或大致持平。拿掉這一年,QQQ 的夏普從 0.93 升到 1.26,配息調升從 0.72 升到 0.85。規則輸在 QQQ 快速上漲的年份,而這段時間裡這樣的年份佔了多數。

配息調升規則逐年報酬減 QQQ,2016 至 2026 年

樣本後半段比較接近。QQQ 的夏普從 1.27 掉到 0.60,配息調升(0.64)和除息捕捉(0.86)在這一段贏 QQQ,但前半段都輸,所以沒過前後兩段檢查。這項檢查擋的就是只在一段時間有效的規則。

除息捕捉與指數變動:分開寫成兩篇

除息捕捉和 S&P 500 變動各有不少內容要交代,所以另外寫。重點如下:

  • 美股除息日的價差:除息日股價跌幅小於股利,單次股利 0.5% 到 2% 的配息,每筆扣成本前約 0.17% 到 0.18%,比來回 0.2% 的成本還小。
  • 納入 S&P 500 前後的股價:納入股在名單日期之前 20 天平均已經贏 QQQ 約 5.2 個百分點,120 天後大部分又吐回去。

和其他研究對照

台股也有同類研究。台股公司行動事件回測測股票股利、庫藏股、現金增資與減資,7 個訊號只有 1 個贏 0050,方向和本文接近。除權息全攻略則討論台股的棄息、抱息與稅務。

美股其他事件研究裡,盈餘驚喜策略用財報事件替大盤擇時,用法和本文買進持有事件股票不同。想看整體哪些規則有效,可以從美股量化交易策略比較和 QQQ、SPY、VOO、VTI 比較開始。剛接觸規則化投資,可以先看量化交易入門。

程式碼

這段是正向拆股規則,六條裡最短。用到 2026-11-06 的資料,它印出的日夏普是 0.56,FinLab 修訂資料時最後一位可能變動。research.py 包含六條規則、54 組參數和五項檢查。

顯示程式碼
import finlab
import numpy as np
import pandas as pd
from finlab import data
from finlab.backtest import sim
 
finlab.login()
data.set_market("us")
data.truncate_end = "2026-11-06"
 
adj_close = data.get("us_price:adj_close")
raw_close = data.get("us_price:close")
volume = data.get("us_price:volume")
days = adj_close.index
 
# 美股普通股,含下市股票,一家公司留一個股別
profile = pd.DataFrame(data.get("us_company_profile")).astype({"stock_id": str}).drop_duplicates("stock_id")
keep = (
    (profile["security_type"] == "common_stock")
    & ~profile["is_etf"].fillna(False).astype(bool)
    & ~profile["is_fund"].fillna(False).astype(bool)
    & ~profile["is_adr"].fillna(False).astype(bool)
)
stocks = profile.loc[keep, ["stock_id", "company_name", "country"]].astype(str).sort_values("stock_id")
stocks = stocks.drop_duplicates("company_name")
stocks = stocks[stocks["stock_id"].isin(adj_close.columns)]
us_stocks = set(stocks.loc[stocks["country"].isin(["US", "nan"]), "stock_id"])
columns = sorted(stocks["stock_id"])
 
# 事件當天可交易:收盤高於 5 美元、日均成交值 2,000 萬美元、一年內沒有單日漲跌 50%
dollar_volume = (raw_close * volume).rolling(60, min_periods=20).mean()
daily_return = adj_close.pct_change(fill_method=None)
wild = (daily_return.abs() >= 0.5).astype(float).rolling(252, min_periods=1).max().shift(1).fillna(0) > 0
tradable = (raw_close > 5) & (dollar_volume > 20e6) & ~wild
tradable = pd.DataFrame(tradable).reindex(index=days, columns=columns).fillna(False).astype(bool)
 
# 1 股至少拆成 1.5 股的正向拆股
actions = pd.DataFrame(data.get("us_corporate_actions")).astype({"symbol": str})
splits = actions[(actions["split_factor"] >= 1.5) & actions["symbol"].isin(us_stocks)]
 
events = pd.DataFrame(False, index=days, columns=columns)
rows = np.searchsorted(days.values, pd.DatetimeIndex(splits["date"]).values)
for row, symbol in zip(rows, splits["symbol"]):
    if symbol in events.columns and row < len(days):
        events.iloc[row, events.columns.get_loc(symbol)] = True
 
# 每次拆股持有 120 個交易日,單檔上限 5%
position = (events & tradable).astype(float).rolling(120, min_periods=1).max() > 0
position = position.loc["2016-07-01":"2026-11-06"]
position = position.loc[:, position.any()]
 
report = sim(position, resample=None, position_limit=0.05, upload=False)
returns = report.creturn.pct_change().dropna()
print("日夏普:", round(returns.mean() / returns.std() * 252 ** 0.5, 2))

不想自己寫也可以。照 AI 輔助安裝流程裝好 FinLab skill,或直接到 FinLab Studio 用白話請 AI 重跑,例如「配息調升只測 S&P 500 成分股」或「拆股規則加上 20 日動能濾網,每邊收 0.05% 成本」。

回測方法

項目 做法
回測區間 2016-07-01 至 2026-11-06。FinLab 美股價格與股利資料從 2016 年 1 月開始;首次配息要求兩年沒配息,所以從 2018 年 1 月開始
股票池 美股普通股,含下市股票,一家公司留一個股別,排除 ETF、基金與 ADR。S&P 500 規則用當天的指數成分
流動性 60 日平均(未還原收盤價 × 成交量)在事件當天高於門檻;收盤價高於 5 美元,過去一年沒有單日漲跌 50% 以上。S&P 500 規則以指數成分取代
訊號日期 配息用宣告日(缺值用除息日),拆股用拆股日,指數變動用觀察日,見上表。在資料允許的範圍內控制前視偏差
成交 收盤算訊號,隔天收盤成交,使用還原價
權重 等權,單檔上限 5%(S&P 500 格點另有設定),名單變動的日子重新等權;現金沒有利息
成本 finlab sim() 美股預設 0,另跑每邊 0.1%。未另估滑價。目標權重單邊週轉率一年 0.8 次(拆股)到 27.5 次(除息捕捉)
稅 未計,除息捕捉的稅負見專文
資料 股利與拆股來自單一資料商,可能漏報。規則雖要求事件前有兩年股價,但沒有資料列不代表沒配息
樣本 全段都是樣本內,前後兩段只檢查穩定度,沒有做樣本外驗證

這個結果能說明什麼

在這段期間和這些規則下,配息調升、首次配息、正向拆股、S&P 500 變動之後買進,都沒有贏 QQQ;除息捕捉 9 組參數有 1 組扣成本前贏。配息調升組合的風險調整報酬和等權 S&P 500 相同,所以已經持有等權美股的人,偏向調升股在這裡看不出壞處,也看不出好處。

這篇無法告訴你原始的學術效果還在不在。我們的日期是資料裡最早能驗證的日期,S&P 500 變動還晚於實際公告。測試涵蓋的十年,QQQ 又特別強。如果你交易的是小型股的公司行動,或想交易公告而不是事件日,需要另外測。

常見問題

公司行動能預測股價嗎?

在這個測試裡不能。2016 到 2026 年,六條美股事件規則都沒贏含息的 QQQ,最接近的是除息捕捉,扣成本前夏普 0.75,QQQ 是 0.93。

買配息調升的股票是好策略嗎?

在這個測試裡和等權 S&P 500 打平:年化 12.4%、夏普 0.72,RSP 是 12.0% 和 0.72。9 組參數全部輸 QQQ 的 20.0% 和 0.93。

股票拆股後會漲嗎?

正向拆股後 120 個交易日,平均落後 QQQ 1.61 個百分點,中位數落後 5.19 個百分點。每次拆股持有 120 日的組合年化 5.0%、夏普 0.56。舊研究發現正的漂移,但樣本是另一段時間。

首次配息後股價會漲嗎?

這個樣本沒有。2018 年起日均成交值 500 萬美元以上的 220 次事件,組合夏普 0.33、年化 4.1%,事件後 120 天平均落後 QQQ 3.94 個百分點。

為什麼用 QQQ 比,不用 S&P 500?

站上所有美股策略都用 QQQ 當基準,結果才能互相比較。表上也列了 SPY 和 RSP:配息調升和 RSP 打平,輸 SPY 與 QQQ。

有任何參數贏 QQQ 嗎?

54 組有 1 組:除息捕捉,除息前 1 日買進、單次股利至少 0.5%,扣成本前夏普 1.11。每邊收 0.1% 後變成 -0.51。

可以自己重跑嗎?

可以。透過 AI 輔助安裝流程裝好 FinLab skill,下載下面的 research.py,執行 python research.py。

延伸閱讀

下載資源

檔案 內容
research.py 完整研究:六條規則、54 組參數、前後兩段、成本重跑、五項檢查與事件研究
data.csv 六條規則原設定,加上 QQQ、SPY、RSP 的每日淨值
metrics.json 本文背後的統計,包含交易、持股數、事件後報酬與逐年報酬

投資警語:本文僅供教學參考,不構成投資建議,也不推薦任何個股。過去績效不代表未來表現,投資有風險。本文所有回測均為全段樣本內結果,前後兩段未經樣本外驗證。

最後更新:2026-11|回測區間:2016-07~2026-11|資料截至 2026-11-06,重跑日 2026-11-09|基準:QQQ 含息|作者:FinLab 量化研究團隊(經量化研究員審閱)

FinLab AI

想建立自己的策略?

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

免費開始

更多教學與觀念研究

查看全部