Autocorrelation of Returns
10 min czytania
Detect non-random patterns in your trade sequence — do wins cluster, or alternate with losses?
10 min czytania
Detect non-random patterns in your trade sequence — do wins cluster, or alternate with losses?
Autocorrelation mierzy, czy wyniki Twoich transakcji są statystycznie powiązane z poprzednimi wynikami. Mówiąc prościej: czy wygrane mają tendencję do grupowania się? Czy straty następują po stratach? A może wyniki są naprawdę niezależne?
Ta lekcja dotyczy autocorrelation sekwencji zwrotów z transakcji (R-multiple z transakcji 1, 2, 3, …), a nie zwrotów z ceny instrumentu bazowego. Są one powiązane, ale różne: zwroty z aktywów mają zwykle AC bliskie zera w ujęciu dziennym, lekko dodatnie w ujęciu intraday (momentum) i lekko ujemne w ujęciu tygodniowym (powrót do średniej). AC sekwencji transakcji mówi Ci o zachowaniu Twojej strategii w różnych reżimach, a nie o samym rynku.
Krótki słowniczek — Lag k: o ile transakcji wstecz porównujesz. Serial correlation: to samo co autocorrelation. ACF: funkcja autokorelacji wykreślona w zależności od lagu. Block bootstrap: ponowne próbkowanie ciągłych fragmentów w celu zachowania struktury szeregowej.
Autocorrelation (serial correlation) przy lagu k to ρ(k) = Cov(rₜ, rₜ₋ₖ) / Var(rₜ), ograniczone do przedziału [-1, +1]. Dla lagu 1 na sekwencji zwrotów z transakcji:
AC(1) = Σᵢ₌₂..ₙ[(Rᵢ - R̄)(Rᵢ₋₁ - R̄)] / Σᵢ₌₁..ₙ[(Rᵢ - R̄)²]
Dla formalnego testu istotności użyj statystyki Q Ljunga–Boxa (lub Boxa–Pierce'a, Durbina–Watsona dla lagu 1) — zasada ±1,96/√N poniżej to tylko szybki test sanity check białego szumu.
Gdzie:
Daje to wartość z przedziału od -1 do +1.
| Wartość AC(1) | Wzorzec | Implikacja |
|---|---|---|
| +0,3 do +1,0 | Silna dodatnia | Wygrane po wygranych, straty po stratach (serie) |
| +0,1 do +0,3 | Umiarkowana dodatnia | Lekka tendencja do grupowania |
| -0,1 do +0,1 | Bliska zera | Wyniki są w przybliżeniu niezależne |
| -0,3 do -0,1 | Umiarkowana ujemna | Wzorzec naprzemienny (wygrana-strata-wygrana-strata) |
| -1,0 do -0,3 | Silna ujemna | Silna naprzemienność |
Jeśli Twoje zwroty per transakcja mają AC(1) ≈ 0, każda transakcja jest praktycznie niezależna od poprzedniej. Uwaga: nie licz AC na skumulowanej krzywej kapitału — suma skumulowana jest z definicji zawsze silnie autocorrelated i nie mówi Ci nic o niezależności transakcji. Zawsze licz AC na przyrostowych R-multiple lub P&L per transakcja. To założenie leży u podstaw większości modeli wielkości pozycji — kryterium Kelly'ego, stałej frakcji — oraz fundamentalnych wzorów na wariancję i ryzyko ruiny w tym kursie.
Jeśli AC(1) jest znacząco dodatnia (powiedzmy > +0,2), Twoja strategia wykazuje momentum w zwrotach — serie wygranych i serie strat są dłuższe, niż przewidywałby przypadek. Może to wynikać z tego, że:
Jeśli AC(1) jest znacząco ujemna (powiedzmy < -0,2), Twoje zwroty mają tendencję do naprzemienności. Może to oznaczać, że:
Najczęstszy błąd, którego należy unikać: nigdy nie licz AC na skumulowanej krzywej kapitału. Suma skumulowana jest niemal zawsze niemal idealnie autocorrelated, niezależnie od tego, czy bazowe transakcje są IID. AC musi być liczona na przyrostach per transakcja (R-multiple, P&L lub log-zwroty kapitału), a nie na poziomach kapitału.
Jeśli zwroty są dodatnio autocorrelated, możesz zwiększać wielkość podczas serii wygranych i zmniejszać podczas serii strat — podejście oparte na momentum. Jeśli zwroty są ujemnie autocorrelated, może zadziałać podejście odwrotne.
Ale jeśli autocorrelation zwrotów jest bliska zera, każda korekta wielkości oparta na seriach to tylko dopasowywanie do szumu.
Standardowe wzory na ryzyko ruiny zakładają niezależne transakcje (AC ≈ 0). Przy AC = 0,2–0,3 w sekwencji transakcji symulowane drawdown na 99. percentylu mogą być 1,5–2x głębsze niż przewiduje IID przy tej samej średniej i zmienności. Serie strat są dłuższe niż losowe, ponieważ sąsiednie straty dzielą ten sam reżim.
Jeśli uruchamiasz symulacje Monte Carlo poprzez losowe tasowanie wyników transakcji, niszczysz jakąkolwiek strukturę autocorrelation. Jeśli oryginalne zwroty miały znaczącą autocorrelation, wyniki Monte Carlo niedoszacują ryzyka ogonowego.
Aby to naprawić, zastosuj block bootstrapping — próbkowanie ciągłych bloków transakcji zamiast pojedynczych — aby zachować strukturę serial correlation. Wybierz długość bloku L ≈ N^(1/3) (czyli ~5 dla N=125, ~10 dla N=1000) lub ustaw L jako najmniejszy lag, przy którym ACF spada do pasma ±1,96/√N. Stationary bootstrap (Politis i Romano, 1994) to bardziej odporna alternatywa; zob. López de Prado, Advances in Financial Machine Learning, rozdz. 4, dla praktyki block-bootstrap w finansach.
AC bliska zera oznacza, że Twój edge nie zależy od utrzymywania się reżimu — Twoje wzory na ryzyko ruiny są ważne w pierwotnej formie. Dodatnia AC nie jest automatycznie zła: strategia momentum z definicji wytwarza dodatnio autocorrelated wyniki transakcji. Niebezpieczeństwo pojawia się, gdy AC jest wysoka i niezamierzona — to zwykle oznacza, że Twój edge zależy od utrzymywania się jednego reżimu rynkowego, co pogrubia rozkłady DD ponad to, co przewiduje model IID. Wrażliwość na reżim to głębsza diagnostyka, gdy AC jest wysoka.
Autocorrelation dla lagu 1 jest najczęstsza, ale sprawdzanie wyższych lagów może ujawnić głębsze wzorce:
Wykreśl funkcję autokorelacji (ACF) dla lagów od 1 do 20. Jeśli wszystkie wartości mieszczą się w 95% przedziale ufności (w przybliżeniu ±2/√N), nie ma znaczącej serial correlation przy żadnym lagu.
Przykład: 200 R-multiple z transakcji, średnia R = 0,18, odch. std. = 1,2. Oblicz AC(1) w Pythonie:
import numpy as np
from statsmodels.tsa.stattools import acf
from statsmodels.stats.diagnostic import acorr_ljungbox
r = np.array([...]) # 200 trade R-multiples
print(acf(r, nlags=20, fft=False))
print(acorr_ljungbox(r, lags=[5, 10, 20]))
Jeśli AC(1) = 0,31 przy N=200, pasmo 95% to ±0,139 — wynik wyraźnie istotny. Następnie:
Często autocorrelation w wynikach transakcji nie jest zjawiskiem rynkowym — jest zjawiskiem tradera. Pewność siebie po wygranych prowadzi do nadmiernego handlu (wydłużania serii wygranych). Strach po stratach prowadzi do wahania (wydłużania serii strat).
Jeśli znajdziesz znaczącą autocorrelation, pierwsze pytanie powinno brzmieć: "Czy to rynek, czy to ja?"
Symulator Monte Carlo poniżej losowo tasuje kolejność transakcji. Jeśli Twoje rzeczywiste zwroty wykazują znaczącą autocorrelation, losowe tasowanie niedoszacuje ryzyka ogonowego — niektóre ścieżki poniżej mogą wyglądać bezpieczniej niż Twoje rzeczywiste doświadczenie.
Nie. Krzywa kapitału jest sumą skumulowaną i z definicji zawsze będzie silnie autocorrelated, niezależnie od tego, czy bazowe transakcje są niezależne. Zawsze licz AC na R-multiple per transakcja, P&L per transakcja lub log-zwrotach kapitału — nigdy na poziomach kapitału.
Co najmniej 100 transakcji, by sensowne było pasmo białego szumu ±1,96/√N (które daje ±0,196 przy N=100). Dla testu Ljunga–Boxa na wielu lagach potrzebujesz 200+ transakcji. Poniżej 100 transakcji każdy odczyt AC powinien być traktowany jako szum.
Tak — jeśli używałeś standardowego wzoru IID. Przy AC = 0,2–0,3 w sekwencji transakcji symulowane drawdown na 99. percentylu mogą być z grubsza 1,5–2x głębsze niż przewiduje IID przy tej samej średniej i zmienności, ponieważ serie strat są dłuższe niż losowe.
AC sekwencji transakcji mierzy zależność w wynikach Twojej strategii (R-multiple z transakcji 1, 2, 3, …). AC zwrotów z aktywa mierzy zależność w zwrotach z bazowej ceny. Zwroty z aktywów mają zwykle AC bliskie zera w ujęciu dziennym, lekko dodatnie w ujęciu intraday i lekko ujemne w ujęciu tygodniowym. AC sekwencji transakcji mówi Ci o zachowaniu Twojej strategii w różnych reżimach, a nie o rynku.
Autocorrelation to metryka diagnostyczna, a nie metryka wyników. Nie mówi nic o tym, ile zarobiłeś — tylko o strukturze Twoich wyników. Ale ta struktura ma głębokie implikacje dla zarządzania ryzykiem, wielkości pozycji i ważności Twojej metodologii backtestu. Zignoruj ją, a Twoje modele ryzyka mogą cicho Cię okłamywać.
Następnie: Equity R-Squared — autocorrelation mówi Ci o zależności na poziomie transakcji; equity R² mówi Ci, czy wynikowa ścieżka jest gładka czy poszarpana. Razem charakteryzują strukturę Twoich zwrotów.