
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
幫我設定 FinLab,重跑 S&P 500 52 週新高回測並和 QQQ、RSP 比較,請讀:https://finlab.finance/setup?relatedUrl=/blog/52-week-high-stocks-backtest
買進收盤創 52 週新高的 S&P 500 成分股、跌破 50 日均線就賣,2017 年 4 月到 2026 年 10 月年化 6.4%、日夏普 0.51。同期含息 QQQ 是 19.6%、0.89,等權重的 RSP 也有 11.6%、0.68。加上營收成長濾網後提高到 9.2%、0.66,加盈餘成長濾網是 7.3%、0.57。63 組參數沒有一組贏 QQQ,而且計入每邊 0.1% 成本後,基本版只剩年化 3.7%。
創 52 週新高的股票確實有實力,學術研究也支持這點。這條規則卻連「等權持有整個 S&P 500」都贏不了。
52 週新高規則關鍵數字
| 設計 | 日夏普 | 年化報酬 | 最大回撤 | 贏 QQQ | 贏 RSP | 前/後半段夏普 | 每邊 0.1% 成本的夏普 |
|---|---|---|---|---|---|---|---|
| 52 週新高 | 0.51 | 6.4% | -32.7% | 0 / 9 | 0 / 9 | 0.74 / 0.27 | 0.33 |
| 新高+營收成長 | 0.66 | 9.2% | -30.8% | 0 / 27 | 3 / 27 | 0.86 / 0.48 | 0.50 |
| 新高+盈餘成長 | 0.57 | 7.3% | -31.9% | 0 / 27 | 0 / 27 | 0.78 / 0.38 | 0.40 |
| RSP 含息 | 0.68 | 11.6% | -39.0% | 對照 | 0.78 / 0.57 | ||
| SPY 含息 | 0.84 | 14.7% | -33.7% | 對照 | 0.93 / 0.75 | ||
| QQQ 含息 | 0.89 | 19.6% | -35.1% | 基準 | 1.11 / 0.69 |
每一列都是 2017-04-04 到 2026-10-30,股息再投入。前後半段以 2022-01-13 切開。
怎樣才算過關
「贏」只有一個意思:同一段交易日裡,日夏普高於含息的 QQQ。這裡的夏普是日報酬平均除以標準差,再乘以 √252,不扣無風險利率。以下條件都在看到結果之前寫定。
- 鄰近參數: 每個主要參數取原值和上下一個鄰近值,七成以上的組合要贏 QQQ。
- 前後兩段: 回測期間對半切,原設定兩段都要贏。
- 含成本: 原設定在 finlab 美股預設成本(0)和每邊 0.1% 下都要贏。
- 不靠單一年份: 拿掉領先最多的那一年,原設定仍要贏。
- 現金: 這些規則可能留現金,所以扣掉 BIL(短期國庫券)後的夏普也要贏 QQQ。
- 濾網要有貢獻: 兩個成長版的原設定要高於基本版。
成長濾網過了最後一項,其他條件全部不過,差距也不小。
三個設計
這個想法來自 George 與 Hwang(2004):股價離 52 週高點多近,可以解釋很大一部分的動能獲利,而且這些獲利長期不會反轉。他們的解釋是錨定效應:投資人不太願意把股價推過自己記得的高點,好消息因此反映得比較慢。Bhootra 與 Hur(2013)進一步發現,同樣接近高點的股票,高點越近期的表現越好。Jegadeesh 與 Titman(1993)則是動能研究的起點。這兩篇都是排序選股、固定期間持有。我們測的是散戶常講的版本:股票突破,抱到趨勢結束。
- 52 週新高: S&P 500 成分股的還原收盤價創過去 L 個交易日新高就買,收盤跌破 M 日均線或離開指數就賣。L 取 200、252、300,M 取 20、50、100。
- 新高+營收成長: 同上,進場另外要求最新已申報季的營收年增至少 g。g 取 5%、10%、20%。
- 新高+盈餘成長: 進場改成要求最新已申報季的 EPS 年增至少 g,今年與去年同季都要是正數。g 取 10%、20%、30%。
持股等權,單檔上限 5%,符合的股票不足 20 檔時留現金。成長版有 3 個參數、各 27 組,加上基本版 9 組,共 63 組。
結果一:輸 QQQ,也輸等權
基本版在任何參數下都沒有贏 QQQ、RSP 或 SPY。RSP 是比較公平的尺,因為一百多檔等權股票的組合,長得比較像 RSP,不像市值加權的科技基金。對 RSP,它一年少賺 5.1 個百分點。
它的最大回撤比 RSP 小,-32.7% 對 -39.0%,但這個數字看起來比實際好。這段回撤從 2022-04-20 到 2023-10-27,同期 RSP 跌 13.6%、QQQ 漲 2.3%;計入每邊 0.1% 成本後更深,-35.9%,超過 QQQ 的 -35.1%。規則在 2019、2022、2023 年都落後 RSP 超過 10 個百分點,夏普也從前半段的 0.74 掉到後半段的 0.27。
| 年份 | 52 週新高 | RSP | QQQ |
|---|---|---|---|
| 2017(4 月起) | 14.9% | 13.2% | 18.4% |
| 2018 | -8.0% | -7.8% | -0.1% |
| 2019 | 18.3% | 28.9% | 39.0% |
| 2020 | 7.1% | 12.7% | 48.6% |
| 2021 | 21.4% | 29.4% | 27.4% |
| 2022 | -22.0% | -11.6% | -32.6% |
| 2023 | 1.2% | 13.7% | 54.9% |
| 2024 | 17.5% | 12.8% | 25.6% |
| 2025 | 6.9% | 11.2% | 20.8% |
| 2026(至 10 月) | 12.8% | 15.3% | 12.8% |
結果二:交易長什麼樣子
7,702 筆已平倉交易裡,39.0% 賺錢。平均每筆賺 0.86%,中位數虧 1.78%,持有時間中位數 30 個交易日。也就是說,典型的一筆交易是小賠,規則靠少數抱很久的交易賺回來。趨勢跟隨本來就長這樣,但這裡的平均獲利太小,撐不起整個組合。
最大的一段落差出現在 2020 年 3 月低點之後。股票要創 52 週新高才會被買進,崩盤後能做到的很少。2020-03-23 到 2020-06-30,規則只賺 7.1%,RSP 賺 42.6%,這段平均只持有 39 檔。
出場長度看不出簡單的規律。基本版的三種回看下,20 日線出場夏普 0.52 到 0.59,50 日線 0.49 到 0.56,100 日線 0.62 到 0.66,原設定的 50 日線剛好最弱。

粗體是原設定。每一格都低於 QQQ,最接近的是 0.76 對 0.89。贏 RSP 的 3 格都是營收 10%、20 日線出場。這是 63 格裡的 3 格,又是看完結果才找到的,旁邊 5% 和 20% 的濾網也沒有同樣的表現,拿來當新規則的根據很薄弱。
結果三:營收比盈餘有用,成本又拿回大半
原設定下兩個濾網都拉高了夏普,但全部參數看起來不一樣。和相同回看、相同出場的基本版相比,營收濾網 27 組有 19 組領先,盈餘濾網只有 6 組,而且都是 50 日線出場。營收版只持有約 47 檔,基本版是 116 檔。盈餘濾網搭配 20 日線出場時分數最低,9 組介於 0.41 到 0.51。

成本是這類規則和買進持有差最多的地方。組合平均持有約 116 檔,每檔大約 30 個交易日,名單一變就重新等權,目標權重一年週轉約 13 次。每邊 0.1% 下,基本版從年化 6.4% 掉到 3.7%,一年少將近 3 個百分點,夏普從 0.51 掉到 0.33;營收版從 9.2% 掉到 6.6%。這裡的 0.1% 代表週轉率高時,即使零手續費也要付的買賣價差和滑價,本文沒有另外估算。
S&P 500 每天有幾檔創 52 週新高
一般日子比想像中少。中位數 24 檔,平均 30 檔,分母約 500 檔。這段期間單日最高是 2018-01-26 的 177 檔;月平均低點是 2020 年 3 月的 2.0 檔和 2022 年 9 月的 2.1 檔,有 13.8% 的日子不到 5 檔創新高。

這個數字在漲勢中偏高,在賣壓中趨近於零。全期最高的月平均是 2018 年 1 月,每天 99 檔。持股數從 1 檔到 299 檔,平均 116 檔。5% 上限讓組合平均約 97% 在場內,其餘在行情稀薄時留現金。
跟 52 週新高因子有什麼不同
我們的美股學術因子回測直接測過 George 與 Hwang 的指標:每月持有最靠近高點的 30 檔流動性股票。相近期間的夏普 0.64、年化 10.8%,同樣 0 / 9 輸 QQQ。本文的事件規則用 50 日線出場是 0.51,用 100 日線出場是 0.64,兩種做法落在相近的範圍,都到不了 QQQ。股票池和期間不同,只能粗略比較。
台股讀者可以對照台股均線與 52 週新高回測:挑最靠近 52 週新高的 20 檔、用均線過濾,結果和美股不同。單一指數的突破則見 QQQ 突破策略,它用 21 日新高替槓桿 ETF 擇時,是另一種設計,風險也不同。
程式碼
這段是基本版,用到 2026 年 10 月的資料跑出來就是頭條的夏普 0.51。research.py 另外保留一家公司一個股別,並加上兩種成長濾網。
顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login()
data.set_market("us")
close = data.get("us_price:adj_close")
members = data.get("us_index_constituents:sp500").astype(bool)
# 兩張表都有的代號,成分股對齊交易日
tickers = members.columns.intersection(close.columns)
close = close[tickers]
members = members[tickers].reindex(close.index, method="ffill").fillna(False).astype(bool)
# 收盤創 252 日新高買進,跌破 50 日線或離開指數賣出
entries = (close >= close.rolling(252).max()) & members
exits = (close < close.rolling(50).mean()) | ~members
position = entries.hold_until(exits).loc["2017-04-03":]
# 等權、單檔上限 5%、下一個收盤成交
report = sim(position.loc[:, position.any()], position_limit=0.05, trade_at_price="close",
market="us", upload=False)
returns = report.creturn.pct_change().dropna()
print("日夏普:", round(returns.mean() / returns.std() * 252 ** 0.5, 2))不想自己寫也可以。照 AI 輔助安裝流程裝好 FinLab skill,或直接到 FinLab Studio 用白話請 AI 重跑,例如「把 52 週新高的出場改成 100 日線」或「在新高進場加上自由現金流濾網」。
回測方法
| 項目 | 做法 |
|---|---|
| 回測區間 | 2017-04-03 至 2026-10-30,有 300 日價格後的第一個月初。基本版第一天持有 160 檔;成長版從 12、13 檔開始,其餘留現金 |
| 股票池 | 每天的 S&P 500 成分股,一家公司留一個股別。2017-04-03 的 505 檔成分股裡有 13 檔當天在 FinLab 沒有價格,略過;其中有些後來倒閉,結果會略為偏高 |
| 流動性 | 除了指數成分外未設濾網。未估容量 |
| 週轉率 | 目標權重一年約 13 次,成長版約 12 次 |
| 價格 | 還原收盤價,所以「新高」包含股息。用未還原價,新高的日期可能略有不同 |
| 財報 | 依申報日對齊,沒有成長率的季度視為不符合,避免前視偏差 |
| 權重 | 等權、單檔上限 5%,名單變動的日子重新等權;現金沒有利息 |
| 成交 | 收盤算訊號、下一個收盤成交 |
| 成本 | finlab sim() 美股預設 0,另跑每邊 0.1%。未估滑價 |
| 稅 | 未計 |
| 樣本 | 全段都是樣本內,前後兩段只檢查穩定度,沒有做樣本外驗證 |
這個結果能說明什麼
結論只限於這條規則和這段期間,並沒有推翻學術發現:那些研究是用離高點的距離排序,歷史也長得多。本文說的是,散戶常用的版本,買突破、均線出場,在 2017 到 2026 年的美國大型股沒有賺到額外報酬。
這段期間也特別有利於集中持股。QQQ 依市值加權,單檔上限 5% 的等權組合本來就做不到。和 RSP 比就排除了這個優勢,規則仍然不夠。其他動能研究見美股動能策略回測;同一批股票加濾網的做法見美股選股法回測,其中 CANSLIM 也用到新高和 EPS 成長。動能與技術選股的總覽在程式交易完整指南。
常見問題
52 週新高是什麼意思?
股票過去一年(約 252 個交易日)的最高價。本文用還原股息與分割後的收盤價,不是盤中高點。
創 52 週新高的股票值得買嗎?
用這條規則不值得。買進每一次 S&P 500 新高、跌破 50 日線賣出,年化 6.4%,低於 RSP 的 11.6% 和 QQQ 的 19.6%,勝率只有 39.0%。
S&P 500 一天大約有幾檔創 52 週新高?
2017 到 2026 年的中位數是 24 檔,大約是指數的 5%。這段期間單日最高 177 檔。
加上營收或盈餘成長有用嗎?
營收成長在多數設定有幫助:27 組有 19 組贏基本版,年增 10% 的濾網把夏普從 0.51 拉到 0.66。EPS 成長只有 6 組贏。原設定都還低於 RSP 的 0.68。
出場用哪條均線最好?
基本版測的三條裡,100 日線分數最高,50 日線最低,0.62 到 0.66 對 0.49 到 0.56。沒有一條接近 QQQ。
買接近高點比買突破好嗎?
看不出明顯差別。因子回測的月排序版夏普 0.64,本文的突破規則用 50 日線 0.51、用 100 日線 0.64。兩者的期間和股票池不同。
這條規則比持有 QQQ 安全嗎?
最大回撤 -32.7% 比 QQQ 的 -35.1% 小,但計入每邊 0.1% 成本後是 -35.9%,反而更深,賺得也少很多。扣掉短期國庫券後的夏普是 0.34,QQQ 是 0.79。
可以自己重跑嗎?
可以。透過 AI 輔助安裝流程裝好 FinLab skill,下載下面的 research.py,執行 python research.py。
延伸閱讀
- 美股量化交易策略比較:站上美股研究的總覽。
- 道瓊狗股策略回測:每年買道瓊殖利率最高的 10 檔,同一套驗證。
- 黃金交叉回測:S&P 500 個股的黃金交叉與死亡交叉事件研究。
下載資源
| 檔案 | 內容 |
|---|---|
| research.py | 完整研究:三個設計、63 組參數、前後兩段、成本重跑與交易統計 |
| data.csv | 三個規則,加上 QQQ、SPY、RSP 的每日淨值 |
| metrics.json | 本文背後的統計,包含每月的創新高檔數 |
**投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。**本文所有回測均為全段樣本內結果,前後兩段未經樣本外驗證。
最後更新:2026-11|回測區間:2017-04~2026-10|資料截至 2026-10-30,重跑日 2026-11-01|基準:QQQ 含息|作者:FinLab 量化研究團隊(經量化研究員審閱)
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始


