ETH: naruszenie ruchu implikowanego klasyfikowane na podstawie reakcji rynku opcji. Kontynuuj ruch >= 2-sigma, normalizowany przez DVOL, o długości 24h, gdy Deribit ETH DVOL przeszacowuje w górę; graj przeciw ruchowi, gdy DVOL pozostaje bez zmian lub spada (ETHUSDT.BYBIT 4H, long/short, stały czas wyjścia 48h + stop wewnątrzświecowy)
Wynik: Porzucona
EthDvolReactionShockClassifier
Podsumowanie wyniku
EthDvolReactionShockClassifier sprawdzał, czy reakcja rynku opcji (zmiana Deribit ETH DVOL) pozwala odróżnić rzeczywiste szoki ETH, za którymi warto podążać, od szoków wynikających z przepływu zleceń, którym warto się przeciwstawić. Wdrożono go zgodnie z opisaną hipotezą; wygenerował 117 sygnałów w ciągu około 5.5 lat, blisko prognozowanej liczby, ale przyniósł stratę 7.52%, Sharpe’a -0.28 i średni zwrot z transakcji -0.555%. Straty wystąpiły w każdym reżimie zmienności i przed uwzględnieniem kosztów, a wykonany sygnał nie zawierał mierzalnej informacji (IC -0.002). Dlatego po jednym podejściu analityk porzucił go podczas przeglądu backtestu, przed optymalizacją; werdykt dotyczy tylko tej wersji pomysłu, a nie ogólnego filtrowania reżimów opartego na DVOL.
Jednoinstrumentowa strategia long/short reagująca na zdarzenia na ETHUSDT.BYBIT (liniowy kontrakt perpetual USDT na Bybit, USDT, świece 4-HOUR, historia od 2021-03). Jedynym wejściem poza świecami cenowymi jest indeks zmienności implikowanej Deribit ETH DVOL (dodatkowy klucz deribit_dvol, dane godzinowe od 2021-03). Pomysł: duży ruch 24h ETH mierzy się względem tego, co wcześniej wycenił rynek opcji, a nie względem kroczącej zmienności zrealizowanej. Sigma DVOL-implikowana dla 1 dni to DVOL_24h_ago / 100 /……Pokaż więcejPokaż mniej
Jednoinstrumentowa strategia long/short reagująca na zdarzenia na ETHUSDT.BYBIT (liniowy kontrakt perpetual USDT na Bybit, USDT, świece 4-HOUR, historia od 2021-03). Jedynym wejściem poza świecami cenowymi jest indeks zmienności implikowanej Deribit ETH DVOL (dodatkowy klucz deribit_dvol, dane godzinowe od 2021-03). Pomysł: duży ruch 24h ETH mierzy się względem tego, co wcześniej wycenił rynek opcji, a nie względem kroczącej zmienności zrealizowanej. Sigma DVOL-implikowana dla 1 dni to DVOL_24h_ago / 100 / sqrt(365). Gdy ruch przekracza ten implikowany zakres (|z| >= k), reakcja rynku opcji w tym samym okresie 24h mówi, jak go interpretować. (a) DVOL rośnie: nabywcy opcji płacą więcej, dealerzy mają krótką gammę, a ruch jest traktowany jako nowa informacja, więc zabezpieczanie krótkiej gammy zwykle podąża za nim -> handluj zgodnie z ruchem WITH. (b) DVOL pozostaje bez zmian lub spada: sprzedający zmienność absorbują ruch, dealerzy mają długą gammę i działają przeciw niemu, więc wygląda on na efekt przepływu zleceń lub szum -> handluj przeciwnie do niego AGAINST. Ruchy pośrednie są pomijane. Fabryka strategii wcześniej tego nie robiła. Wcześniejsze prace DVOL wykorzystywały poziom DVOL minus zmienność zrealizowaną jako powolny filtr reżimu, a wcześniejsze projekty podążania za szokiem (L214) klasyfikowały szoki na podstawie wolumenu spot, a nie opcji. Częstotliwość sygnałów to liczba zdarzeń, a nie analiza wyników. Przy k=2.0 i klastrowaniu z odstępem 48h od 2021-03 występuje około 166 zdarzeń (około 30 rocznie). Około 46% ma wzrost DVOL o co najmniej 3 punktów zmienności, a około 26% ma DVOL równe zero lub mniejsze. Daje to około 115 zdarzeń nadających się do handlu (około 20 rocznie). Średni bezwzględny ruch 48h po zdarzeniu wynosi około 4.4%. Przechwycenie 15-20% tego ruchu daje 0.65-0.9% na transakcję, wobec około 0.11% prowizji taker za transakcję w obie strony na Bybit oraz około 0.05% poślizgu cenowego i finansowania. Kontrole dopasowane do porównania przy stałych ustawieniach: classification_mode = always_continue oraz always_fade. Hipoteza przewiduje, że dvol_conditioned osiągnie lepszy wynik niż obie kontrole. Wykonanie: Bybit handluje 24/7, więc zlecenie rynkowe składane jest przy zamknięciu świecy sygnałowej, co platforma traktuje jako realizację przy otwarciu kolejnej świecy (use_equivalent, wskazano to tutaj). Stop to zgodny z platformą, wewnątrzświecowy stop_market typu reduce-only, a nie zlecenie spoczywające na giełdzie. Ścieżka kontroli ryzyka (a): strata przy stopie wynosi najwyżej 1% kapitału własnego.
no_edge: negative_expectancy. Porównanie z progiem opłat: avg_trade_return_pct wynosi -0.555% wobec progu +0.15% BYBIT, na wiarygodnej próbie 117 zamkniętych transakcji w ciągu 2,033 dni. PF wynosi 0.835, Sharpe’a -0.28, a całkowity zwrot -7.52%. Zysk i strata brutto przed prowizją, wpływem na cenę i finansowaniem również są ujemne (około -0.2% na nominał), więc problemem nie są opłaty. IC wykonanego sygnału wynosi -0.002 (t = -0.06), zatem pięć parametrów (z_entry, hold_bars, shock_bars, dvol_up_pts,……Pokaż więcejPokaż mniej
no_edge: negative_expectancy. Porównanie z progiem opłat: avg_trade_return_pct wynosi -0.555% wobec progu +0.15% BYBIT, na wiarygodnej próbie 117 zamkniętych transakcji w ciągu 2,033 dni. PF wynosi 0.835, Sharpe’a -0.28, a całkowity zwrot -7.52%. Zysk i strata brutto przed prowizją, wpływem na cenę i finansowaniem również są ujemne (około -0.2% na nominał), więc problemem nie są opłaty. IC wykonanego sygnału wynosi -0.002 (t = -0.06), zatem pięć parametrów (z_entry, hold_bars, shock_bars, dvol_up_pts, dvol_flat_pts) nie dostarcza informacji, która wskazywałaby kierunek optymalizacji. Strategia przynosi straty w spokojnych, normalnych i stresowych reżimach. Obawy QA potwierdzają się w całej historii. QA zgłosił też możliwość look-ahead o 1h DVOL; mogłoby to jedynie poprawić wyniki tego wariantu, więc nie zmienia werdyktu. Kontrole always_continue i always_fade nie zostały uruchomione osobno. Ponieważ samo ramię warunkowe nie wykazuje informacji brutto, kontrole nie mogą uratować mechanizmu. Zakres: odrzucamy operacjonalizację pomysłu przez Research Lead (zmiana DVOL 24h z Deribit ETH, klasyfikująca naruszenia ruchu implikowanego o wartości >= 2-sigma na ETHUSDT.BYBIT 4H, z wyjściem po 48h). Nie odrzuca to ogólnie filtrowania reżimów opartego na DVOL. Nie stwierdzamy błędu w rozliczeniach ani danych.
Implementacja
Strategia zdarzeniowa ETHUSDT.BYBIT 4H long/short. Na każdej świecy: z = ln(close/close[shock_bars temu]) / (DVOL[początek szoku]/100*sqrt(okno/365d)), czyli ruch mierzony względem sigmy implikowanej przez Deribit ETH DVOL, wycenionej przed ruchem (24h przy shock_bars=6). Przekroczenie |z|>=z_entry poza oknem klastrowania 12 świec (48h) stanowi zdarzenie. Klasyfikacja zdarzenia na podstawie zmiany DVOL w tym samym oknie: >= dvol_up_pts punktów zmienności -> handluj zgodnie z ruchem WITH; <= dvol_flat_pts -> graj……Pokaż więcejPokaż mniej
Strategia zdarzeniowa ETHUSDT.BYBIT 4H long/short. Na każdej świecy: z = ln(close/close[shock_bars temu]) / (DVOL[początek szoku]/100*sqrt(okno/365d)), czyli ruch mierzony względem sigmy implikowanej przez Deribit ETH DVOL, wycenionej przed ruchem (24h przy shock_bars=6). Przekroczenie |z|>=z_entry poza oknem klastrowania 12 świec (48h) stanowi zdarzenie. Klasyfikacja zdarzenia na podstawie zmiany DVOL w tym samym oknie: >= dvol_up_pts punktów zmienności -> handluj zgodnie z ruchem WITH; <= dvol_flat_pts -> graj przeciw niemu FADE; wartości pośrednie -> pomiń. Kontrole przez classification_mode = always_continue / always_fade. Wejście to zlecenie rynkowe przy zamknięciu świecy sygnałowej (24/7 rynek: odpowiednik realizacji przy otwarciu kolejnej świecy na platformie). Wyjście: stały czas po hold_bars (12 świece = 48h), a także wewnątrzświecowy stop_market typu reduce-only złożony przy realizacji, w odległości stop_sigma x sigma implikowana okna szoku od ceny realizacji. Wielkość = 1% kapitału własnego narażonego na ryzyko / odległość do stopu, z limitem max_notional_frac x kapitał własny x dźwignia (bufor depozytu x0.95). Obserwacje DVOL starsze niż dvol_max_staleness_hours lub brakujące oznaczają brak zdarzenia (pozycja płaska; bez awaryjnego użycia samych cen).
Bezpośrednia implementacja hipotezy: reakcja rynku opcji (przeszacowanie DVOL) klasyfikuje przekroczenie ruchu implikowanego jako informację (kontynuacja, dealerzy z krótką gammą) albo przepływ zleceń (zagranie przeciwne, dealerzy z długą gammą). Implikowana sigma korzysta z DVOL według stanu na początek okna szoku, pobranego przez wyszukiwanie punktowe w czasie (_supp_arrays + bisect, z kontrolą nieaktualności); świece DVOL są oznaczane przez loader jako dostępne. Sygnał zwracany na każdym barze to surowe……Pokaż więcejPokaż mniej
Bezpośrednia implementacja hipotezy: reakcja rynku opcji (przeszacowanie DVOL) klasyfikuje przekroczenie ruchu implikowanego jako informację (kontynuacja, dealerzy z krótką gammą) albo przepływ zleceń (zagranie przeciwne, dealerzy z długą gammą). Implikowana sigma korzysta z DVOL według stanu na początek okna szoku, pobranego przez wyszukiwanie punktowe w czasie (_supp_arrays + bisect, z kontrolą nieaktualności); świece DVOL są oznaczane przez loader jako dostępne. Sygnał zwracany na każdym barze to surowe z-score znormalizowane przez DVOL; kierunek zdarzenia jest obliczany jako atrybut skalarny i progowany w should_enter. Cała logika czasu (rozdzielanie klastrów, utrzymanie przez 48h) opiera się na znacznikach czasu barów, a nie licznikach czasu działania; cały stan pozycji jest skalarny. Ścieżka ryzyka (a): stop loss <= 1% kapitału; przy typowym DVOL ~70 sigma dla 24h wynosi ~3.7%, stop ~5.5%, a pozycja ~18% kapitału. Zmiany w realizacji zleceń: next_bar_open_fill -> zlecenie rynkowe po cenie zamknięcia bara sygnałowego (use_equivalent); exchange_resting_stop -> zgodny z platformą _submit_stop_market wyłącznie redukujący pozycję (use_equivalent). Implikowana sigma jest skalowana przez sqrt(okna szoku), aby shock_bars 3/6/12 były porównywalne (6 = 24h z hipotezy).
Wyniki weryfikacji
Uniezależnij odczyt od flagi: pobierz dvol_now z ts - 1h oraz dvol_then z past_ts - 1h (o jedną świecę DVOL wcześniej) albo sprawdź znaczniki czasu nadawane przez loader. Możesz też poprosić analityka o potwierdzenie pełnego backtestu z SF_SUPP_AVAILABILITY_STAMPS=1.
_dvol_at() używa bisect_right(ts_list, ts) - 1. To ten sam jednostronny odczyt co w supp_as_of(), więc sam kod nie zawiera look-ahead w stylu abs(). Jednak load_deribit_dvol przypisuje godzinowym świecom DVOL znaczniki czasu ich START, chyba że włączono SF_SUPP_AVAILABILITY_STAMPS; domyślnie ta flaga jest OFF w pliku lookahead_guards.py. Nie znalazłem jej w konfiguracji ani systemd. Przy zamknięciu świecy 4H w chwili T, dvol_now oznacza więc zamknięcie świecy ze znacznikiem T, którego wartość jest znana dopiero w T+1h. Klasyfikator (dvol_now - dvol_then) wykorzystuje zatem do godziny przeszacowania zmienności implikowanej po decyzji. Uzasadnienie konfiguracji mówi, że „świece DVOL otrzymują od loadera znaczniki czasu dostępności”, co jest prawdą tylko przy włączonej fladze. To domyślna konwencja platformy wspólna dla każdej strategii DVOL i dla supp_as_of(), a nie błąd w tym odczycie kodu, więc nie blokuje dalszych działań.
Nie są wymagane żadne zmiany. Jeśli chcesz, zapisuj w diagnostyce pominięte zdarzenia podczas otwartej pozycji, aby porównanie kontroli uwzględniało taką samą liczbę zdarzeń.
should_enter() jest wywoływana tylko wtedy, gdy strategia nie ma otwartej pozycji. Zdarzenie wykryte na świecy, na której upływa czas wyjścia 48h (lub gdy pozycja jest nadal otwarta), zostaje pominięte, ale resetuje last_event_ts i rozpoczyna nowy okres chłodzenia. Przy domyślnych równych wartościach cooldown_bars=12=hold_bars=12 zdarza się to rzadko. Gdy optymalizator wybierze hold_bars > 12, część zdarzeń po klastrowaniu nie będzie przedmiotem transakcji. Jest to akceptowalna semantyka badania zdarzeń (jedna pozycja naraz), ale liczba transakcji będzie niższa niż surowa liczba zdarzeń.
Wyłącznie informacyjnie.
Stan pozycji (held_direction, entry_ts, stop_level) jest przechowywany w pamięci. Po ponownym uruchomieniu paper trading z otwartą pozycją funkcja should_exit() zwraca True i zamyka ją. To bezpieczne, a backtest nigdy nie jest uruchamiany ponownie.
Test kontrolny w sandboxie (bez optymalizacji, 117 zamkniętych transakcji w ciągu ~2033 dni): avg_trade_return_pct -0.54% wobec progu ~0.15%, PF 0.84, Sharpe’a -0.27. Strategia traci we wszystkich trzech reżimach zmienności. 82 z 117 transakcji to krótkie pozycje, ze skutecznością krótkich pozycji 39% wobec 57% dla długich. Zaangażowanie wynosi około 18% kapitału własnego na transakcję, zgodnie ze ścieżką ryzyka 1%. Według L211 wielkość pozycji jest zgodna z założeniami: 117 x -0.54% x ~0.18 daje około -11%, blisko raportowanego -7.2%. Przy pełnym backteście najpierw uruchom wstępnie zarejestrowane kontrole (always_continue, always_fade) przy tych samych ustawieniach i podziel zysk i stratę według zdarzeń klasy kontynuacji i gry przeciw ruchowi. Sprawdź też ponownie wynik przy SF_SUPP_AVAILABILITY_STAMPS=1 albo odczycie DVOL o jedną świecę wcześniej (zob. ostrzeżenie 1). Przy obecnych ustawieniach domyślnych klasyfikator zmiany DVOL może uwzględniać do 1h DVOL po zamknięciu świecy decyzyjnej, co może jedynie poprawić wyniki ramienia dvol_conditioned.
Przegląd backtestu
Sharpe
-0,28
Łączna stopa zwrotu
-7,52%
Maksymalne obsunięcie
14,78%
Łączna liczba transakcji
117
Trafność
45,3%
Współczynnik zysku
0,84
Implementacja odpowiada hipotezie. Szoki są normalizowane przez DVOL, ramiona to kontynuacja (wzrost DVOL) i gra przeciw ruchowi (DVOL bez zmian lub w dół), wyjście następuje po stałym czasie ze stopem reduce-only wewnątrz świecy, a klastrowanie obejmuje 12 świec.
Wielkość pozycji działa zgodnie z założeniami: około 18% kapitału własnego na pozycję przy ścieżce ryzyka 1%, maksymalna dźwignia 0.40, brak likwidacji, a rozliczenia są zgodne.
Próba jest wiarygodna: 117 zamkniętych transakcji w ciągu 2,033 dni, blisko około 115 zdarzeń prognozowanych przez hipotezę.
Porównanie z progiem opłat: avg_trade_return_pct wynosi -0.555% wobec progu +0.15% BYBIT. PF wynosi 0.835, Sharpe’a -0.28 (95% CI -1.25 do 0.53), a całkowity zwrot -7.52%.
Strategia jest stratna przed kosztami. Prowizja ($2.26k), wpływ na cenę ($0.62k) i funding ($0.33k) łącznie wynoszą około $3.2k, przy stracie netto $7.5k i nominalnej wartości pozycji wynoszącej około $2.05M. Oznacza to wynik brutto na poziomie około -0.2% w przeliczeniu na nominał, więc opłaty nie są przyczyną straty.
IC wykonanego sygnału wynosi -0.002 (t = -0.06) przy 1,016 obserwacjach: brak informacji. Werdykt: rejected_no_information.
Strategia traci we wszystkich trzech reżimach zmienności: spokojnym -0.63%, normalnym -2.31% i stresowym -4.53%. Cztery z sześciu lat przyniosły straty, a drawdown trwał około 1,546 dni.
Krótkie transakcje (82 z 117) przynoszą zysk tylko w 40% przypadków. tail_ratio wynosi 0.31.
Obawa QA dotycząca look-ahead (odczyt DVOL możliwy do 1h po zamknięciu świecy) mogłaby jedynie poprawić wyniki ramienia dvol_conditioned. Jej usunięcie nie zmieni tego wyniku na dodatni.
Podsumowanie wyniku
W tej konfiguracji zmiana 24h w DVOL nie wskazywała, czy kontynuować, czy grać przeciw przekroczeniu ruchu implikowanego o 2-sigma na ETH 4H, nawet przed uwzględnieniem kosztów. Zanim zbudujesz pełną strategię opartą na klasyfikatorze reakcji rynku opcji, sprawdź jego informację brutto IC wraz z kontrolami always_continue i always_fade.
Podczas przeglądu backtestu analityk zdecydował o porzuceniu strategii z powodu braku przewagi (ujemnej wartości oczekiwanej). Zysk i strata brutto przed prowizją, wpływem na cenę i finansowaniem również były ujemne (około -0.2% na nominał), zatem przyczyną nie były opłaty. Ponieważ IC było zasadniczo równe zeru, parametry nie dostarczały informacji do optymalizacji. Do optymalizacji ani dalszych etapów nigdy nie doszło.
Na świecach ETHUSDT.BYBIT 4H każdy ruch 24h ETH skalowano przez sigmę implikowaną z Deribit ETH DVOL. Strategia reagowała na przekroczenia co najmniej 2 sigmy: handlowała zgodnie z ruchem, gdy DVOL wzrósł o co najmniej 3 punktów, a przeciwnie do niego, gdy DVOL pozostał bez zmian lub spadł. Pozycja była utrzymywana przez stały czas 48h, ze stopem wewnątrzświecowym narażającym 1% kapitału własnego na ryzyko.
Początkowy backtest obejmował 2,033 dni i 117 zamkniętych transakcji. Całkowity zwrot wyniósł -7.52%, Sharpe’a -0.28 (95% CI -1.25 do 0.53), współczynnik zysku 0.835, a avg_trade_return_pct -0.555%, wobec progu +0.15% na Bybit. Sygnał IC wyniósł -0.002 (t = -0.06), a strategia traciła w spokojnych, normalnych i stresowych reżimach zmienności.
Stratmill to narzędzie do badań i handlu na papierze (paper trading), a nie doradztwo finansowe ani broker. Wyniki backtestów i paper tradingu mają charakter hipotetyczny. Handel wiąże się z ryzykiem straty.