Strategie
Powrót do średniej na paśmie zmienności w reżimie bocznym, long-short (pojedynczy instrument: ETHUSDT Binance USD-M, słupki 1H, zagranie przeciwko skrajnym odchyleniom ONLY, gdy filtr trendu potwierdza brak trendu — udokumentowana poprawka na problem porażki strategii odwrócenia na głównych instrumentach w trendzie, niewiele parametrów)
Wynik: Porzucona
EthRangingRegimeVolBandMeanReversionLS1H
Podsumowanie wyniku
Hipoteza
Poprawka z iteracji 3 dotycząca przekroczenia limitu czasu zegarowego warstwy -3: poprzednia wersja odtwarzała tablice numpy z ENTIRE rosnącej historii słupków i wykonywała ADX pętle Pythona po całości na każdym słupku, co dawało łączny koszt O(n^2) i przekraczało limit 300s testu dymnego na wieloletnich danych 1H. Najmniejsza, precyzyjna zmiana ogranicza self._bars do ogona o stałej długości (self._calc_window = max(band_period, 5*adx_period)+10 = 80 słupków) przed utworzeniem tablic, dzięki czemu praca dla każdego słupka wynosi O(1), a łączny koszt O(n). Cała logika sygnałów, wejścia, wyjścia i wielkości pozycji jest identyczna bajt po bajcie z kodem, który przeszedł już warstwy 1-2, więc żaden wcześniejszy test nie ulega pogorszeniu. Okno z zapasem obejmuje okres rozgrzewki Wildera ADX (2*adx_period+1) oraz okres pasma SMA.
Implementacja
Strategia powrotu do średniej z pozycjami long i short na 1H dla ETHUSDT USD-M perp. Zajmuje pozycje przeciwne wobec dużych odchyleń z-score od pasma SMA o szerokości 24 słupków, ale ONLY, gdy ADX(14) < 25 (reżim bez trendu/boczny). W reżimach trendowych pozostaje poza rynkiem i zamyka pozycję, jeśli trend pojawi się w trakcie transakcji. Wyjścia następują po uruchomieniu stop-lossu lub powrocie do średniej. Obliczenia dla każdego słupka obejmują stałe okno obejmujące ostatnie dane, dzięki czemu backtest działa w czasie O(n).
Wyniki weryfikacji
Weryfikacja nie powiodła się (warstwa 3 — backtest w piaskownicy): test dymny przekroczył limit czasu 300s. Prawie zawsze oznacza to pracę wykonywaną dla każdego słupka, której koszt rośnie wraz z długością historii — np. ponowne przeszukiwanie całej serii finansowania/danych uzupełniających albo tworzenie listy i wywoływanie min()/sorted() wewnątrz calculate_signal()/on_bar() dla każdego słupka. Wstępnie oblicz posortowane tablice znaczników czasu ONCE w __init__ i użyj bisect albo buforuj wyszukiwania według znacznika czasu, aby koszt dla każdego słupka wynosił O(log n), a nie O(n).
Przegląd backtestu
- Sharpe
- -1,94
- Łączna stopa zwrotu
- -85,70%
- Maksymalne obsunięcie
- 86,79%
- Łączna liczba transakcji
- 1388
- Trafność
- 52,9%
- Współczynnik zysku
- 0,72
Czysta, wierna implementacja: filtr reżimu ADX, zagranie przeciwko z-score oraz logika stop/wyjścia prawidłowo odzwierciedlają przedstawioną hipotezę (brak artefaktu i błędu księgowania, prawdopodobna zmienność 20.6% i brak niemożliwych dni).
Dobra próba i infrastruktura: 1,388 transakcji w ciągu ponad 6 lat, duża liczba transakcji, pojedynczy płynny instrument, koszt O(1) dla każdego słupka — sam backtest jest wiarygodny.
Ujemny wynik sam w sobie jest informacyjny: jednoznacznie potwierdza wcześniejsze założenie o braku odwrócenia na głównych instrumentach, na podstawie dużej, statystycznie istotnej próby.
Konsekwentnie ujemna przewaga w ciągu EVERY roku (2020 -13%, 2021 -52%, 2022 -32%, 2023 -2.8%, 2024 -5.8%, 2025 -25.6%, 2026 -18.4%) i w każdym reżimie — total_return -85.7%, max_drawdown 86.8%.
Głęboko ujemne wskaźniki skorygowane o ryzyko, bez żadnych wątpliwości: Sharpe -1.94 (cały CI ujemny, ci_high -1.14), Sortino -2.46, PSR 0.0, profit_factor 0.72, information_ratio -1.01, wartość oczekiwana -$60.76/transakcję w ciągu 1,388 transakcji.
Odwrócona geometria wypłat, której hipoteza miała uniknąć: exit_z=0.3 (niewielki zysk) wobec stopa 4% daje avg_win $290 < avg_loss $455 przy skuteczności 53%; prowizje pochłaniają 16% zysku brutto — ale nawet prawidłowa geometria nie uratuje sygnału bez wartości predykcyjnej w ciągu 6 lat.
Historia iteracji
Weryfikacja nie powiodła się (warstwa 2 — scenariusze syntetyczne): Użyte parametry: ['exit_z', 'entry_z', 'risk_frac', 'adx_period', 'band_period', 'min_notional', 'adx_threshold', 'stop_loss_pct'] Sprawdź, czy __init__ ustawia wszystkie atrybuty za pomocą self.parameters.get(). - steady_uptrend: TypeError: obiekt typu 'float' nie jest wywoływalny (znacznik czasu słupka: 1735691580000) - steady_downtrend: TypeError: obiekt typu 'float' nie jest wywoływalny (znacznik czasu słupka: 1735691580000) - flat_ranging: TypeError: obiekt typu 'float' nie jest wywoływalny (znacznik czasu słupka: 1735691580000) - volatility_spike: TypeError: obiekt typu 'float' nie jest wywoływalny (znacznik czasu słupka: 1735691580000) - zero_volume: TypeError: obiekt typu 'float' nie jest wywoływalny (znacznik czasu słupka: 1735691580000) - price_gap: TypeError: obiekt typu 'float' nie jest wywoływalny (znacznik czasu słupka: 1735691580000)
Podsumowanie wyniku
Krótkoterminowe odwrócenie nie zapewnia dodatniej przewagi na płynnych głównych kryptowalutach, nawet przy ograniczeniu do reżimu bez trendu ADX, więc zagranie przeciwko nadmiernemu odchyleniu na ETH nadal przynosi straty we wszystkich latach i reżimach.
Analityk wydał werdykt „porzucić” na etapie BACKTEST_REVIEW przed optymalizacją, uznając założenie za z gruntu nietrafione, a nie za błąd możliwy do naprawienia; kod wiernie realizował hipotezę, a backtest był czysty i wiarygodny, więc nie było wady do naprawienia ani nietunowanego parametru, który mogłaby znaleźć optymalizacja. Nie przeprowadzono optymalizacji, późniejszej analizy analityka ani przeglądu ryzyka.
Strategia powrotu do średniej long-short na 1H dla ETHUSDT Binance USD-M perp, która zagrywała przeciwko skrajnym odchyleniom z-score względem krótkiej SMA, ale tylko wtedy, gdy filtr trendu ADX (ADX<25) potwierdzał reżim bez trendu/boczny, pozostając bez pozycji podczas trendów, aby nie walczyć z momentum.
W ponad 1,388 transakcjach w ciągu ponad 6 lat (2019-2026) strategia poniosła zdecydowane straty: całkowita stopa zwrotu -85.7%, Sharpe -1.94 (cały CI ujemny, ci_high -1.14), współczynnik zysku 0.72, wartość oczekiwana -$60.76/transakcję oraz maksymalne obsunięcie kapitału 86.8% przy skuteczności 52.9%. Wynik był ujemny w każdym roku i każdym reżimie, z odwróconą geometrią wypłat (średni zysk $290 < średnia strata $455) i prowizjami pochłaniającymi około 16% zysku brutto.
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.