
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
設定 FinLab,重跑聖誕行情等 5 個美股日曆效應對 QQQ 的回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/santa-claus-rally-calendar-effects-backtest
**我們用 2016 年 1 月到 2026 年 10 月的 QQQ 與 SPY,回測美股最常被提起的 5 個日曆效應:聖誕行情、Sell in May(萬聖節效應)、月初效應、節前效應,以及「五窮六絕」的 5、6 月空手。結果沒有一個贏過單純抱著 QQQ。原始參數最好的是 SPY 版的五窮六絕,日夏普 0.72,QQQ 含息買進持有是 0.93;90 組鄰近參數也沒有一組贏。**名氣最大的聖誕行情表現最差:套用在 QQQ,這 7 個交易日平均只漲 0.15%,比任意連續 7 個交易日的平均(0.57%)還少,最近 5 年每一年都是跌的。月初與節前兩個效應的日報酬仍高於其他日子,但差異不到統計顯著,涵蓋的天數也太少,做成策略贏不了一直持有指數。
5 個日曆效應關鍵數字
每個規則只在窗口內持有 ETF,其他時間空手。下表是套用在 QQQ 的結果;SPY 版的數字在圖表與 metrics.json。
| 規則(出處) | 持有期間 | 在場比例 | 日夏普 | 年化報酬 | 最大回撤 | 贏 QQQ 的參數組 | 前/後半段日夏普 |
|---|---|---|---|---|---|---|---|
| 聖誕行情(Hirsch 1972) | 12 月最後 5 個交易日+1 月前 2 個交易日 | 2.6% | 0.06 | 0.1% | -6.6% | 0/9 | 0.31/-0.32 |
| Sell in May(Bouman & Jacobsen 2002) | 11 月到隔年 4 月 | 48% | 0.53 | 8.0% | -28.6% | 0/9 | 0.75/0.30 |
| 月初效應(Lakonishok & Smidt 1988) | 月底最後 1 天+下月前 3 天 | 19% | 0.54 | 4.8% | -14.4% | 0/9 | 0.72/0.37 |
| 節前效應(Ariel 1990) | 每個休市日前一個交易日 | 3.8% | 0.36 | 1.1% | -7.1% | 0/9 | 0.02/0.69 |
| 五窮六絕(5、6 月空手) | 5、6 月以外的月份 | 83% | 0.69 | 12.8% | -28.6% | 0/9 | 0.96/0.41 |
| QQQ 買進持有 | 一直持有 | 100% | 0.93 | 19.9% | -35.1% | 基準 | 1.09/0.78 |
| SPY 買進持有 | 一直持有 | 100% | 0.88 | 15.1% | -33.7% | 參考 | 未切段 |
回測期間 2016-01-04 至 2026-10-27,是 FinLab 美股 ETF 價格表的完整歷史。所有曲線從同一天起算,QQQ 與 SPY 都是含息報酬,日期與策略完全相同。
判準:三項驗證都要過
「贏 QQQ」在本文只有一個意思:在完全相同的交易日上,日夏普高於 QQQ 含息買進持有。日夏普是日報酬平均除以標準差、乘上 √252 年化,不扣無風險利率。一個規則三項都過才算成立:
- **鄰近參數。**每個規則有兩個參數,各取經典值與上下各一格,共 9 組,至少 7 組(門檻是七成以上)要贏 QQQ。聖誕行情改 12 月天數(4、5、6)與 1 月天數(1、2、3);Sell in May 改開始持有月份(10、11、12 月)與最後持有月份(3、4、5 月);月初效應改月底前天數(0、1、2)與月初天數(2、3、4);節前效應改假日前天數(1、2、3)與假日後天數(0、1、2);五窮六絕改空手起始月份(4、5、6 月)與空手月數(1、2、3)。
- **前後兩段。**回測期間從中點 2021-05-28 切開,經典參數在前後兩段都要各自贏 QQQ。
- **交易成本。**finlab 美股預設手續費與交易稅都是 0,跟美國零佣金券商一致。為了反映買賣價差與滑價,成本檢查在每次買進、每次賣出各扣 0.1%(
fee_ratio=0.001),扣完仍要贏 QQQ。
每個規則在 QQQ 與 SPY 上各跑一次,所以每檔 ETF 有 45 組參數,合計 90 組。
5 個規則與出處
**聖誕行情(Santa Claus rally)。**Yale Hirsch 在 1972 年版的《Stock Trader's Almanac》命名:美股在 12 月最後 5 個交易日與 1 月前 2 個交易日容易上漲。Lakonishok & Smidt(1988)用道瓊工業指數 90 年的日資料,發現年底年初、月底月初與假日前都有異常高的報酬。本文的窗口照 Hirsch 的定義,5+2 個交易日,約占全部交易日的 2.6%。
Sell in May and go away(萬聖節效應)。Bouman & Jacobsen(2002)研究 1970 到 1998 年 37 個市場,發現其中 36 個市場 11 月到隔年 4 月的報酬高於 5 月到 10 月。規則從 11 月第一個交易日持有到 4 月最後一個交易日,另外 6 個月空手。
月初效應(turn of the month)。Ariel(1987)發現美股 1963 到 1981 年的報酬集中在每個交易月的前半段,從上個月最後一天開始。Lakonishok & Smidt(1988)把窗口縮到 4 天:月底最後 1 個交易日與下個月前 3 個交易日。McConnell & Xu(2008)用 1926 到 2005 年的資料發現,美股在這 4 天以外幾乎賺不到市場風險溢酬,包含美國在內的 35 個國家中有 31 個出現同樣現象。本文的規則就持有這 4 天。
節前效應(pre-holiday effect)。Ariel(1990)發現美股休市日前一個交易日的平均報酬,是一年其他日子的 9 到 14 倍。規則只持有這一天。回測期間共有 102 個平日休市,包含兩次臨時休市(2018-12-05 與 2025-01-09 的國喪日),兩次都在幾天前就公告。
**五窮六絕(5、6 月空手)。**這是華人股市的俗諺,說 5、6 月股市容易疲弱,後面還有「七上吊」「七翻身」等不同版本。它可以看成縮短版的 Sell in May:規則全年持有,只在 5、6 月空手。
結果一:5 個規則沒有一個贏 QQQ
文首的圖把經典參數排在一起。最接近的是在場時間最長的五窮六絕(QQQ 0.69、SPY 0.72);Sell in May(兩者都是 0.53)、月初效應(0.54、0.49)與節前效應(0.36、0.57)落在 0.36 到 0.57 之間;聖誕行情最遠(0.06、0.22)。

換成金額差距更明顯。1 美元放在 QQQ 會變成 7.12 美元;避開 5、6 月剩 3.68 美元,只持有 11 到 4 月 2.29 美元,月初效應 1.66 美元,節前效應 1.13 美元,聖誕行情 1.01 美元。圖上平的那幾段,就是各規則空手的月份。
結果二:90 組參數沒有一組贏

每個小格是一個規則,格內數字是該組參數套用在 QQQ 的日夏普,顏色是和 QQQ 0.93 的差距。45 格全部低於 QQQ,SPY 的 45 組也一樣。單組最好的是 4 月起空手 1 個月:QQQ 0.88、SPY 0.83。聖誕行情的 9 組都在 -0.02 到 0.11 之間;Sell in May 把持有期延到 5 月反而變好(0.72),等於「Sell in May」做得越少,結果越好。
結果三:前後兩段與交易成本
QQQ 自己的日夏普在前半段(2016 年 1 月到 2021 年 5 月)是 1.09,後半段是 0.78。前半段沒有任何規則贏。後半段只有 SPY 版的節前效應贏(0.89 對 0.78);同一個規則套在 QQQ 是 0.02 與 0.69。另外 4 個規則在 2021 年 5 月之後都變弱,QQQ 版的聖誕行情後半段變成負的(-0.32)。
交易成本打擊的是交易頻繁的規則。月初效應一年進出 12 次,每邊 0.1% 一年約 2.4%,QQQ 版的年化報酬從 4.8% 降到 2.3%,日夏普從 0.54 降到 0.29。節前效應一年約進出 9 次,扣成本後年化報酬從 1.1% 變成 -0.8%。兩個慢規則幾乎不受影響:Sell in May 從 0.53 到 0.52,五窮六絕從 0.69 到 0.68。
為什麼日曆規則很難贏 QQQ:在場時間

一個規則如果只在一部分的日子持有、其他日子報酬為 0,它全期的日夏普大約等於「√在場比例 × 在場那幾天的夏普」。要追平 QQQ 的 0.93,在場 2.6% 的聖誕行情,在那 7 天裡夏普要高達約 5.8;在場 3.8% 的節前效應要 4.8,在場 19% 的月初效應要 2.1,在場 48% 的 Sell in May 要 1.3,在場 83% 的五窮六絕要 1.0。
圖上的點是各規則實際在場那幾天的夏普。SPY 的節前那一天最高,達 3.0;QQQ 的月初 4 天也有 1.25,兩者都高於 QQQ 全期的 0.93。這些日子確實是好日子,規則輸的原因是放掉了其他所有日子。在 QQQ 一年複利 19.9% 的這十年,其他日子才是報酬的主體:月初窗口占全部交易日的 19%,貢獻了 QQQ 對數總報酬的 26%。
逐一來看:這些效應還在嗎
三項驗證問的是「規則能不能贏指數」。另一個問題是:日曆現象本身還看不看得到?5 個效應裡,窗口內與窗口外日報酬的差異沒有一個達到統計顯著;t 值最大的是 5、6 月的 1.23,而且方向和俗諺相反。
聖誕行情:比任意 7 個交易日的平均還差

QQQ 的 7 天窗口 10 年中有 5 年上漲,平均 0.15%,中位數 -0.03%。同一段期間任意連續 7 個交易日平均漲 0.57%、上漲機率 62%。前 5 年的窗口全部收紅,後 5 年全部收黑,最差是 2023/24 年的 -2.3%。SPY 好一點,10 年中 7 年上漲、平均 0.54%,略高於它任意連續 7 個交易日的 0.44%,但最近 3 年也都是跌的,最近一次只跌 0.03%。QQQ 版的聖誕行情規則,十年下來總共只賺 1.5%。
月初效應:日子比較好,但不夠

每月第一個交易日是 QQQ(平均 0.19%)與 SPY(0.15%)表現最好的日子之一。整個 4 天窗口,QQQ 平均每天 0.108%,其他日子 0.076%(t=0.47);SPY 是 0.076% 對 0.059%。圖上也看得到,窗口外的兩天,也就是月底倒數第 4 與倒數第 2 個交易日,跟月初第一天一樣強。這十年的優勢分散在月底最後一週,沒有集中在論文說的那 4 天。4 天窗口上漲的月份占 60%,跟任意 4 天一樣。
節前效應:還是正的,但次數太少
休市前一天 QQQ 平均漲 0.12%、SPY 漲 0.15%,其他日子分別是 0.08% 與 0.06%,上漲機率 66% 與 65%。SPY 的節前一天約是普通日子的 2.5 倍,是這次測試裡最接近 Ariel 原始發現的結果,不過 102 個假日的樣本還不到統計顯著(t=1.09)。它也撐不過成本檢查:一買一賣 0.2% 的成本,已經超過平均 0.15% 的漲幅。假日後第一天,SPY 平均反而跌 0.07%。
Sell in May 與五窮六絕:避開的剛好是好月份

這十年美股的「夏天」並不弱。QQQ 11 到 4 月的平均日報酬是 0.075%,5 到 10 月是 0.089%;SPY 兩段幾乎一樣(0.063% 與 0.061%)。11 到 4 月贏過前面那段 5 到 10 月的年份,QQQ 是 10 年中 6 年,SPY 是 5 年。錯過最多的是 2025 年:QQQ 5 到 10 月上漲 32.6%,規則全部空手。
對 QQQ 來說,5、6 月更是全年最強的一段。5 月是 QQQ 平均第二好的月份(3.9%,僅次於 11 月的 4.0%),6 月平均 2.4%。11 年裡 QQQ 在 5、6 月下跌只有 2 年(2019、2022),SPY 只有 1 年(2022)。全年最弱的是 9 月,QQQ 平均 -1.2%、SPY -1.1%。
對照台股:0050 的五窮六絕與聖誕行情
五窮六絕在台股也常被提起。我們用同樣的算法看 0050 含息(etl:adj_close)作為對照,這部分只列統計,沒有對台股做三項驗證:
| 0050 含息 | 期間 | 次數 | 平均報酬 | 上漲次數 |
|---|---|---|---|---|
| 5、6 月合計 | 2007~2026 | 20 年 | +3.0% | 11 年 |
| 5、6 月合計 | 2016~2026 | 11 年 | +6.3% | 8 年 |
| 聖誕行情 7 天窗口 | 2007/08~2025/26 | 19 次 | +1.6% | 11 次 |
| 聖誕行情 7 天窗口 | 2016/17~2025/26 | 10 次 | +2.0% | 6 次 |
| 任意連續 7 個交易日 | 2016~2026 | 每天滾動 | +0.66% | 60% |
台股的 5、6 月同樣沒有「又窮又絕」:自 2007 年起平均上漲 3.0%,2016 年以後平均 6.3%。0050 的聖誕行情窗口平均報酬高於任意連續 7 個交易日,但上漲機率 60% 和任意 7 個交易日一樣,平均值主要來自少數大漲的年份,例如 2025/26 年的 +9.1%(0050 從 2025-12-23 收盤 63.70 元漲到 2026-01-05 的 69.50 元)。台股年底的季節性可以看 台股第四季走勢 與 作帳行情回測,春節前後的版本在 紅包行情回測。
程式碼
聖誕行情測試的核心只有幾步:在交易日曆上標出窗口,給 finlab sim() 一個只在這些日子持有 QQQ 的部位,再和 QQQ 買進持有比較日夏普。
顯示程式碼
import pandas as pd
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login() # finlab 會自動引導登入
data.set_market("us_fund")
# 1. QQQ 含息還原收盤價與交易日
close = data.get("us_fund_price:adj_close")["QQQ"].dropna()
days = close.index
# 2. 標出聖誕行情窗口:12 月最後 5 個交易日、1 月前 2 個交易日
counter = pd.Series(1, index=days)
month = days.to_period("M")
day_in_month = counter.groupby(month).cumcount() + 1
days_to_month_end = counter.groupby(month).cumcount(ascending=False) + 1
december = (days.month == 12) & (days_to_month_end <= 5)
january = (days.month == 1) & (day_in_month <= 2)
in_window = december | january
# 3. sim() 會在訊號隔一個交易日的收盤成交,
# 所以訊號提前兩個交易日:窗口前一天收盤買進,窗口最後一天收盤賣出
signal = in_window.shift(-2, fill_value=False)
position = signal.astype(float).to_frame("QQQ")
report = sim(position, resample=None, trade_at_price="close", upload=False)
# 4. 同一段日期比較規則與 QQQ 買進持有的日夏普
equity = report.creturn.reindex(days).ffill().fillna(1.0)
for name, curve in [("聖誕行情", equity), ("QQQ 買進持有", close / close.iloc[0])]:
daily = curve.pct_change().dropna()
print(name, round(daily.mean() / daily.std() * 252 ** 0.5, 2))資料到 2026-10-27 時,這段程式會印出 0.06 與 0.93。訊號提前兩天不會用到未來的價格:交易所的休市日曆在好幾年前就公布了。完整的 strategy.py 會把 5 個規則都套用在 QQQ 與 SPY,並補上未來兩個月的紐約證交所交易日,讓最後幾天知道月底在哪裡;加上 --validate 可以重現本文所有的參數網格、前後兩段與成本檢查數字。不想自己寫程式的話,完成 AI 輔助安裝 後,直接跟 AI 說「幫我測 SPY 的聖誕行情,再做鄰近參數、前後兩段與每邊 0.1% 成本的檢查」也能跑出同樣的研究。
回測方法與限制
| 項目 | 做法 |
|---|---|
| 回測期間 | 2016-01-04 至 2026-10-27,us_fund_price 的完整歷史。所有曲線從第一個資料日起算,QQQ、SPY 用相同日期。 |
| 標的 | QQQ 與 SPY 的含息還原收盤價(us_fund_price:adj_close)。每次只用一檔 ETF,窗口內 100% 持有,窗口外 0%。 |
| 空手的現金 | 不計利息(finlab 預設)。若把閒置資金放在短天期美債會多一些利息,本文沒有計入。 |
| 訊號時點 | 日曆事先已知。sim() 在訊號隔一個交易日的收盤成交,所以訊號提前兩個交易日,規則從窗口前一天收盤持有到窗口最後一天收盤。我們另外手算的報酬和 sim() 的差距在 1e-14 以內,參見 前視偏差 的說明。 |
| 休市日 | 從資料的交易日找出 102 個平日休市,含 2018-12-05、2025-01-09 兩次事先公告的臨時休市。 |
| 交易成本 | 預設回測:finlab USFundMarket 預設,手續費與交易稅都是 0。成本檢查:每邊 0.1%,用來反映價差與 滑價。 |
| 周轉 | 每年進出次數:聖誕行情 0.9、Sell in May 1.0、五窮六絕 1.1、節前效應 9.4、月初效應 12.0(周轉率 的定義)。 |
| 基準 | QQQ 含息買進持有,不計成本;SPY 作為參考。日夏普不扣無風險利率,計算方式見 夏普比率。 |
| 樣本 | 全部是約十年的樣本內結果:聖誕行情 10 次、Sell in May 10 個循環、月初 130 次、休市 102 次。前後兩段只是穩定度檢查,不是樣本外驗證。容量未估算;SPY、QQQ 是全球成交量最大的證券之一。 |
這個結果說明什麼、不說明什麼
它說明:2016 到 2026 年,一個只照日曆進出 QQQ 或 SPY 的投資人,在我們試過的每一組鄰近參數下,風險調整後的表現都比一直持有指數差。它沒有說原始研究是錯的。Lakonishok 與 Smidt 用了 90 年資料,Bouman 與 Jacobsen 用了 37 個市場的 29 年資料;十年是很短的樣本,對一年只發生一次的效應更是如此。這也和學術異常普遍的命運一致:McLean & Pontiff(2016)研究 97 個已發表的橫斷面選股因子,發現論文發表後報酬平均少了 58%;日曆效應不在那份研究裡,但本文較弱的結果與這個現象一致。
實務上的意義比較窄。月初與假日前一天在這段樣本裡的平均報酬仍高於其他日子,但差異不顯著,不足以據此調整加碼時點;拿來當獨立策略,持有的日子太少,跟不上指數。2016 年 5 月以來通過三項驗證、贏過 QQQ 的擇時規則,是 美股 ETF 輪動策略,它依 QQQ 的趨勢與動能進出,與日曆無關。它在偏多的月份持有 2 倍槓桿 ETF(QLD、SSO),有槓桿風險與波動耗損,最大回撤 19.3%,績效見 ETF 輪動策略頁。其他美股研究整理在 美股量化策略總覽,美股學術因子回測 對選股因子也得到同樣的結論:沒有一個贏 QQQ。
常見問題
聖誕行情是什麼?日期怎麼算?
聖誕行情(Santa Claus rally)指美股在 12 月最後 5 個交易日與隔年 1 月前 2 個交易日容易上漲,由 Yale Hirsch 在 1972 年提出。以 2026 年為例,是 12 月 23 日收盤買進、2027 年 1 月 5 日收盤賣出,因為聖誕節與元旦美股休市。
美股聖誕行情現在還有效嗎?
在這十年的 QQQ 上沒有。7 天窗口 10 年中 5 年上漲,平均 0.15%,比任意連續 7 個交易日的 0.57% 還少,而且最近 5 年都是跌的。SPY 10 年中 7 年上漲,但只持有這 7 天的規則日夏普 0.22,遠低於 QQQ 的 0.93。
台股有聖誕行情嗎?
0050 自 2007 年起 19 次窗口平均上漲 1.6%,高於任意連續 7 個交易日,但上漲機率 58%,和任意 7 個交易日差不多,平均值主要來自少數大漲的年份。本文沒有對台股做三項驗證,只列統計作為對照。
五窮六絕是什麼意思?是真的嗎?
五窮六絕是華人股市的俗諺,意思是 5、6 月股市容易疲弱。這十年的資料剛好相反:5 月是 QQQ 平均第二好的月份,11 年裡 5、6 月下跌只有 2 年;0050 自 2007 年起 5、6 月平均也上漲 3.0%。5、6 月空手的規則日夏普 0.69,輸給一直持有的 0.93。
Sell in May and go away 是真的嗎?
在 2016 到 2026 年的美股大型股不成立。QQQ 5 到 10 月的平均日報酬高於 11 到 4 月,只持有 11 到 4 月的日夏普 0.53,對 QQQ 的 0.93。
月初效應還存在嗎?
日報酬上還看得到:QQQ 月底最後一天加月初前 3 天平均每天 0.108%,其他日子 0.076%。但只持有這 4 天,年化報酬 4.8%,QQQ 是 19.9%;每邊扣 0.1% 成本後只剩 2.3%。
美股哪個月份表現最好?
2016 到 2026 年的 QQQ,平均報酬最高的是 11 月(3.96%)與 5 月(3.94%),其次是 7 月與 1 月;最差是 9 月(-1.2%)。每個月只有 10 到 11 個樣本,不能拿來預測單一年份。
可以自己重跑嗎?
可以。先完成 AI 輔助安裝,下載下方的 strategy.py,執行 python strategy.py --validate。
延伸閱讀
- 美股量化策略總覽:FinLab 所有美股策略研究
- 量化交易完整指南、回測完整指南
- VIX 恐慌指數與美股回測:另一種用市場狀態擇時的研究
- 名詞:年化報酬率 CAGR
下載資源
| 檔案 | 內容 |
|---|---|
| strategy.py | 完整測試:5 個規則套用在 QQQ 與 SPY、90 組參數、前後兩段與成本檢查 |
| data.csv | 各規則套用在 QQQ、SPY 的每日淨值,以及 QQQ、SPY 買進持有 |
| metrics.json | 本文引用的全部統計,包含 90 組參數的結果 |
**投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。**本文所有回測均為全段樣本內結果;前後兩段只是穩定度檢查,未經樣本外驗證。
最後更新:2026-10|回測區間:2016-01~2026-10|基準:QQQ 含息|作者:FinLab 量化研究團隊(經量化研究員審閱)
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

