Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

ETF 相對強弱指標與 Alpha 歸因分析

ETF 相對強弱透過比較二十個交易日的報酬率進行排序,並利用重疊式投資組合消除起始日期偏差。深入探討 Alpha 歸因如何透過迴歸分析,精確衡量扣除基準指數後的超額報酬表現。

ETF 相對強弱規則的運作方式

相對強弱是一種比較,而非報酬率。若某檔基金在 20 個交易日內上漲 3%,而基準指數上漲 5%,其相對強弱即為負值。若某檔基金下跌 1%,而基準指數下跌 4%,其相對強弱則為正值。排序所依據的數值為超額報酬:即基金在固定區間內的百分比變動,減去基準指數在同一區間內的百分比變動,並逐日計算。

在此基礎上有兩項選擇。回溯期(lookback)決定了排序所參考的歷史長度,20 個交易日約等於一個交易月份。持有期(holding period)則決定了勝出者在投資組合中的停留時間。當兩者相等時,整個投資組合會在每月特定日期進行汰換,最終結果將取決於起始日期。採用重疊式投資組合(overlapping sleeves)可消除這種依賴性:將同一規則拆分為數個錯開數個交易日的副本,每份配置部分資金,混合後的投資組合便能持有一組滾動的配置,而非單一起始日期的押注。

下方的圖表針對包含廣泛市場、產業、國際及金屬類 ETF 的九檔基金組合進行排序步驟,使用最近 21 個每日收盤價,使報酬率涵蓋精確的 20 個交易日。

查詢相對於 SPY 之 20 日報酬率(九檔 ETF 組合)
每個數據背後的精確 SQL 語法
WITH bounds AS
(
    SELECT
        min(d) AS first_day,
        max(d) AS last_day
    FROM
    (
        SELECT date AS d
        FROM global_markets.stocks_daily_aggs
        WHERE ticker = 'SPY'
          AND date >= today() - 120
        GROUP BY d
        ORDER BY d DESC
        LIMIT 21
    )
)
SELECT
    sleeve.ticker                            AS etf,
    sleeve.ret_pct                           AS return_pct,
    round(sleeve.ret_pct - bench.ret_pct, 2) AS excess_vs_spy_pct
FROM
(
    SELECT
        ticker,
        round((argMax(toFloat64(close), date) / argMin(toFloat64(close), date) - 1) * 100, 2) AS ret_pct
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
      AND date >= (SELECT first_day FROM bounds)
      AND date <= (SELECT last_day FROM bounds)
    GROUP BY ticker
) AS sleeve
CROSS JOIN
(
    SELECT
        round((argMax(toFloat64(close), date) / argMin(toFloat64(close), date) - 1) * 100, 2) AS ret_pct
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= (SELECT first_day FROM bounds)
      AND date <= (SELECT last_day FROM bounds)
) AS bench
ORDER BY excess_vs_spy_pct DESC
Run this yourself

在排序頂端,GLD 在這 20 個交易日內報酬率為 8.69%,相較於 SPY 的點數差為 6.34。在底部,XLU 的點數為 -5.81。每一列透過兩個長條圖呈現核心概念:基金的表現,以及扣除 SPY 在相同區間內的變動後所剩餘的數值。由於每檔基金皆針對同一基準指數在同一區間內進行衡量,因此在所有 9 列中,兩個長條之間的距離代表相同的數值。

Alpha 歸因的實際衡量內容

Alpha 歸因是一種迴歸分析。將策略的報酬序列與一個或多個基準報酬序列進行對齊,並在散佈圖中擬合出一條直線。每個基準的斜率代表曝險程度:即策略隨該標的同步變動的比例。截距(intercept)則是扣除這些曝險後的剩餘部分,這部分即被稱為 Alpha。R 平方(R squared)是第三個數值,代表基準序列所能解釋的策略變異比例,範圍從 0%(基準無法解釋任何變異)到 100%(策略完全由基準加上一個常數組成)。

若將輪動規則與單一廣泛市場序列進行迴歸,通常看起來具有原創性。在 2026 年 8 月開源並以確定性合成價格運行的此類規則歸因報告中,單一基準擬合的 R 平方為 14.0%。策略六分之七的變異無法被解釋,這在頁面上被解讀為原創性。若改用該規則實際持有的曝險代理指標(如動能因子及兩檔標的組合所帶來的產業集中度),R 平方會提升至 63.6%,而截距則降至每年 0.38%。報酬序列與程式碼相同,但比較基準不同。該策略實際上只是在租用眾所周知的曝險。

該研究從固定種子碼生成價格,因此沒有數據供應商的讀者也能重現其列出的每一個數字。此外,該專案在撰寫時僅有數日之久,且此類專案每週都在變動。在引用其中的數字前,請務必標註您所運行的確切提交版本(commit)或標記發布版本(tagged release):只要因子代理指標或樣本區間發生變動,歸因數據就會隨之改變。我們關於 可重現回測工具 的說明從另一個角度涵蓋了相同的習慣。

即便不使用因子模型術語,這個教訓依然適用。您所進行迴歸分析的基準決定了您看起來擁有多少 Alpha,因此請在觀察截距前先選定基準,並寫下為何這是正確的比較對象。在看到結果後才挑選比較基準,衡量的是「選擇比較基準」這一行為本身。

ETF 有多少比例已屬於基準指數

您不需要完整的因子模型也能預見問題。取一檔基金的每日報酬,與 SPY 在相同交易日的每日報酬對齊,並將相關係數平方。這即得出該基金的每日變異中,已被單一廣泛市場基準所解釋的比例。

查詢各基金每日變動受 SPY 解釋之比例(過去兩年)
每個數據背後的精確 SQL 語法
WITH daily AS
(
    SELECT
        ticker,
        date,
        toFloat64(close) AS px,
        lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
      AND date >= today() - 760
)
SELECT
    sleeve.ticker                                                AS etf,
    round(pow(corr(sleeve.fund_ret, bench.spy_ret), 2) * 100, 1) AS r_squared_vs_spy_pct
FROM
(
    SELECT ticker, date, px / prev_px - 1 AS fund_ret
    FROM daily
    WHERE prev_px > 0
      AND ticker != 'SPY'
) AS sleeve
INNER JOIN
(
    SELECT date, px / prev_px - 1 AS spy_ret
    FROM daily
    WHERE prev_px > 0
      AND ticker = 'SPY'
) AS bench USING (date)
GROUP BY sleeve.ticker
ORDER BY r_squared_vs_spy_pct DESC
Run this yourself

在過去兩年中,QQQ 在此組合中擁有最高的單一基準 R 平方,數值為 90.3%,而 GLD 最低,為 3.1%。由該圖表高位端組成的投資組合,幾乎等同於以不同權重重新陳述基準指數,而針對基準以外的標的所測得的任何截距,都會悄悄吸收其中的差異。低位端則是輪動策略能增加廣泛市場尚未包含的報酬流之處,但這也是兩檔標的組合不再像分散式投資組合的地方。

領先基金變動的頻率

排序規則只有在基金表現出現分歧時才有篩選意義。下方的圖表衡量每檔基金在日曆月內的報酬率與 SPY 在同月份的表現,並保留每個月最強與最弱的組合。

查詢各月相對於 SPY 之最強與最弱板塊
每個數據背後的精確 SQL 語法
WITH monthly AS
(
    SELECT
        toStartOfMonth(date)           AS m,
        ticker,
        argMin(toFloat64(close), date) AS first_close,
        argMax(toFloat64(close), date) AS last_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
      AND date >= toStartOfMonth(today() - 400)
      AND date <  toStartOfMonth(today())
    GROUP BY m, ticker
)
SELECT
    formatDateTime(x.m, '%Y-%m')   AS month,
    argMax(x.ticker, x.excess_pct) AS leading_etf,
    round(max(x.excess_pct), 2)    AS leader_excess_pct,
    round(min(x.excess_pct), 2)    AS laggard_excess_pct
FROM
(
    SELECT
        sleeve.m      AS m,
        sleeve.ticker AS ticker,
        (sleeve.last_close / sleeve.first_close - 1) * 100
          - (bench.spy_last / bench.spy_first - 1) * 100 AS excess_pct
    FROM monthly AS sleeve
    INNER JOIN
    (
        SELECT
            m,
            first_close AS spy_first,
            last_close  AS spy_last
        FROM monthly
        WHERE ticker = 'SPY'
    ) AS bench USING (m)
    WHERE sleeve.ticker != 'SPY'
) AS x
GROUP BY x.m
ORDER BY x.m
Run this yourself

13 個完整月份中,序列始於 2025-07,由 XLK 領先。在最近一個完整月份 2026-07 中,最強的組合為 XLE,相較於 SPY 的點數差為 12.59,而最弱的組合為 -5.7。兩條線之間的距離即為排序規則所依賴的離散度。當兩線靠攏時,排序幾乎是隨意的,而依據每次排序進行交易的規則,在這些月份中都會付出換手成本。月份邊界在此處需要特別注意;如何衡量月度報酬 一文詳細說明了相關慣例。

兩檔標的集中度是真正的風險嗎?

波動率是該問題最直觀的版本。此圖表將每檔基金在過去兩年內的每日報酬變異進行年化,並以 SPY 作為參考基準,同時列出每檔基金表現最差的單一交易日。

查詢年化波動率與單日最大跌幅(過去兩年)
每個數據背後的精確 SQL 語法
WITH daily AS
(
    SELECT
        ticker,
        date,
        toFloat64(close) AS px,
        lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
      AND date >= today() - 760
)
SELECT
    ticker                                                   AS etf,
    round(stddevSamp(px / prev_px - 1) * sqrt(252) * 100, 1) AS annual_vol_pct,
    round(min(px / prev_px - 1) * 100, 2)                    AS worst_day_pct
FROM daily
WHERE prev_px > 0
GROUP BY ticker
ORDER BY annual_vol_pct DESC
Run this yourself

XLK 位於波動較大的一端,年化波動率為 27.7%,最差單一交易日表現為 -6.82%;XLU 則位於波動較小的一端,數值為 15.8%。同時持有兩檔標的的規則會從此範圍中選取,而不會進行平均,因此波動較大端所伴隨的較深回檔,在歸因分析中會被視為曝險而非技術。低波動率異常 筆記涵蓋了同一圖表低波動端長期以來的記錄。

您的輪動回測需進行的四項檢查

  1. 同日訊號洩漏。若 20 個交易日的排序是在收盤後計算,且成交是在同一收盤價執行,則該測試使用了交易當下尚未掌握的資訊。應以 t 交易日結束的數據進行排序,並在 t 加 1 交易日執行成交,再比較兩者版本:兩者之間的差距即為洩漏的規模。前瞻偏差 展示了該差距的規模。
  2. 基金列表中的存續性。從現存基金組成的宇宙中,排除了所有在過程中清算或合併的基金,而清算通常集中在表現最差的產品中。存續偏差 適用於 ETF 列表,正如其適用於股票列表一樣。
  3. 事先選定基準。在進行第一次迴歸前先寫下比較基準,包括您預期該規則會持有的曝險代理指標。只有針對您事先承諾的基準,截距才有意義。
  4. 直接衡量集中度。分別運行持有前兩名、前四名以及全宇宙等權重的相同排序規則。若大部分報告的優勢都來自兩檔標的版本,則集中度本身就是部位,而排序只是選擇採取哪種集中度的一種方式。

常見問題

什麼是 ETF 相對強弱?

相對強弱是指基金在固定回溯期內的報酬率,減去基準指數在同一區間內的報酬率。依此排序會將表現優於基準的基金排在前面,無論其原始報酬率是否為正。

什麼是 Alpha 歸因?

這是策略報酬對一個或多個基準報酬序列的迴歸分析。斜率衡量策略所承擔的曝險,截距則是扣除這些曝險後剩餘的報酬。該截距即為通常報告的 Alpha。

高 R 平方是否代表策略很差?

不是。高 R 平方代表基準解釋了策略大部分的變異,這是關於重疊程度而非品質的陳述。改變的是截距:迴歸分析現在能識別出的曝險,將不再被計入原創性。

為何要持有重疊式投資組合而非單一投資組合?

每 20 個交易日重新平衡一次的單一投資組合,會使結果取決於起始日期。運行數個錯開的相同規則副本,可以平均掉這種選擇偏差,並將換手分散在整個月份,而非集中在單一日期。


此處的每個圖表皆附帶產生該圖表的 SQL。開啟其中一個,替換為您自己的基金列表,並在 Strasmore 終端機上重新運行排序,以觀察順序的變動。

#etfs#momentum#quant#factor models#attribution