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.
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 DESCKwenye 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.
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 DESCKatika 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.
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.mKatika 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.
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 DESCXLK 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
- 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.
- 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.
- 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.
- 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.