Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Relative strength ya ETF na alpha attribution

Jifunze jinsi ya kupanga viwango vya ETF kwa kutumia return ya vipindi ishirini dhidi ya SPY. Fahamu jinsi alpha attribution inavyoboresha intercept kwenye benchmark.

Jinsi kanuni ya relative strength ya ETF inavyofanya kazi

Relative strength ni ulinganisho, si mapato. Mfuko uliopanda kwa 3% katika vipindi 20 wakati fahirisi (benchmark) imepanda kwa 5% una relative strength hasi. Mfuko ulioshuka kwa 1% wakati fahirisi imeshuka kwa 4% una relative strength chanya. Namba inayotumika kupanga viwango ni excess return: mabadiliko ya asilimia ya mfuko katika kipindi maalum, ukiondoa mabadiliko ya asilimia ya fahirisi katika kipindi hicho hicho, yakipimwa kipindi kwa kipindi.

Kuna machaguo mawili yanayotegemea hilo. Lookback huamua kiasi cha historia kinachoangaliwa na mfumo wa kupanga viwango, ambapo vipindi 20 ni takriban mwezi mmoja wa biashara. Holding period huamua muda ambao mshindi anabaki kwenye kwingineko. Wakati vipindi hivi viwili vinalingana, kwingineko nzima hubadilishwa tarehe moja kwa mwezi na matokeo yote hutegemea tarehe uliyoanza. Overlapping sleeves huondoa utegemezi huo: endesha nakala kadhaa za kanuni hiyo hiyo zilizopishana kwa vipindi vichache, panga kiasi cha mtaji kwa kila moja, na kwingineko iliyochanganywa itakuwa na mchanganyiko unaozunguka badala ya dau la tarehe moja ya kuanza.

Jopo hapa chini linaendesha hatua ya kupanga viwango kwenye kundi la fedha tisa za ETFs za soko pana, sekta, kimataifa, na metali, kwa kutumia bei 21 za mwisho za kila siku ili mapato yawe ya vipindi 20 kamili.

UlizaMrejesho wa vipindi 20 dhidi ya SPY katika kundi la ETF tisa
SQL halisi nyuma ya kila namba
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

Kwenye kilele cha mpangilio, GLD ilitoa 8.69% katika vipindi hivyo 20, ikiwa na 6.34 points dhidi ya SPY. Chini kabisa, XLU ilikuwa na -5.81 points. Kila safu inabeba wazo zima katika pau mbili: kile mfuko ulifanya, na kile kinachobaki baada ya kuondoa mienendo ya SPY katika kipindi hicho hicho. Umbali kati ya pau hizo mbili ni namba ile ile katika safu zote 9, kwa kuwa kila mfuko hupimwa dhidi ya fahirisi moja katika kipindi kimoja.

Alpha attribution inapima nini hasa

Alpha attribution ni regression. Pangilia mfululizo wa mapato ya mkakati dhidi ya mfululizo mmoja au zaidi wa mapato ya fahirisi na chora mstari ulionyooka kupitia data hizo. Mteremko (slope) kwenye kila fahirisi ni exposure: kiasi ambacho mkakati husogea sambamba na kitu hicho. Intercept ni kile kinachobaki baada ya exposures hizo kulipiwa, na salio hilo ndilo huitwa alpha. R squared ni namba ya tatu, sehemu ya mabadiliko ya mkakati ambayo mfululizo wa fahirisi unaiwakilisha, kuanzia 0% (fahirisi hazielezei chochote) hadi 100% (mkakati ni fahirisi hizo pamoja na constant).

Fanya regression ya kanuni ya mzunguko dhidi ya mfululizo mmoja wa soko pana na kwa kawaida itaonekana kama ya kipekee. Katika attribution iliyochapishwa ya kanuni ya aina hii, iliyofunguliwa kwa umma mnamo Agosti 2026 na kuendeshwa kwa bei za synthetic, ulinganifu huo wa fahirisi moja ulizalisha R squared ya 14.0%. Sita ya saba ya mabadiliko ya mkakati haikuelezewa, jambo ambalo linaonekana kwenye ukurasa kama uhalisi. Kubadilisha na proxies za exposures ambazo kanuni ilikuwa ikishikilia, yaani momentum tilt na mkusanyiko wa sekta ambao kwingineko ya majina mawili inao, ilipandisha R squared hadi 63.6% na kuvuta intercept hadi 0.38% kwa mwaka. Mfululizo wa mapato ule ule na kanuni ile ile. Seti tofauti ya ulinganisho. Mkakati ulikuwa ukikodisha exposures zinazojulikana.

Utafiti huo huzalisha bei zake kutoka kwa mbegu (seed) isiyobadilika, hivyo msomaji asiye na muuzaji wa data anaweza kuzalisha kila takwimu inayochapishwa. Pia ni mradi wa siku chache tu wakati wa kuandika, na mradi mchanga kama huo hubadilika kila wiki. Bainisha commit kamili au toleo uliloliendesha kabla ya kunukuu namba kutoka humo: takwimu za attribution hubadilika wakati wowote proxies za factor au kipindi cha sampuli kinapobadilika. Ujumbe wetu kuhusu reproducible backtest tooling unashughulikia tabia hiyo hiyo kutoka upande mwingine.

Somo linabaki bila msamiati wa factor-model. Fahirisi unayofanyia regression huamua kiasi cha alpha unachoonekana kuwa nacho, hivyo ichague kabla ya kuangalia intercept na uandike kwa nini ndiyo ulinganisho sahihi. Seti ya ulinganisho iliyochaguliwa baada ya kuona matokeo hupima chaguo la ulinganisho.

Ni kiasi gani cha ETF tayari ni fahirisi

Hauhitaji factor model kamili ili kuona tatizo linakuja. Chukua mapato ya kila siku ya mfuko mmoja, yapangilie dhidi ya mapato ya kila siku ya SPY katika vipindi hivyo hivyo, na uweke mraba wa correlation. Hiyo inatoa sehemu ya mabadiliko ya kila siku ya mfuko ambayo fahirisi moja ya soko pana tayari inaiwakilisha.

UlizaSehemu ya mabadiliko ya kila siku ya mfuko inayoelezwa na SPY, miaka miwili iliyopita
SQL halisi nyuma ya kila namba
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

Katika miaka miwili iliyopita, QQQ ilikuwa na R squared ya juu zaidi ya fahirisi moja katika kundi hili kwa 90.3%, na GLD ya chini kabisa kwa 3.1%. Sleeve iliyokusanywa kutoka mwisho wa juu wa chati hiyo iko karibu na uundaji upya wa fahirisi chini ya uzito tofauti, na intercept yoyote inayopimwa dhidi ya kitu kingine isipokuwa fahirisi itafyonza tofauti hiyo kimyakimya. Mwisho wa chini ndipo mzunguko unaweza kuongeza mtiririko wa mapato ambao soko pana halina tayari, na pia ndipo kwingineko ya majina mawili inapoacha kufanana na kwingineko iliyotofautishwa (diversified).

Ni mara ngapi mfuko unaoongoza hubadilika

Kanuni ya kupanga viwango ina kitu cha kupanga tu wakati fedha hazikubaliani. Jopo hapa chini linapima mapato ya kila mwezi ya kila mfuko dhidi ya yale ya SPY katika mwezi huo huo, kisha huweka sleeve yenye nguvu zaidi na dhaifu zaidi kwa kila mwezi.

UlizaSleeve yenye nguvu na dhaifu zaidi dhidi ya SPY, kwa mwezi wa kalenda
SQL halisi nyuma ya kila namba
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

Katika miezi 13 kamili, mfululizo huanza mnamo 2025-07 na XLK mbele. Katika mwezi kamili wa hivi karibuni, 2026-07, sleeve yenye nguvu zaidi ilikuwa XLE kwa 12.59 points dhidi ya SPY, wakati ile dhaifu zaidi ilipimwa -5.7. Umbali kati ya mistari hiyo miwili ni mtawanyiko (dispersion) ambao kanuni ya kupanga viwango hujilisha nao. Miezi ambapo mistari inakaribiana ni miezi ambapo upangaji ni wa kubahatisha, na kanuni inayofanya biashara kwa kila mpangilio hulipa gharama za mzunguko (turnover) katika miezi yote hiyo. Mipaka ya mwezi inastahili uangalifu wake hapa; how monthly returns are measured inaelezea mikataba hiyo.

Je, mkusanyiko wa majina mawili ndio hatari halisi?

Volatility ndiyo toleo rahisi zaidi la swali hilo. Jopo hili hufanya mabadiliko ya mapato ya kila siku ya kila mfuko kuwa ya kila mwaka katika miaka hiyo miwili na kubeba SPY kama pau ya marejeleo, pamoja na kipindi kibaya zaidi ambacho kila moja ilichapisha.

UlizaVolatili ya kila mwaka na kipindi kibaya zaidi cha siku moja, miaka miwili iliyopita
SQL halisi nyuma ya kila namba
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 ilikuwa mwisho wa upana kwa 27.7% kwa mwaka, ikiwa na kipindi kibaya zaidi cha -6.82%, na XLU mwisho wa ufinyu kwa 15.8%. Kanuni inayoshikilia majina mawili kwa wakati mmoja huchota kutoka kwenye safu hii bila kupata wastani, na drawdowns za kina zinazokuja na mwisho wa upana hutua katika attribution kama exposure badala ya ustadi. Ujumbe wa low volatility anomaly unashughulikia rekodi ya muda mrefu mwishoni mwa chati hiyo hiyo.

Ukaguzi nne kwa backtest yako ya mzunguko

  1. Uvujaji wa ishara ya siku hiyo hiyo. Ikiwa upangaji wa vipindi 20 unahesabiwa kupitia kufungwa kwa kipindi na ujazaji (fill) unarekodiwa wakati huo huo wa kufungwa, jaribio hufanya biashara kwa habari ambazo halikuwa nazo wakati wa biashara. Panga viwango kwenye data hadi kipindi t, jaza kwenye kipindi t pamoja na moja, na ulinganishe matoleo hayo mawili: pengo kati yao ni ukubwa wa uvujaji. Look-ahead bias inaonyesha jinsi pengo hilo linavyokuwa kubwa.
  2. Survivorship katika orodha ya fedha. Kundi lililokusanywa kutoka kwa fedha zilizopo leo huondoa kila mfuko uliofungwa au kuunganishwa njiani, na kufungwa kwa fedha hujilimbikiza katika bidhaa zilizofanya vibaya zaidi. Survivorship bias inatumika kwa orodha ya ETF kama inavyotumika kwa orodha ya hisa.
  3. Fahirisi iliyochaguliwa mapema. Andika seti ya ulinganisho kabla ya regression ya kwanza, ikijumuisha proxies za exposures unazotarajia kanuni ishikilie. Intercept ina maana tu dhidi ya fahirisi uliyojitolea mapema.
  4. Mkusanyiko uliopimwa moja kwa moja. Endesha upangaji huo huo ukishikilia majina mawili ya juu, kisha manne ya juu, kisha uzito sawa wa kundi zima. Ikiwa sehemu kubwa ya faida iliyoripotiwa iko katika toleo la majina mawili, mkusanyiko ndio msimamo, na upangaji ni njia ya kuchagua ni mkusanyiko upi wa kuchukua.

Maswali Yanayoulizwa Mara Kwa Mara

ETF relative strength ni nini?

Relative strength ni mapato ya mfuko katika kipindi maalum cha lookback ukiondoa mapato ya fahirisi katika kipindi hicho hicho. Mpangilio uliopangwa kulingana na hilo huweka fedha zilizozidi fahirisi juu, bila kujali kama mapato yao ghafi yalikuwa chanya au la.

Alpha attribution ni nini?

Ni regression ya mapato ya mkakati kwenye mfululizo mmoja au zaidi wa mapato ya fahirisi. Miteremko hupima exposures ambazo mkakati unazo, na intercept ni mapato yaliyobaki baada ya exposures hizo kuhesabiwa. Intercept hiyo ndiyo namba inayoripotiwa kama alpha.

Je, R squared ya juu inamaanisha mkakati ni mbaya?

Hapana. R squared ya juu inamaanisha fahirisi zinawakilisha sehemu kubwa ya mabadiliko ya mkakati, ambayo ni taarifa kuhusu mwingiliano badala ya ubora. Kinachobadilika ni intercept: exposures ambazo regression inaweza sasa kuziona huacha kuhesabiwa kama uhalisi.

Kwa nini ushikilie overlapping sleeves badala ya kwingineko moja?

Kwingineko moja inayorekebishwa kila vipindi 20 hufanya matokeo kutegemea tarehe ya kuanza. Kuendesha nakala kadhaa zilizopishana za kanuni hiyo hiyo hufanya wastani wa chaguo hilo na kusambaza mzunguko (turnover) katika mwezi badala ya kuujilimbikizia tarehe moja.


Kila jopo hapa linakuja na SQL iliyolizalisha. Fungua moja, badilisha na orodha yako ya fedha, na uendeshe tena upangaji kwenye terminal ya Strasmore ili kutazama mpangilio ukibadilika.

#etfs#momentum#quant#factor models#attribution