Strategia równej wagi a optymalizacja portfela
Portfele o równej wadze przewyższają optymalizację przy krótkich próbach danych. Symulacja w języku Python wskazuje na punkt przecięcia wyników wraz ze wzrostem liczby obserwacji.
23.9
Strategia równej wagi kontra optymalizacja portfela
Portfele o równej wadze (equal weight) osiągają lepsze wyniki niż te oparte na optymalizacji wielkości pozycji w każdym przypadku, gdy próba danych jest zbyt krótka, aby precyzyjnie określić oczekiwane stopy zwrotu. Krótkie szeregi czasowe są w praktyce normą, a nie wyjątkiem.
Optymalizator stanowi jedynie poprawny arytmetycznie model zastosowany do danych wejściowych, których nikt nie potrafi rzetelnie zmierzyć. Portfel typu jeden przez N (1/N), czyli portfel o równej wadze, nie opiera się na żadnych szacunkach. To właśnie dlatego sprawdza się on w warunkach, w których prognozy są obarczone dużym błędem.
Czy równe ważenie faktycznie przewyższa optymalizację?
W określonych warunkach, tak. Rozważmy te pojęcia po kolei. Równe ważenie, zapisywane jako 1/N, dzieli kapitał równomiernie pomiędzy N pozycji i nie wymaga żadnych prognoz. Optymalizacja średniej wariancji (mean variance optimization) wyznacza wagi zapewniające najlepszą oczekiwaną stopę zwrotu na jednostkę szacowanej wariancji. Kryterium Kelly’ego wyznacza wagi maksymalizujące długoterminowy wzrost złożony; w przypadku aktywów nieskorelowanych wynik ten sprowadza się do wagi proporcjonalnej do oczekiwanej nadwyżki stopy zwrotu każdego aktywa podzielonej przez jego wariancję. Nasz przewodnik dotyczący doboru wielkości pozycji według kryterium Kelly’ego szczegółowo omawia ten wzór.
Oba modele optymalizacyjne wymagają tych samych danych wejściowych: oczekiwanej stopy zwrotu dla każdego aktywa. Jest to wielkość, którą estymatory próbkowe szacują najgorzej. Zmienność można wyznaczyć z krótkiego okna czasowego z akceptowalną precyzją. W przypadku średniej jest to niemożliwe, a różnica między tymi dwoma parametrami jest wystarczająco duża, aby dostrzec ją w każdej historii cen. Poniższe zestawienie obejmuje sześć popularnych spółek, analizuje każdy rok kalendarzowy od 2015 do 2024 roku z osobna i wskazuje rozpiętość między najwyższą a najniższą roczną estymatą. Analiza została przeprowadzona dwukrotnie dla każdej nazwy: raz dla zannualizowanej średniej dziennej stopy zwrotu, a raz dla zannualizowanej zmienności.
Dokładny kod SQL dla każdej liczby
WITH prices AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND date >= '2015-01-01'
AND date < '2025-01-01'
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
date,
c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
yearly AS
(
SELECT
ticker,
toYear(date) AS yr,
avg(ret) * 252 * 100 AS mean_pct,
stddevPop(ret) * sqrt(252) * 100 AS vol_pct
FROM rets
WHERE isFinite(ret)
GROUP BY ticker, yr
HAVING count() >= 200
)
SELECT
ticker,
round(max(mean_pct) - min(mean_pct), 1) AS mean_estimate_range_pct,
round(max(vol_pct) - min(vol_pct), 1) AS vol_estimate_range_pct
FROM yearly
GROUP BY ticker
ORDER BY mean_estimate_range_pct DESCDla NVDA roczna estymata średniej obejmuje zakres 184.7 punktów procentowych w ciągu tych dziesięciu lat, w porównaniu do 28.6 punktów zakresu w estymacie zmienności dla tej samej spółki w tym samym okresie. Najbardziej stabilna spółka w zestawieniu, KO, nadal wykazywała zmienność rocznej estymaty średniej na poziomie 23.9 punktów. Każdy model, który przyjmuje ubiegłoroczną średnią stopę zwrotu jako oczekiwaną stopę zwrotu na bieżący rok, dostarcza optymalizatorowi danych obarczonych tak dużym błędem.
Jak długi okres próbny jest potrzebny do oszacowania oczekiwanej stopy zwrotu?
Błąd standardowy szacowanej średniej stopy zwrotu to zmienność aktywa podzielona przez pierwiastek kwadratowy z długości próby wyrażonej w latach. W latach, nie w liczbie obserwacji: próbkowanie tych samych dwunastu miesięcy co godzinę zamiast codziennie nie wnosi żadnej wartości. Podstawiając do tego wzoru aktywo o zmienności dwudziestu procent, jeden rok historii daje błąd standardowy na poziomie dwudziestu punktów procentowych rocznie. Cztery lata zmniejszają go o połowę, do dziesięciu. Obniżenie go do jednego punktu – czyli precyzji, jakiej oczekiwalibyśmy przed uszeregowaniem dwóch aktywów, których rzeczywiste średnie różnią się o dwa punkty – wymaga czterech wieków danych.
W przypadku zmienności sytuacja wygląda inaczej. Jej precyzja poprawia się wraz z liczbą obserwacji, a nie z rozpiętością kalendarzową, więc już kilka miesięcy danych dziennych pozwala określić ją z dokładnością do kilku punktów. Poniższy panel dzieli dwadzieścia lat dziennych stóp zwrotu jednego funduszu indeksowego na niepokrywające się bloki o stałej długości, oblicza oba szacunki wewnątrz każdego bloku i przedstawia rozrzut tych szacunków pomiędzy blokami.
Dokładny kod SQL dla każdej liczby
WITH prices AS
(
SELECT
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2005-01-01'
AND date < '2025-01-01'
GROUP BY date
),
rets AS
(
SELECT
date,
c / lagInFrame(c, 1) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
numbered AS
(
SELECT
ret,
row_number() OVER (ORDER BY date ASC) AS i
FROM rets
WHERE isFinite(ret)
),
sweep AS
(
SELECT
arrayJoin([21, 63, 126, 252, 504]) AS n,
i,
ret
FROM numbered
),
blocks AS
(
SELECT
n,
intDiv(i - 1, n) AS blk,
avg(ret) * 252 * 100 AS mean_pct,
stddevPop(ret) * sqrt(252) * 100 AS vol_pct
FROM sweep
GROUP BY n, blk
HAVING count() = n
)
SELECT
concat(toString(n), ' sessions') AS sample_length,
round(stddevPop(mean_pct), 1) AS mean_estimate_spread_pct,
round(stddevPop(vol_pct), 1) AS vol_estimate_spread_pct,
count() AS window_count
FROM blocks
GROUP BY n
ORDER BY n ASCDla bloków o długości 21 sessions rozrzut szacunku średniej wynosi 53.7 punktów procentowych, wobec 10.9 punktów dla szacunku zmienności mierzonego na tych samych blokach. Wydłużenie bloku do 504 sessions powoduje zawężenie rozrzutu średniej do 10.6 punktów. Zmniejsza się on zgodnie z pierwiastkiem kwadratowym: każde zmniejszenie błędu o połowę wymaga czterokrotnie większej ilości danych.
Symulacja z ziarnem, którą można przeprowadzić samodzielnie
Nic z powyższych nie dowodzi, że błąd estymacji jest na tyle duży, by zapewnić przewagę strategii 1/N. Poniższy opis to potwierdza. Przepis wymaga jedynie zainstalowanego środowiska Python: bez plików danych, pobierania czy zewnętrznych pakietów. Symulacja generuje własne stopy zwrotu na podstawie wybranych parametrów, dzięki czemu znana jest wartość rzeczywista, a obie alokacje można ocenić w odniesieniu do niej.
- Zaimportuj dwa moduły,
import randomorazimport statistics, a takżefrom math import log. Ustaw ziarno w kolejnym wierszu za pomocąrandom.seed(20260816). - Zdefiniuj pięć aktywów o rzeczywistych rocznych oczekiwanych stopach zwrotu wynoszących pięć, sześć, siedem, osiem i dziewięć procent, każde o rzeczywistej rocznej zmienności na poziomie dwudziestu procent, nieskorelowanych ze sobą. Przelicz na krok dzienny za pomocą
mu_d = mu_a / 252orazsd_d = sd_a / (252 ** 0.5). - Wybierz długość próby T z zakresu
[60, 125, 250, 500, 1000, 2500, 5000]. - Wylosuj T dziennych stóp zwrotu dla każdego aktywa za pomocą
random.gauss(mu_d, sd_d). To losowanie stanowi całą historię, jaką dysponuje zarządzający. - Oszacuj średnią dla każdego aktywa za pomocą
statistics.meanoraz jego zmienność za pomocąstatistics.stdev. Te dwie estymaty to jedyne dane, którymi dysponuje optymalizator. - Zbuduj portfel o równych wagach, przypisując wartość 0,2 każdemu z pięciu aktywów. Portfel ten nie wykorzystuje żadnych estymat.
- Zbuduj portfel zoptymalizowany, ustawiając każdą surową wagę na
mu_hat / (sd_hat ** 2), a następnie dzieląc każdą wagę przez sumę wartości bezwzględnych surowych wag, co sprowadza oba portfele do tej samej ekspozycji brutto. - Wylosuj nową ścieżkę poza próbą (out of sample) obejmującą 2520 dziennych stóp zwrotu na aktywo z rzeczywistych parametrów. Żadna z alokacji nie miała z nią styczności.
- Oceń obie alokacje na tej ścieżce za pomocą średniej z
log(1 + r), gdzie r jest ważoną sumą stóp zwrotu pięciu aktywów w danym dniu. - Powtórz kroki od 4 do 9 dla 2000 niezależnych prób przy każdym T i zarejestruj udział prób, w których portfel o równych wagach osiąga lepsze wyniki niż portfel o wagach zoptymalizowanych.
Przeanalizuj zakres od krótkiego T do długiego T. Przy krótkim T portfel o równych wagach wygrywa w zdecydowanej większości prób. Udział ten systematycznie spada wraz ze wzrostem T, a przy długim T portfel zoptymalizowany wygrywa w większości przypadków. Gdzieś pośrodku następuje punkt przecięcia. Punkt ten przesuwa się wraz ze zmianą ziarna oraz różnicą między rzeczywistymi średnimi. Kierunek pozostaje niezmienny: więcej danych sprzyja optymalizatorowi, mniej danych sprzyja strategii 1/N. Aby powtórzyć symulację, zmień liczbę całkowitą wewnątrz random.seed(20260816) i uruchom zakres ponownie.
Dlaczego optymalizator potęguje błędne szacunki średniej
Należy przeanalizować sposób, w jaki szacunki wpływają na wagę. Szacowana średnia znajduje się w liczniku, a szacowana wariancja w mianowniku. Podwojenie szacowanej średniej powoduje podwojenie wagi. Obniżenie szacowanej wariancji o jedną czwartą powoduje wzrost wagi o jedną trzecią. W szczęśliwej próbie oba błędy działają w tym samym kierunku: seria korzystnych odczytów podnosi mierzoną średnią i często obniża mierzoną wariancję w tym samym oknie czasowym. Optymalizator interpretuje taki składnik aktywów jako lidera grupy i odpowiednio dostosowuje jego udział. Poza próbą (out of sample) aktywo to ponownie staje się przeciętnym elementem grupy. Strategia równej wagi nigdy nie uwzględniała tej szczęśliwej próby.
Symulacja stanowi łagodną wersję tego problemu. Pięć nieskorelowanych aktywów tworzy diagonalną macierz kowariancji, w której nie ma czego odwracać. Rzeczywiste portfele są skorelowane, a macierz kowariancji zbudowana na podstawie liczby obserwacji niewiele większej od liczby aktywów jest bliska osobliwości. Jej odwrócenie przekłada niewielkie błędy wejściowe na bardzo duże wagi; w ten sposób optymalizator przypisuje jednej pozycji wartość wielokrotnie przewyższającą kapitał, jednocześnie otwierając kompensującą krótką pozycję w jej bliskim substytucie. Nasza notatka na temat ryzyka koncentracji w portfelu opisuje wpływ takiej wagi na obsunięcie kapitału.
Dane wejściowe również nie pozostają stabilne. Poniższy panel śledzi kroczącą roczną średnią dzienną stopę zwrotu, zannualizowaną i próbkowaną miesięcznie, dla szerokiego funduszu indeksowego oraz dużej spółki z sektora dóbr podstawowych.
Dokładny kod SQL dla każdej liczby
WITH prices AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'KO')
AND date >= '2015-10-01'
AND date < '2025-01-01'
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
date,
c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
trailing AS
(
SELECT
ticker,
date,
avg(ret) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) * 252 * 100 AS trailing_mean_pct,
row_number() OVER (PARTITION BY ticker ORDER BY date ASC) AS i
FROM rets
WHERE isFinite(ret)
)
SELECT
toString(toStartOfMonth(date)) AS month,
round(avgIf(trailing_mean_pct, ticker = 'SPY'), 1) AS spy_trailing_mean_pct,
round(avgIf(trailing_mean_pct, ticker = 'KO'), 1) AS ko_trailing_mean_pct
FROM trailing
WHERE i >= 252
AND date >= '2017-01-01'
GROUP BY month
ORDER BY month ASCKażdy punkt na tych dwóch liniach to liczba, którą optymalizator zaakceptowałby jako oczekiwaną stopę zwrotu w danym dniu. Pierwszy miesięczny odczyt dla SPY wynosi 17.7%, a ostatni 25.8%, przy czym pomiędzy nimi znajduje się 96 odczytów. KO otwiera to samo okno wartością -0.4%. Schemat ważenia, który przetwarza tę serię miesiąc po miesiącu, przejmuje każde jej wahanie.
Czy strategia Half Kelly i metoda shrinkage rozwiązują ten problem?
Łagodzą go. W praktyce stosuje się cztery rozwiązania, z których każde poświęca część teoretycznego optimum w zamian za mniejszą wrażliwość na błąd estymacji.
- Strategia Half Kelly zmniejsza każdą wagę o połowę. Krzywa wzrostu Kelly jest płaska w pobliżu szczytu i stroma poniżej niego, więc połowa stawki oznacza rezygnację z niewielkiej części teoretycznej stopy wzrostu przy znacznie większym ograniczeniu strat wynikających z przeszacowania przewagi rynkowej. Volatility targeting wykorzystuje ten sam instynkt w odniesieniu do mianownika, określając wielkość pozycji na podstawie jednego parametru, który krótka próba statystyczna jest w stanie dostarczyć.
- Metoda shrinkage przyciąga każdą estymowaną średnią w stronę średniej przekrojowej wszystkich estymacji, w stopniu rosnącym wraz ze zmniejszaniem się próby. W skrajnym przypadku każde aktywo otrzymuje taką samą oczekiwaną stopę zwrotu; przy założeniu równej zmienności optymalizator samoczynnie przypisuje równe wagi. Portfel o równych wagach jest portfelem w pełni poddanym procesowi shrinkage.
- Ograniczenia, takie jak zakaz krótkiej sprzedaży oraz limity dla poszczególnych pozycji, wyznaczają granice tego, jak bardzo jedna trafna estymacja może wpłynąć na pojedynczą wagę. Jest to raczej kontrola szkód niż poprawa jakości samej estymacji.
- Całkowita rezygnacja z oczekiwanych stóp zwrotu prowadzi do strategii minimum variance oraz risk parity, które wykorzystują wyłącznie macierz kowariancji. Jest to jedyny parametr, który próba statystyczna może faktycznie dostarczyć.
Żadne z tych czterech rozwiązań nie tworzy informacji, której nie zawiera próba statystyczna. Zmieniają one jedynie to, w jakim stopniu portfel opiera się na informacjach, których inwestor może nie posiadać.
Kiedy optymalizacja przynosi zyski
Przejście następuje w obu kierunkach. Gdy T staje się duże w stosunku do spreadu między prawdziwymi średnimi, zoptymalizowana alokacja zyskuje przewagę i ją utrzymuje, a im szerszy jest ten spread, tym szybciej to następuje. Optymalizacja jest również właściwym narzędziem zawsze wtedy, gdy dane wejściowe pochodzą z rynku: kowariancja i wskaźniki zabezpieczenia (hedge ratios) szacują się znacznie lepiej niż oczekiwane stopy zwrotu.
Równe ważenie (equal weight) wiąże się z własnymi kosztami. Ignoruje ono informacje, którymi faktycznie dysponujemy, a w małym uniwersum koncentruje portfel równie silnie, jak zrobiłby to każdy optymalizator. Należy traktować je jako punkt odniesienia, który każda kandydacka metoda ważenia musi pokonać na danych, których wagi wcześniej nie widziały. Dopasowywanie wag i ocenianie ich na tej samej próbie to błąd wyprzedzenia w backtestingu w innym wydaniu, który zawsze faworyzuje optymalizator. Aby uzyskać rzetelny przedział wokół zmierzonej przewagi zamiast pojedynczej estymacji punktowej, standardowym narzędziem są przedziały ufności wyznaczone metodą bootstrap.
FAQ
Czy strategia równej wagi rzeczywiście przewyższa optymalizację średniej wariancji?
W krótkich próbach często tak. Optymalizator wymaga oszacowania oczekiwanej stopy zwrotu każdego aktywa, a szacunek ten obarczony jest błędem standardowym wynoszącym w przybliżeniu zmienność aktywa podzieloną przez pierwiastek kwadratowy długości próby w latach. Dopóki błąd ten pozostaje większy niż rzeczywiste różnice między aktywami, optymalizator porządkuje jedynie szum. Strategia równej wagi nie opiera się na żadnym oszacowaniu, które mogłoby okazać się błędne.
Ile obserwacji potrzeba do oszacowania oczekiwanej stopy zwrotu?
Więcej, niż posiada niemal ktokolwiek. Dla aktywa o zmienności dwudziestu procent, jeden rok danych dziennych pozostawia błąd standardowy na poziomie bliskim dwudziestu punktów procentowych rocznie, a zmniejszenie tego błędu o połowę wymaga czterokrotnie dłuższego okresu kalendarzowego. Dodawanie obserwacji wewnątrz dnia w tym samym roku nie przynosi korzyści. Zmienność natomiast można oszacować na podstawie danych z zaledwie kilku miesięcy.
Czy połowa kryterium Kelly’ego to po prostu mniejszy zakład?
To mniejszy zakład na korzystnych warunkach. Krzywa wzrostu Kelly’ego jest płaska w pobliżu szczytu, więc zmniejszenie stawki o połowę oznacza rezygnację z niewielkiej części teoretycznej stopy wzrostu przy jednoczesnym zmniejszeniu zmienności ścieżki o około połowę i obniżeniu kosztu przeszacowanej przewagi.
Czym jest portfel 1/N?
To portfel, w którym równa część kapitału jest lokowana w każdą z N pozycji i który jest rebalansowany zgodnie z harmonogramem. Nie wymaga on prognoz stóp zwrotu ani szacunków kowariancji, co czyni go standardowym punktem odniesienia dla każdego schematu ważenia, który takich danych wymaga.
Jak tworzone są panele
Wszystkie trzy panele odczytują dzienne ceny zamknięcia i obliczają proste stopy zwrotu między sesjami, przy czym zduplikowane wiersze są redukowane do jednej ceny zamknięcia na ticker na dzień. Średnie są annualizowane poprzez pomnożenie średniej dziennej stopy zwrotu przez dwieście pięćdziesiąt dwie sesje; zmienności są annualizowane poprzez pomnożenie dziennego odchylenia standardowego przez pierwiastek kwadratowy z dwustu pięćdziesięciu dwóch. Panel roczny uwzględnia rok kalendarzowy tylko wtedy, gdy dostępnych jest co najmniej dwieście sesji. Panel blokowy wykorzystuje niepokrywające się bloki i odrzuca końcowy niepełny blok dla każdej długości, a kolumna liczby okien pokazuje, ile bloków wygenerowała każda długość. Dywidendy nie są nigdzie uwzględnione, zatem są to stopy zwrotu z ceny, a poziom każdej średniej jest zaniżony w przypadku spółek wypłacających dywidendy. Celem paneli jest ukazanie rozpiętości szacunków, a nie ich poziomu.
Każdy panel zawiera dokładne zapytanie SQL pod wykresem, a symulacja posiada swój numer startowy (seed). Aby przeprowadzić taką samą kontrolę stabilności szacunków dla własnej listy nazw, należy poprosić o to w języku angielskim na terminalu Strasmore.