
把台股最經典的股價淨值比選股模板原封不動搬到美股,用 2016 年 3 月到 2026 年 7 月的資料重跑一次,結果是:B/P 月 Rank IC 平均只有 -0.0095(t 值 -0.70,統計上與零無異),最便宜十分位對最貴十分位的年化價差僅 +1.41%,可交易的低 PB 組合年化 8.13%、最大回撤 -50.2%,同期 QQQ 含息年化 20.23%、SPY 含息 13.68%。這個因子在美股沒有排序力,做成組合更是全面落後指數。
這篇文章做兩件事。第一,用這個案例完整走一遍 finlab 的美股回測工作流:從資料取得、因子建構、橫截面檢驗到回測執行,每一步都附程式碼,你可以整套複製到自己的題目上。第二,把「台股策略能不能直接搬到美股」這個問題用數據回答清楚,並更正本文 2023 年舊版的結論。想先看在美股實測有效的策略,可以直接跳到文末的策略清單。
關鍵數字:股價淨值比移植美股的成績單
| 項目 | 區間 | 年化報酬 | 日夏普 | 最大回撤 | 總報酬 |
|---|---|---|---|---|---|
| 低 PB 前 50 檔(月再平衡,平均持股 46 檔) | 2016-03~2026-07 | 8.13% | 0.44 | -50.2% | +124.7% |
| QQQ 含息 | 同窗口 | 20.23% | 0.94 | -35.6% | +573.2% |
| SPY 含息 | 同窗口 | 13.68% | 0.81 | -34.1% | +277.2% |
| 因子檢驗 | 數值 | 解讀 |
|---|---|---|
| B/P 月 Rank IC 平均 | -0.0095(t = -0.70) | 統計上與零無異 |
| 正 IC 月份比例 | 45.1% | 比丟銅板還低 |
| D10(最便宜)− D1(最貴)年化價差 | +1.41% | 價差存在但極薄 |
| 低 PB 組合月夏普 | 0.46 | 年化波動 24.4% |
對照組是我們用同一套工具在台股跑出的結果:台股 2010 到 2026 年按 PB 分五組每季換股,最低分位年化 14.13%、最高分位 7.77%,報酬隨 PB 嚴格遞減、排序完全成立,只是五組全部輸給 0050 含息的 16.43%。台股的 PB 至少是一個「有資訊但不夠強」的因子;到了美股,連排序資訊本身都消失了。
美股回測上手:finlab 完整工作流
先講工具面。finlab 套件的台股與美股共用同一套語法,data.set_market("us") 之後,data.get()、FinlabDataFrame 運算、sim() 回測全部照舊,台股使用者的既有經驗可以直接沿用。如果你還在評估要不要投入美股研究,為什麼要投資美股整理了市場規模與產業廣度的理由;資料表的完整清單與欄位說明在美股資料庫使用指南。
環境準備最快的路徑是用 AI 輔助安裝:
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
幫我設定 FinLab,重現這篇文章,請讀:https://finlab.finance/setup?relatedUrl=/blog/us-stock-backtest-price-to-book-strategy
裝好之後,下面這段程式碼就是本文全部分析的核心骨架,一行一個動作:
顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login() # 套件會在需要資料時自動引導登入
data.set_market("us") # 切換到美股資料
# 一、載入價量與財報資料
close = data.get("us_price:adj_close")
volume = data.get("us_price:volume")
eps = data.get("us_income_statement:eps_diluted")
net_income = data.get("us_income_statement:net_income")
equity = data.get("us_balance_sheet:total_stockholders_equity")
# 二、定義流動性宇宙:60 日平均成交金額前 500 檔
dollar_volume = (close * volume).rolling(60, min_periods=20).mean()
# 完整版(下載檔)另剔除近一年出現極端單日報酬的資料異常股
universe = (
dollar_volume.is_largest(500)
& (close > 10)
& (dollar_volume > 10_000_000)
)
# 三、建構 B/P 因子
# 美股資料沒有現成的流通股數欄位,用 TTM 淨利 ÷ TTM 稀釋 EPS 反推
ttm_eps = eps.rolling(4).sum()
ttm_net_income = net_income.rolling(4).sum()
shares = ttm_net_income / ttm_eps
book_per_share = equity / shares
bp = book_per_share / close # B/P 越高代表越便宜
# 反推股數在 EPS 接近零時會失真,加上防呆條件
valid = (ttm_eps.abs() > 0.05) & (equity > 0) & (shares > 0) & universe
bp = bp[valid]
# 四、選出最便宜五分位中 B/P 最高的 50 檔,每月再平衡
cheapest_quintile = bp.rank(axis=1, pct=True) > 0.8
position = bp[cheapest_quintile].rank(axis=1, ascending=False) <= 50
# 五、回測:美股零佣金環境,費用參數設 0
report = sim(
position,
resample="M",
fee_ratio=0,
tax_ratio=0,
position_limit=0.05,
upload=False,
)
report.display()幾個美股特有的細節值得展開:
- 資料 key 前綴:美股個股價量在
us_price:,財報在us_income_statement:、us_balance_sheet:,ETF 含息價格在us_fund_price:adj_close(本文的 QQQ 與 SPY 基準即取自這裡)。 - 股數要反推:美股財報表沒有直接的流通股數欄位,慣用做法是
TTM 淨利 ÷ TTM 稀釋 EPS。這在 EPS 絕對值極小時會除出天文數字,所以程式裡加了|TTM EPS| > 0.05與權益為正的防呆;漏掉這步,因子排名會被少數異常值污染。 - 宇宙定義是回測的第一道品質關:美股上市家數多、雞蛋水餃股與資料異常股比台股多得多。本文用 60 日平均成交金額前 500 檔、股價 10 美元以上、日均成交額 1,000 萬美元以上的滾動宇宙,並剔除近一年出現過極端單日報酬的資料異常股。宇宙怎麼切會直接改變結論,美股宇宙分類器與 PEG 策略有更完整的討論。
- 財報以申報日對齊:finlab 的美股財報資料按 filing date 對齊,回測當下只用得到當時已公告的數字,避免前視偏差。
回測引擎的通用觀念(部位表、再平衡、報告解讀)不分市場,新手可以先讀回測完整指南;如果想比較不同回測工具的取捨,台股回測工具比較把主流選項的資料覆蓋與費用模型攤開來對照過。
移植實測:低 PB 組合對上 QQQ 與 SPY
工作流跑通之後,來看結果。把最便宜五分位中 B/P 最高的 50 檔做成月再平衡組合(平均實際持股 46 檔、單檔上限 5%),與 QQQ、SPY 在同一起始日重設基準後對照:

十年多下來,低 PB 組合總報酬 +124.7%,年化報酬 8.13%;同窗口 SPY 含息 +277.2%、QQQ 含息 +573.2%。風險端更難看:組合年化波動 24.4% 高於 QQQ 的水準,最大回撤 -50.2% 比兩檔指數 ETF 都深了 15 個百分點左右。承擔更高的波動、只換到不到一半的報酬,用「超額報酬變弱」來描述都嫌客氣:這個因子在美股沒有提供可以拿來建構組合的訊號。
排序力的直接檢驗是逐月的 Rank IC:每個月底用 B/P 對下個月報酬做橫截面等級相關,十年多逐月平均下來只有 -0.0095,t 值 -0.70,正 IC 月份佔 45.1%:

圖上的副軸放了 QQQ 累積報酬當市場情境:不論成長股噴出還是回檔,IC 都在零附近正負交錯,看不出任何可以依賴的節奏。對照文首的十分位長條圖,全窗口 D10(最便宜)年化 12.99%、D1(最貴)11.59%,中間各分位高低錯落(D8 只有 7.98%),完全沒有台股那種由低到高嚴格遞減的階梯結構。
完整的互動式回測報告可以直接操作:
想自己重跑或改參數,strategy.py 是產出本文全部數字與圖表的完整腳本,metrics.json 是所有指標的機器可讀存檔。
分段檢驗:研究段與樣本外的排序翻轉
單看全窗口平均會漏掉一個更關鍵的事實:這個因子的方向在期間內翻轉過。把資料切成研究段(2016 到 2021 年底)與樣本外段(2022 年起)分別計算十分位年化報酬:

- 研究段(2016–2021):D1(最貴、也就是成長股那端)年化 19.29%、D2 18.92% 領跑,D10(最便宜)只有 12.20%。這段期間「買貴的」才是對的。
- 樣本外(2022 起):方向整個翻過來,D1 年化只剩 0.27%,D10 反而以 13.82% 居首。2022 年的升息與價值反彈讓便宜股短暫揚眉吐氣。
兩段的排序方向相反,全窗口平均出來的 +1.41% 價差只是兩股相反力量互相抵銷的殘值。這對策略開發者是一個重要的方法課:如果你在 2021 年底做研究,會得出「美股該買成長股」;在 2022 年底做研究,會得出「價值回歸了」。單一因子在美股的方向本身就是一個賭注,而且是回測給不了答案的賭注。
為什麼台股有效的 PB 到美股就失效
把台美兩份用同一套工具、同一種方法跑出來的結果並排,差異非常乾淨:台股 PB 五分位由低到高嚴格遞減、最低分位年化是最高分位的 1.8 倍;美股十分位高低錯落、價差 1.41% 且統計上不顯著。可能的原因有三層:
**第一層是因子被定價的程度。**帳面市值比對美股橫截面報酬的解釋力由 Fama & French(1992)系統性確立,此後三十多年,美股是全世界被學術與量化資金掃描最徹底的市場,簡單價格比率能提供的超額報酬被大量套利資金攤薄。台股的散戶佔比高、外資與量化覆蓋相對淺,簡單估值因子的排序力保存得更完整。
**第二層是帳面價值的計量問題。**美股流動性前 500 檔由科技與服務業主導,研發、軟體、品牌這些無形資產大多不入帳面淨值,PB 對這類公司從根本上量錯了東西。Arnott, Harvey, Kalesnik & Linnainmaa(2021)在價值因子衰退的辯論中即指出,無形資產處理方式對帳面價值型指標的有效性影響重大;他們同時論證價值因子「死亡」的說法言過其實,衰退有相當部分來自估值利差的擴張。本文的樣本外段(2022 起 D10 反轉領先)與這個「衰退但未死」的描述一致:因子還有殘存的均值回歸力量,但已經弱到蓋不出一個能打敗指數的組合。
第三層是實作層的常識。Asness, Frazzini, Israel & Moskowitz(2015)整理價值投資的事實與迷思時強調,單獨使用的價值因子波動大、回撤深、失效期可以長達十年,實務上幾乎總是與品質、動能等因子搭配使用。把單一 PB 排序直接做成組合,在任何市場都是脆弱的做法;台股的實測結果同樣支持這點:排序成立,五組仍然全輸 0050。
一句話總結:台股策略的「模板」可以搬(語法與工作流完全共用),策略的「參數與因子」不能搬。每個市場的有效因子要在該市場重新驗證,這正是回測工具存在的意義。想系統性理解因子驗證的流程,量化交易完整指南從因子檢驗到組合構建有一套完整的路徑。
2023 年舊版結論的更正
本文 2023 年 7 月的初版以線上策略實驗室的範例展示這個低 PB 策略,當時以 2016 到 2023 年中的回測畫面得出「近 7 年報酬領先 S&P 500、2020 疫情回檔較淺」的結論。以 2016-03 到 2026-07 的完整窗口重跑後,這個結論不再成立:低 PB 組合年化 8.13% 低於 SPY 含息的 13.68%,最大回撤 -50.2% 比 SPY 的 -34.1% 深得多,抗跌的描述在全窗口下也站不住。
差異的來源不難定位。2023 年中的觀察點恰好落在 2022 年價值反彈之後:那一年成長股重挫、便宜股相對抗跌(樣本外十分位數據顯示 2022 起 D10 領先 D1 超過 13 個百分點),使策略當時的相對績效處在高點。此後 2023 到 2026 年由 AI 與大型成長股主導的行情中,低 PB 組合系統性缺席,相對優勢被完全回吐。當年的結論是特定時點快照的產物,我們據此更新全文,並把完整重現腳本與指標存檔公開,任何人都能用同一份程式碼驗證。
這也是我們維護回測內容的固定做法:數據標明區間、定期重跑、結論跟著數據走。舊文的另一個時代背景也已改變:2023 年美股資料僅能在網頁端使用,現在 finlab 套件已可在本地直接取用美股資料,本文的工作流即為本地執行版本。
在美股行得通的策略
檢驗到這裡,讀者真正想要的東西很明確:在美股實測過、通過同樣嚴格檢驗、可以直接研究的策略。我們用相同的資料引擎與宇宙方法論跑了一系列美股策略(英文撰寫,各文附完整程式碼、十分位檢驗與樣本外切分;各文窗口與口徑見原文):
| 策略 | 年化報酬 | 月夏普 | 最大回撤 |
|---|---|---|---|
| 短線均值回歸 | 67.4% | 1.43 | -27.6% |
| 盈餘驚喜 | 39.5% | 1.57 | -21.1% |
| 突破趨勢 | 37.2% | 1.19 | -28.3% |
| 品質價值 | 33.2% | 1.49 | -21.1% |
| 低波動 | 32.1% | 1.30 | -22.2% |
| ETF 輪動 | 30.5% | 1.38 | -17.9% |
其中「品質價值」那篇與本文直接相關:價值因子在美股並非完全無用,把估值指標換成現金流基礎、再與品質因子交集,結果就與單一 PB 排序完全不同。這與前一節的文獻結論互相印證:價值要活下來,得換更好的計量方式、且不能單獨上場。六個策略的總覽與方法論比較在美股量化策略總覽。
回測方法與限制
本文所有數字的計算口徑如下,完整實作見可下載的 strategy.py:
| 項目 | 設定 |
|---|---|
| 回測區間 | 2016-03-01 至 2026-07-08;研究段 2016–2021 年底、樣本外段 2022 年起 |
| 股票池 | 滾動計算 60 日平均成交金額前 500 檔,股價 ≥ 10 美元、日均成交額 ≥ 1,000 萬美元;剔除近一年出現過極端單日報酬(±50% 以上)的資料異常股 |
| 因子建構 | B/P = 每股帳面淨值 ÷ 還原收盤價;股數為 TTM 淨利 ÷ TTM 稀釋 EPS 的反推估計值,設 |TTM EPS| > 0.05、股東權益 > 0、股數 > 0 三道防呆,未通過者不進入排名 |
| 前視偏差 | 財報以申報日(filing date)對齊,由 finlab 資料層處理;價格用還原收盤價 |
| 組合規則 | 最便宜五分位中 B/P 最高 50 檔,等權、單檔上限 5%、月再平衡;實際平均持股 46 檔 |
| 交易成本 | sim() 設 fee_ratio=0、tax_ratio=0。美股主流券商佣金為零,此設定貼近散戶現實;但滑價未估算,實際成本取決於下單規模與流動性,月再平衡的周轉會使實盤淨值低於回測值;平均月周轉率未估算 |
| 基準 | QQQ 與 SPY 含息還原價(us_fund_price:adj_close)買進持有,與組合同起始日重設基準 |
| 十分位與 IC | 每月底以 B/P 全宇宙排名分十組,計算下月等權平均報酬與 Rank IC;此為描述性統計,未含交易成本,輔以研究段與樣本外的分段對照 |
| 統計限制 | 十年出頭的月度樣本對因子風格循環(動輒五到十年一輪)而言偏短;分段檢驗顯示方向翻轉,全窗口平均值對未來的外推力有限 |
常見問題
美股回測怎麼開始最快?
裝好 finlab 套件後,data.set_market("us") 一行切到美股,其餘語法與台股完全相同。本文的程式碼區塊就是一個可以直接執行的最小工作流;環境安裝走 AI 輔助流程最省事,新手常見的資料表問題在美股資料庫使用指南都有對照表。
做美股量化要準備多少錢?
回測與研究階段只需要 finlab 的資料訂閱,不需要投入資金。實際下單時,美股可以買零股(fractional shares)且主流券商零佣金,幾百美元就能複製一個分散組合的縮小版;限制主要在組合檔數多時的零股精度,而非資金門檻。
美股資料是從哪裡來的?可信嗎?
finlab 的美股資料整合自機構級資料商,價量含還原調整、財報以申報日對齊。本文用的每個資料 key(us_price:adj_close、us_income_statement:eps_diluted 等)都寫在程式碼裡,你可以逐欄位驗證。
股價淨值比在美股為什麼失效?
三個層次:因子發表後被套利資金攤薄(美股是被掃描最徹底的市場)、帳面淨值量不到科技公司的無形資產、單一價值因子本身波動大且失效期長。本文的實測數字(IC -0.0095、十分位無單調排序、分段方向翻轉)與這三點一致。
台股策略能直接搬到美股嗎?
語法與工作流可以原樣搬,因子與參數不行。本文就是一個完整的反例:同一個 PB 模板在台股排序嚴格成立,在美股連排序力都沒有。任何跨市場移植都應該重跑十分位、IC 與分段檢驗這三件事之後再上場。
回測沒算滑價,實際交易會差多少?
本文費用設定為零佣金、零稅,貼近美股散戶現況,但滑價確實未估。月再平衡、持股約 46 檔、集中在流動性前 500 檔的設定下,小資金的滑價衝擊通常有限;資金規模放大後衝擊取決於單檔下單量佔日成交額的比例,本文未估算容量,這是把回測結果外推到實盤時必須自行折減的部分。
延伸閱讀
**投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。**本文為因子失效的檢驗報告,文中的低 PB 組合在回測期間全面落後指數,請勿將其作為投資依據;引用的其他策略績效均為歷史回測,不保證未來報酬。
最後更新:2026-07|回測區間:2016-03~2026-07|作者:FinLab 量化研究團隊(經量化研究員審閱)
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始


