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

美股學術因子回測:10 個經典因子、90 組參數,
夏普全輸 QQQ

美股學術因子還有效嗎?finlab 實測價值、毛利獲利能力、低 Beta、F-Score、QMJ 等 10 個論文因子,2017 到 2026 年每月持有前 30 檔:原始參數日夏普最高 0.75,全輸 QQQ 含息的 0.89;90 組鄰近參數最高 0.83,也沒有一組贏,附程式碼與每日數據。

90 組參數全輸 QQQ

美股 10 個學術因子回測:各因子組合 2017-2026 日夏普,對照 QQQ 含息、SPY 含息與股票池等權

依本文重跑

執行這個策略

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

告訴你的AI:

幫我設定 FinLab,重跑美股 10 個學術因子組合並和 QQQ 含息比較,請讀:https://finlab.finance/setup?relatedUrl=/blog/us-academic-factors-backtest

免安裝,開啟 FinLab Studio

**本文把 10 個學術論文提出的選股因子搬到美股,每個因子每月持有分數最高的 30 檔,從 2017 年 8 月跑到 2026 年 10 月。結果沒有一個因子的風險調整後報酬贏過 QQQ 含息:原始參數裡日夏普最高的是低特質波動的 0.75,QQQ 是 0.89;每個因子再各換 9 組鄰近參數,90 組裡最高的 0.83 也沒贏。**這 10 個因子是資產定價文獻引用最多的一批:價值、毛利獲利能力、資產成長、應計、庫藏股、52 週高點、低 Beta、低特質波動、Piotroski F-Score 與品質減垃圾(QMJ)。每個因子都要過三項驗證才算成立,結果全部卡在第一關。所以本文回答的是一個具體的問題:「過去九年,用單一學術因子挑美股,有沒有比直接持有 QQQ 好?」10 個因子的答案都是沒有。

10 個因子的關鍵數字

因子(論文) 日夏普 年化報酬 最大回撤 9 組參數贏 QQQ 前段/後段日夏普
價值 B/M(Fama & French 1992) 0.33 5.7% -70.9% 0/9 0.24/0.47
毛利獲利能力(Novy-Marx 2013) 0.51 9.9% -45.0% 0/9 0.48/0.54
低資產成長(Cooper, Gulen & Schill 2008) 0.52 10.9% -49.2% 0/9 0.44/0.60
低應計(Sloan 1996) 0.38 7.4% -61.1% 0/9 0.46/0.30
淨庫藏股收益率(Pontiff & Woodgate 2008) 0.54 11.6% -51.4% 0/9 0.48/0.61
52 週高點(George & Hwang 2004) 0.64 10.8% -27.8% 0/9 0.75/0.51
低 Beta(Frazzini & Pedersen 2014) 0.60 9.3% -31.9% 0/9 0.71/0.46
低特質波動(Ang 等 2006) 0.75 10.7% -35.8% 0/9 0.70/0.90
Piotroski F-Score(Piotroski 2000) 0.23 2.7% -68.6% 0/9 -0.12/0.75
QMJ 品質減垃圾(Asness, Frazzini & Pedersen 2019) 0.69 12.3% -35.9% 0/9 0.59/0.79
QQQ 含息 0.89 19.7% -35.1% 基準 0.90/0.88
SPY 含息 0.84 14.8% -33.7% 參考 未切段
股票池等權 0.57 10.5% -41.4% 參考 0.57/0.59

所有組合都從 2017-08-01 起算到 2026-10-26;QQQ 與 SPY 是同一段日子的含息買進持有。QQQ 前半段日夏普 0.90、後半段 0.88。

三項驗證怎麼判

本文的「贏」只有一個意思:同一段交易日裡,日夏普值高於 QQQ 含息買進持有。日夏普=日報酬平均 ÷ 日報酬標準差 × √252,不扣無風險利率;FinLab 美股策略比較頁用的是月夏普(QQQ 在那裡是 1.09),兩者的數字不能直接相比。一個因子要三項都過才算成立:

  1. 換鄰近參數也要贏(要的是高原,不是單點):每個因子的兩個主要參數各取原值和上下各一個鄰近值,共 9 組,至少 7 組(七成)要贏 QQQ。五個純財報比率因子與 QMJ 的兩個參數是股票池大小(流動性前 500、1,000、1,500 檔)與持股數(20、30、50 檔);三個價格因子是回看天數與持股數,回看天數 52 週高點取 189、252、315 日,低 Beta 取 126、252、378 日,低特質波動取 10、21、42 日(原值是論文的一個月);F-Score 是便宜股範圍(B/M 前 20%、30%、40%)與分數門檻(7、8、9 分)。
  2. 前後兩段都要贏:回測期間在中點 2022-03-15 對半切,原始參數在兩段要各自贏 QQQ,避免只靠某一段行情。
  3. 含交易成本:全部用 finlab sim() 的美股預設成本(USMarket:手續費 0、無交易稅,對應美國主流的零手續費券商),沒有為了結果把任何成本關掉。

10 個因子全部卡在第一關:90 組參數裡,贏 QQQ 的是 0 組。

10 個學術因子的定義與做法

每個因子都用 finlab 的美股資料表計算。財報欄位來自 us_income_statement、us_balance_sheet、us_cash_flow,finlab 以 SEC 申報日對齊,10-Q、10-K 公開之後數字才會進入分數,不需要再手動遞延。每個月月底依分數取股票池裡最高的 30 檔,隔天收盤進場,等權持有。

  1. 價值(股價淨值比倒數,B/M):Fama & French (1992) 發現帳面價值相對市值高的股票,平均報酬較高。分數=最新一季股東權益 ÷ 每日市值,淨值為負的公司排除。
  2. 毛利獲利能力:Novy-Marx (2013) 指出「毛利 ÷ 總資產」預測報酬的能力不輸 B/M,而且和價值因子互補。分數=近四季毛利合計 ÷ 總資產。
  3. 低資產成長:Cooper, Gulen & Schill (2008) 發現資產擴張最快的公司,之後報酬明顯較差。分數=總資產年增率取負號,成長越慢分數越高。
  4. 低應計:Sloan (1996) 發現有現金支撐的盈餘比較持久,靠應計項目堆出來的盈餘容易反轉。我們採用 Hribar & Collins (2002) 建議的現金流量表算法:(近四季淨利-近四季營業現金流)÷ 平均總資產,越低越好。
  5. 淨庫藏股收益率:Pontiff & Woodgate (2008) 發現增發股票的公司後續報酬較差;Ikenberry, Lakonishok & Vermaelen (1995) 發現宣布買回庫藏股之後股價有正向漂移。分數=近四季普通股淨發行金額取負號 ÷ 市值,淨買回越多分數越高。
  6. 52 週高點:George & Hwang (2004) 發現股價越接近 52 週高點的股票,之後越容易續強。分數=還原收盤價 ÷ 過去 252 個交易日的最高還原收盤價。
  7. 低 Beta:Frazzini & Pedersen (2014) 的「押注低 Beta」是加槓桿做多低 Beta、放空高 Beta 的多空組合。只做多的投資人只能持有低 Beta 那一邊,所以本文測的是這一邊:個股日報酬對 SPY 的 252 日 Beta,由低到高取。
  8. 低特質波動:Ang, Hodrick, Xing & Zhang (2006) 發現特質波動高的股票,後續報酬反而特別低。分數=個股日報酬對 SPY 做單因子迴歸後,21 日殘差的標準差(論文用 Fama-French 三因子),由低到高取。
  9. Piotroski F-Score:Piotroski (2000) 在便宜股裡用九個財報訊號打分,在 B/M 最高的五分之一裡買 8 分以上的公司。我們的原始設定把便宜股範圍放寬到股票池中 B/M 最高的 30%(參數網格含 20%),F-Score 至少 8 分的全部等權持有,持股數隨符合家數浮動。九個訊號的細節可參考 F-Score 選股。
  10. 品質減垃圾(QMJ):Asness, Frazzini & Pedersen (2019) 把品質定義為獲利、成長、安全、配發四個面向。我們把六項獲利指標、它們的一年變化(論文用五年變化,我們的資料從 2016 年起,撐不起五年)、三項安全指標(低 Beta、低負債比、低盈餘波動)與淨庫藏股收益率各自排名後平均。

結果一:原始參數全部明顯落後 QQQ

文首的圖把 10 個原始參數組合依日夏普排序。最接近 QQQ 的是低特質波動(0.75)、QMJ(0.69)與 52 週高點(0.64),但都還差 QQQ 的 0.89 一大截。價值因子只有 0.33,最大回撤 -70.9%;集中在最便宜股票的 Piotroski F-Score 組合墊底,只有 0.23。

圖上橘色虛線是一個重要的對照:把整個流動性股票池等權持有、每月再平衡,日夏普是 0.57。10 個因子裡有 4 個高於這條線(52 週高點、低 Beta、低特質波動、QMJ),代表最強的幾個因子確實比「平均一檔美股」好;問題在於平均一檔美股和 QQQ 之間的距離,比任何因子能補的都大。

結果二:90 組鄰近參數沒有任何一塊高原

美股 10 個因子策略的參數熱圖:每個因子 9 組鄰近參數的日夏普,顏色代表與 QQQ 的差距

每一小格是一個因子的 3×3 參數組合,格內數字是該組的日夏普,顏色是和 QQQ 的差距。90 格全部低於 QQQ。單一組參數最接近的是低資產成長在 500 檔股票池、持有 20 檔的 0.83,而且它整排 500 檔的設定都落在 0.78 到 0.83。乍看像一塊高原,但橫著讀就不是了:股票池放大到 1,000 或 1,500 檔,同一個因子掉到 0.35 到 0.70,所以這個差一點的結果,靠的是把測試限縮在最大的公司,也就是 QQQ 本來就持有的那一塊。五個純財報比率因子,最好的一組都出現在 500 檔股票池。52 週高點與低 Beta 在網格裡最穩定(0.63 到 0.71、0.55 到 0.64),QMJ 也只在 0.59 到 0.72 之間;低特質波動隨回看天數在 0.47 到 0.75 之間變動。它們都穩定地落在門檻下方。

結果三:前後兩段也一樣

美股 10 個因子組合前半段與後半段日夏普散佈圖,對照 QQQ:兩段都贏 QQQ 的綠色區域沒有任何因子

要通過這一關,點必須落在綠色區域:前半段高於 QQQ 的 0.90、後半段也高於 0.88。綠色區域是空的。52 週高點與低 Beta 是前半段最強的兩個組合(0.75、0.71),2022 年 3 月之後轉弱。低特質波動剛好相反:前半段 0.70、後半段 0.90,是唯一在任何一段贏過 QQQ(後半段 0.88)的原始參數組合。Piotroski F-Score 前半段日夏普是負的(-0.12),後半段 0.75,走的是價值因子在 2020 年崩跌與 2022 年類股輪動中的路線,只是幅度更大。

為什麼會輸:難的是基準

QQQ、SPY、美股股票池等權與兩個最強因子組合 2017-2026 累積淨值,對數座標

三個原因解釋了大部分的落差。

**這十年是超大型股的十年。**QQQ 年化 19.7%,SPY 年化 14.8%,流動性股票池等權只有 10.5%。30 檔等權的因子組合,起點是「平均一檔股票」,不是 QQQ。上圖兩個最強的組合說明了這件事:QMJ 每年比股票池等權多賺 1.8 個百分點(12.3% 對 10.5%),低特質波動報酬和股票池差不多、波動卻小很多(年化 15.2% 對 21.4%);但 1 美元最後只變成約 2.9 與 2.6 美元,QQQ 是 5.3 美元。

**因子溢酬本身很小。**我們在同一個股票池裡,每月把股票依因子分成十組,量最好一組減最差一組的報酬差。10 個因子裡有 6 個的最好組減最差組是正的,最大的是毛利獲利能力(年化 +6.5%)與低應計(+6.0%),但沒有一個的 t 值超過 1.4。價值因子的價差幾乎是零(-0.2%),低 Beta 是 -7.1%:Beta 最高的一組反而賺得比最低的一組多。完整的十分位分析在美股因子投資總覽。這和複製研究的結論一致:McLean & Pontiff (2016) 發現異常報酬在論文發表後平均少了 58%,其中約 32 個百分點可歸因於投資人照著論文交易;Hou, Xue & Zhang (2020) 發現多數異常在微型股不再主導平均數之後就不顯著。本文只取流動性前 1,000 檔、日成交額 500 萬美元以上的股票,同樣把微型股排除在外。

**低風險在多頭市場站錯邊。**低 Beta 與低特質波動是 10 個組合裡波動最低的兩個(年化 17.3% 與 15.2%,QQQ 是 23.3%),但在獎勵高 Beta 成長股的市場裡,少掉的報酬太多。Frazzini 與 Pedersen 的報酬有很大一部分來自放空高 Beta 股,而這段期間 Beta 最高的一組反而賺最多(十分位價差 -7.1%),所以只做多低 Beta 那一邊,連風險調整後都輸。

程式碼

核心流程只要幾步。下面這段建立股票池、計算一個因子(毛利獲利能力)、持有前 30 檔,再和 QQQ 比較;完整的 strategy.py 會跑完 10 個因子、90 組參數網格與十分位分析。

顯示程式碼
from finlab import data
from finlab.backtest import sim
 
data.set_market("us")
 
# 1. 股票池:60 日平均成交額前 1,000 檔、股價 > 5 美元
#   (strategy.py 另外只留普通股、排除 ADR 與金融股,
#    並把單日漲跌超過 50% 的股票剔除一年)
close = data.get("us_price:close")
volume = data.get("us_price:volume")
dollar_volume = (close * volume).rolling(60, min_periods=20).mean()
universe = dollar_volume.is_largest(1000) & (dollar_volume > 5e6) & (close > 5)
 
# 2. 毛利獲利能力(Novy-Marx 2013):近四季毛利 ÷ 總資產
#    財報以 SEC 申報日對齊,不需要再手動遞延
gross_profit = data.get("us_income_statement:gross_profit").rolling(4).sum()
total_assets = data.get("us_balance_sheet:total_assets")
score = gross_profit / total_assets
 
# 3. 每月持有分數最高的 30 檔,等權
position = score[universe].is_largest(30)
report = sim(position.loc["2017-08-01":], resample="M", upload=False)
 
# 4. 和同一段日子的 QQQ 含息比較日夏普
qqq = data.get("us_fund_price:adj_close")["QQQ"].reindex(report.creturn.index).ffill()
for name, curve in [("strategy", report.creturn), ("QQQ", qqq / qqq.iloc[0])]:
    daily = curve.pct_change().dropna()
    print(name, round(daily.mean() / daily.std() * 252 ** 0.5, 2))

這段在我們的環境跑出來是策略 0.50、QQQ 0.89,和完整版的 0.51 差在普通股篩選(排除 ADR、金融股)與異常漲跌過濾。把它交給裝好 FinLab 技能的 AI 助理,請它一次只改一件事(例如持股數、改成產業中性),每改一次都重跑三項驗證,再決定要不要相信某一條曲線。

回測方法與限制

項目 本文的處理
回測期間 2017-08-01 至 2026-10-26。美股價格與財報都從 2016 年開始,2017 年 8 月是每個因子都有一年財報、一年股價可用的第一個月。因子組合在 2017 年 8 月底第一次換股,之前持有現金,QQQ 則從 8 月 1 日起算(當月上漲 1.7%),對比較的影響很小
股票池 公司基本資料中的美股普通股,含已下市公司;排除 ADR、ETF、基金與金融業。每天取 60 日平均成交額前 1,000 檔、股價 5 美元以上、日成交額 500 萬美元以上
生存者偏誤 已下市股票保留在股票池裡。finlab 現成的 etl:us_common_stock_filter 只列出目前仍在交易的公司,所以我們改從公司基本資料自建普通股清單
資料異常 單日漲跌超過 50% 的股票往後一年不納入(只往回看,處理分割錯誤與代號重複使用)
前視偏差 財報以 SEC 申報日進入分數;月底收盤產生訊號,sim() 在隔天收盤成交。產業別用目前的分類快照(只用來排除金融業)
權重 每個因子前 30 檔等權;F-Score 組合持有所有符合條件的股票(平均 34 檔)
交易成本 finlab USMarket 預設:手續費 0、無交易稅,未另計滑價。零成本下已經沒有因子贏 QQQ,加上成本不會改變結論
周轉率 依月底權重計算的單邊年化周轉率:毛利獲利能力最低,每年 1.3 倍;52 週高點最高,10.6 倍;低特質波動 8.7 倍,低 Beta 1.9 倍,其他財報類因子在 2.1 到 3.2 倍之間
基準 QQQ 含息(us_fund_price:adj_close)買進持有、不含成本;SPY 列為參考
樣本 全部是樣本內結果;前後兩段是穩定度檢查,不是樣本外驗證。未估算策略容量

這個結果代表什麼、不代表什麼

在本文設定下,2017 到 2026 年、美股流動性前 1,000 檔,10 個教科書級的只做多因子組合,風險調整後都比直接持有 QQQ 差,而且換鄰近參數也一樣。它不代表這些因子是假的:論文量的是多空價差,樣本多半從 1960 或 1970 年代開始,長達 25 到 50 年,股票池也更廣。它也不代表未來十年一定繼續輸:因子報酬有很長的循環,2022 年多數因子組合就大幅贏過 QQQ,逐年拆解見因子投資的逐年表現。

對想拿真錢跑這些選股條件的讀者,比較實際的解讀是:在美股大型股裡,單一學術因子、只做多,本身不夠。台股的情況不同,可以對照台股因子選股總綱與股價淨值比選股策略的實測;想從頭學怎麼在美股做回測,可以看美股回測教學。

常見問題 FAQ

美股因子投資還有效嗎?

以本文的方式(只做多、前 30 檔、對照 QQQ)來看,2017 到 2026 年 10 個因子全部輸在夏普值;在流動性股票池裡,十分位多空價差還是正的只有 6 個。

價值因子已死了嗎?

在這次測試裡它是表現最差的之一:日夏普 0.33、最大回撤 -70.9%,十分位多空價差 -0.2%。九年的視窗不足以替一個有近百年資料的因子下定論,但這段期間對價值因子確實非常不友善。

哪個因子最接近 QQQ?

原始參數裡是低特質波動,日夏普 0.75,其次是 QMJ 的 0.69。低特質波動在後半段甚至以 0.90 贏過 QQQ 的 0.88,但前半段落後 0.20,所以沒過「前後兩段都要贏」這一關。整個參數網格裡最接近的單一組是 500 檔股票池的低資產成長,0.83。

為什麼用 QQQ 當基準,不用 S&P 500?

QQQ 含息是 FinLab 所有美股策略共用的基準,方便跨文章比較。文首圖也列了 SPY 含息,它的日夏普 0.84 一樣高於所有因子組合。

F-Score 為什麼表現這麼差?

Piotroski 的規則只在最便宜的股票裡挑財報改善的公司,等於把價值因子的部位放大。價值因子在這段期間本身就弱,F-Score 組合前半段日夏普是負的(-0.12),後半段回到 0.75,但仍低於 QQQ。台股的 F-Score 實測可以參考 F-Score 選股。

低 Beta 加槓桿會不會就贏了?

本文沒有測。槓桿會改變報酬的大小,但在不計融資成本時不改變夏普值,而本文的判準就是夏普值。

有包含已下市的股票嗎?

有。股票池每天從當時有交易的普通股重建,之後被併購或下市的公司都在裡面。

可以自己改參數重跑嗎?

可以。先完成 AI 輔助安裝,下載文末的 strategy.py,加 --grid 會跑 90 組參數熱圖,加 --deciles 會跑十分位分析。

延伸閱讀

下載資源

檔案 內容
strategy.py 完整測試:10 個因子、90 組參數網格與十分位分析
data.csv 10 個原始參數組合、股票池等權、QQQ 與 SPY 的每日淨值
metrics.json 本文引用的全部統計,包含 90 組參數的結果

**投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。**本文所有回測均為全段樣本內結果;前後兩段只是穩定度檢查,未經樣本外驗證。

最後更新:2026-10|回測區間:2017-08~2026-10|基準:QQQ 含息|作者:FinLab 量化研究團隊(經量化研究員審閱)

FinLab AI

想建立自己的策略?

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

免費開始

更多多因子選股研究

查看全部