Relatywna siła ETF i atrybucja alfa w portfelu
Strategia relatywnej siły ETF wykorzystuje 20-sesyjne stopy zwrotu względem SPY. Analiza pokazuje, jak atrybucja alfa koryguje wyraz wolny po dopasowaniu modelu regresji.
Strategia relatywnej siły ETF szereguje niewielki koszyk funduszy według tego, o ile ich ostatnia stopa zwrotu przewyższa lub ustępuje wynikom benchmarku, a następnie utrzymuje te, które zajęły czołowe miejsca. Zasada, którą analizuje ten wpis, jest prosta: co 20 sesji należy uszeregować uniwersum funduszy według stopy zwrotu z 20 sesji pomniejszonej o wynik SPY w tym samym okresie, a następnie utrzymywać dwa najlepsze instrumenty w nakładających się portfelach (tzw. overlapping sleeves). Kluczowym elementem jest atrybucja, która pozwala przetestować taką strategię. W jednej z opublikowanych analiz tego modelu, wyraz wolny (intercept), który byłby raportowany jako alfa, wyniósł 0,38% rocznie po uwzględnieniu w regresji ekspozycji, które strategia faktycznie nabywała.
Jak działa zasada relatywnej siły ETF
Relatywna siła to porównanie, a nie stopa zwrotu. Fundusz, który zyskał 3% w ciągu 20 sesji, podczas gdy benchmark wzrósł o 5%, ma ujemną relatywną siłę. Fundusz, który stracił 1%, podczas gdy benchmark spadł o 4%, ma dodatnią relatywną siłę. Wartością, według której odbywa się ranking, jest stopa zwrotu ponad benchmark (excess return): procentowa zmiana wartości funduszu w określonym oknie czasowym minus procentowa zmiana benchmarku w tym samym oknie, mierzona sesja po sesji.
Na tym fundamencie opierają się dwa wybory. Okres obserwacji (lookback) określa, jak długą historię bierze pod uwagę ranking – 20 sesji odpowiada w przybliżeniu jednemu miesiącowi handlowemu. Okres utrzymywania (holding period) wyznacza czas, przez jaki zwycięzca pozostaje w portfelu. Gdy oba parametry są równe, cały portfel jest wymieniany w jednym terminie w miesiącu, a wynik zależy od daty rozpoczęcia inwestycji. Nakładające się portfele eliminują tę zależność: uruchamia się kilka kopii tej samej zasady przesuniętych o kilka sesji, przydzielając każdej ułamek kapitału, dzięki czemu portfel zbiorczy utrzymuje płynną mieszankę zamiast zakładu opartego na jednej dacie startu.
Poniższy panel przeprowadza etap rankingu dla uniwersum dziewięciu funduszy ETF obejmujących szeroki rynek, sektory, rynki międzynarodowe oraz metale, wykorzystując ostatnie 21 dziennych wycen zamknięcia, tak aby stopa zwrotu obejmowała dokładnie 20 sesji.
Dokładny kod SQL dla każdej liczby
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 DESCNa szczycie rankingu GLD osiągnął 8.69% w ciągu tych 20 sesji, czyli 6.34 punktów względem SPY. Na końcu zestawienia XLU zanotował -5.81 punktów. Każdy wiersz przedstawia ideę za pomocą dwóch słupków: wyniku funduszu oraz wyniku po odjęciu stopy zwrotu SPY z tego samego okresu. Odległość między słupkami jest taka sama we wszystkich 9 wierszach, ponieważ każdy fundusz jest mierzony względem jednego benchmarku w jednym oknie czasowym.
Co faktycznie mierzy atrybucja alfy
Atrybucja alfy to regresja. Zestawia się szereg stóp zwrotu strategii z jednym lub kilkoma szeregami stóp zwrotu benchmarków i dopasowuje linię prostą do rozkładu punktów. Nachylenie (slope) przy każdym benchmarku to ekspozycja: informacja o tym, w jakim stopniu strategia porusza się w korelacji z danym aktywem. Wyraz wolny (intercept) to to, co pozostaje po opłaceniu tych ekspozycji – i to właśnie nazywa się alfą. R-kwadrat (R squared) to trzecia wartość, określająca udział zmienności strategii wyjaśniany przez szeregi benchmarkowe, w zakresie od 0% (benchmarki niczego nie wyjaśniają) do 100% (strategia to suma benchmarków plus stała).
Jeśli podda się regresji strategię rotacyjną względem jednego szerokiego indeksu rynkowego, zazwyczaj wygląda ona na oryginalną. W opublikowanej atrybucji strategii o tym kształcie, udostępnionej w sierpniu 2026 r. i przetestowanej na deterministycznych cenach syntetycznych, dopasowanie do jednego benchmarku dało R-kwadrat na poziomie 14,0%. Sześć siódmych zmienności strategii pozostawało niewyjaśnionych, co w raporcie odczytuje się jako oryginalność. Zastąpienie benchmarku wskaźnikami ekspozycji, które strategia faktycznie utrzymywała (tilt w stronę momentum oraz koncentracja sektorowa wynikająca z portfela dwuskładnikowego), podniosło R-kwadrat do 63,6% i obniżyło wyraz wolny do 0,38% rocznie. Ten sam szereg stóp zwrotu i ten sam kod. Inny zestaw porównawczy. Strategia po prostu „wynajmowała” dobrze znane ekspozycje.
To badanie generuje własne ceny z ustalonego ziarna (seed), więc czytelnik bez dostępu do zewnętrznego dostawcy danych może odtworzyć każdą liczbę. Badanie jest również bardzo świeże w momencie pisania, a tak młody projekt zmienia się co tydzień. Należy zapisać dokładny commit lub wersję przed zacytowaniem jakiejkolwiek liczby: wartości atrybucji zmieniają się, gdy zmieniają się wskaźniki czynnikowe lub okno próbkowania. Nasza notatka na temat narzędzi do odtwarzalnych backtestów omawia ten sam nawyk z drugiej strony.
Wniosek pozostaje aktualny nawet bez żargonu modeli czynnikowych. Benchmark, względem którego przeprowadzasz regresję, determinuje, jak dużą alfę wydajesz się posiadać. Wybierz go, zanim spojrzysz na wyraz wolny i uzasadnij, dlaczego jest to właściwe porównanie. Zestaw porównawczy wybrany po zobaczeniu wyników mierzy jedynie trafność wyboru porównania.
Jaka część ETF to już benchmark
Nie potrzeba pełnego modelu czynnikowego, aby dostrzec nadchodzący problem. Weź dzienne stopy zwrotu funduszu, zestaw je z dziennymi stopami zwrotu SPY z tych samych sesji i podnieś korelację do kwadratu. To daje udział dziennej zmienności funduszu, który jest już wyjaśniony przez szeroki benchmark rynkowy.
Dokładny kod SQL dla każdej liczby
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 DESCW ciągu ostatnich dwóch lat QQQ miał najwyższy R-kwadrat względem pojedynczego benchmarku w tym uniwersum na poziomie 90.3%, a GLD najniższy na poziomie 3.1%. Portfel złożony z funduszy z górnej części tego wykresu jest bliski odtworzeniu benchmarku przy innej wadze, a każdy wyraz wolny mierzony względem czegoś innego niż benchmark po cichu wchłonie tę różnicę. Dolny koniec to miejsce, w którym rotacja może dodać strumień zwrotu, którego szeroki rynek nie zawiera, ale to także miejsce, w którym portfel dwuskładnikowy przestaje przypominać zdywersyfikowany portfel.
Jak często zmienia się wiodący fundusz
Zasada rankingowa ma sens tylko wtedy, gdy fundusze wykazują rozbieżności. Poniższy panel mierzy miesięczną stopę zwrotu każdego funduszu względem SPY w tym samym miesiącu, a następnie wyodrębnia najsilniejszy i najsłabszy składnik dla każdego miesiąca.
Dokładny kod SQL dla każdej liczby
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.mW ciągu 13 pełnych miesięcy, seria otwiera się w 2025-07 z XLK na czele. W ostatnim pełnym miesiącu, 2026-07, najsilniejszym składnikiem był XLE z wynikiem 12.59 punktów względem SPY, podczas gdy najsłabszy wyniósł -5.7. Odległość między dwiema liniami to dyspersja, na której żeruje zasada rankingowa. Miesiące, w których linie się zbliżają, to miesiące, w których sortowanie jest niemal arbitralne, a zasada handlująca przy każdym rankingu płaci koszty obrotu w każdym z nich. Granice miesięcy wymagają tutaj szczególnej uwagi; sposób mierzenia miesięcznych stóp zwrotu omawia przyjęte konwencje.
Czy koncentracja na dwóch nazwach to realne ryzyko?
Zmienność jest najprostszą wersją tego pytania. Ten panel annualizuje zmienność dziennych stóp zwrotu każdego funduszu z tych samych dwóch lat i przedstawia SPY jako słupek odniesienia, obok najgorszej pojedynczej sesji, jaką odnotował każdy z nich.
Dokładny kod SQL dla każdej liczby
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 znajdował się na szerokim końcu z 27.7% w ujęciu rocznym, z najgorszą pojedynczą sesją na poziomie -6.82%, a XLU na wąskim końcu z 15.8%. Zasada utrzymująca dwa instrumenty jednocześnie czerpie z tego zakresu bez uśredniania, a głębsze obsunięcia kapitału (drawdowns), które towarzyszą szerokiemu końcowi, w atrybucji lądują jako ekspozycja, a nie jako umiejętności. Notatka o anomalii niskiej zmienności omawia długoterminowe wyniki na wąskim końcu tego samego wykresu.
Cztery kontrole dla własnego backtestu rotacyjnego
- Wyciek sygnału z tej samej sesji. Jeśli ranking z 20 sesji jest obliczany po zamknięciu sesji, a zlecenie jest realizowane po tym samym kursie zamknięcia, test handluje na informacjach, których nie posiadał w momencie decyzji. Szereguj dane do sesji t, realizuj zlecenie w sesji t plus jeden i porównaj obie wersje: różnica między nimi to wielkość wycieku. Błąd patrzenia w przyszłość (look-ahead bias) pokazuje, jak duża staje się ta różnica.
- Przeżywalność (survivorship) na liście funduszy. Uniwersum złożone z funduszy istniejących dzisiaj wyklucza każdy fundusz, który został zamknięty lub połączony w trakcie trwania testu, a zamknięcia grupują się w produktach o najgorszych wynikach. Błąd przeżywalności dotyczy listy ETF dokładnie tak samo, jak listy akcji.
- Benchmark wybrany z wyprzedzeniem. Zapisz zestaw porównawczy przed pierwszą regresją, włączając wskaźniki ekspozycji, których spodziewasz się po strategii. Wyraz wolny ma znaczenie tylko względem benchmarku, do którego zobowiązałeś się z góry.
- Koncentracja mierzona bezpośrednio. Przeprowadź ten sam ranking, utrzymując dwa najlepsze instrumenty, potem cztery, a następnie równe wagi całego uniwersum. Jeśli większość raportowanej przewagi wynika z wersji dwuskładnikowej, to koncentracja jest pozycją, a ranking jest tylko sposobem wyboru, którą koncentrację przyjąć.
FAQ
Czym jest relatywna siła ETF?
Relatywna siła to stopa zwrotu funduszu w określonym oknie czasowym minus stopa zwrotu benchmarku w tym samym oknie. Ranking oparty na tym wskaźniku stawia na szczycie fundusze, które wyprzedziły benchmark, niezależnie od tego, czy ich surowe stopy zwrotu były dodatnie.
Czym jest atrybucja alfy?
To regresja stóp zwrotu strategii względem jednego lub kilku szeregów stóp zwrotu benchmarków. Nachylenia (slopes) mierzą ekspozycje, które niesie strategia, a wyraz wolny (intercept) to stopa zwrotu pozostała po uwzględnieniu tych ekspozycji. Ten wyraz wolny to liczba zazwyczaj raportowana jako alfa.
Czy wysoki R-kwadrat oznacza, że strategia jest zła?
Nie. Wysoki R-kwadrat oznacza, że benchmarki wyjaśniają większość zmienności strategii, co jest stwierdzeniem o nakładaniu się (overlap), a nie o jakości. Zmienia się wyraz wolny: ekspozycje, które regresja może teraz dostrzec, przestają być liczone jako oryginalność.
Dlaczego warto utrzymywać nakładające się portfele zamiast jednego?
Pojedynczy portfel rebalansowany co 20 sesji sprawia, że wynik zależy od daty rozpoczęcia. Uruchomienie kilku przesuniętych kopii tej samej zasady uśrednia ten wybór i rozkłada obrót na cały miesiąc, zamiast koncentrować go w jednym terminie.
Każdy panel tutaj jest dostarczany z kodem SQL, który go wygenerował. Otwórz jeden, wstaw własną listę funduszy i uruchom ponownie ranking na terminalu Strasmore, aby obserwować zmiany w kolejności.