Przejdź do treści
Wszystkie strategie

Strategie

Hyperliquid SOL Perp Funding-Extreme Contrarian — Long-Short, pojedynczy instrument: FADE tłoczne pozycjonowanie, gdy rolling funding Z-Score osiąga wartość ekstremalną (bardzo dodatni funding = nadmiernie lewarowane długie pozycje → SHORT; bardzo ujemny = skapitulowane krótkie pozycje → LONG), potwierdzone brakiem potwierdzenia przez cenę, wyjście przy powrocie fundingu do normy / stop ATR / stop czasowy (SOLUSDT.HYPERLIQUID, 4H, 3-parametrowy)

Wynik: Porzucona

HyperliquidSolFundingExtremeContrarian

Mechanizm uruchamia się prawidłowo i generuje odpowiednią próbę (201 transakcji w ciągu 953 dni) bez przekroczeń czasu — implementacja fundingu O(log n) działa zgodnie z założeniem

Hipoteza

Strategia LONG-SHORT, jednoinstrumentowa, sterowana POSITIONING, kontrariańska na perpetualu Hyperliquid SOL, zbudowana wokół NON-OHLCV mechanicznego sygnału — perpetual FUNDING — poszła OPPOSITE drogą niż martwa rodzina cash-and-carry z fabryki. Nie jest to NOT delta-neutralny carry (który obumarł, ponieważ P&L z fundingu był zbyt mały w porównaniu z szumem bazy) ani NOT momentum cenowe (koszyki momentum HL to 0/84). Zamiast tego funding jest wykorzystywany jako miernik tłoku/pozycjonowania do wyczucia momentu……Pokaż więcejPokaż mniej

Strategia LONG-SHORT, jednoinstrumentowa, sterowana POSITIONING, kontrariańska na perpetualu Hyperliquid SOL, zbudowana wokół NON-OHLCV mechanicznego sygnału — perpetual FUNDING — poszła OPPOSITE drogą niż martwa rodzina cash-and-carry z fabryki. Nie jest to NOT delta-neutralny carry (który obumarł, ponieważ P&L z fundingu był zbyt mały w porównaniu z szumem bazy) ani NOT momentum cenowe (koszyki momentum HL to 0/84). Zamiast tego funding jest wykorzystywany jako miernik tłoku/pozycjonowania do wyczucia momentu na fade DIRECTIONAL: dobrze udokumentowany wynik mówiący, że gdy funding perpa jest ekstremalnie dodatni, długie pozycje są nadmiernie lewarowane i płacą za ich utrzymanie — stan, który historycznie poprzedza LOWER przyszłe zwroty perpa (ryzyko squeeze/washout), a symetrycznie ekstremalnie ujemny funding oznacza skapitulowane krótkie pozycje poprzedzające odbicia. Wybrana, by jednocześnie wypełnić trzy niedoreprezentowane kategorie: HYPERLIQUID (6.8% wobec celu 20%), long_short (14.2%) oraz bezpieczną pod względem danych przewagę niebędącą OHLCV, której nie ma na cmentarzysku przeuczenia OHLCV. Celowo jednoinstrumentowa i 3-parametrowa, by zachować możliwość implementacji (wieloinstrumentowe koszyki HL obumarły przez przekroczenia czasu w kodowaniu) i opierać się przeuczeniu. IMPLEMENTATION NOTE: utrzymuj bazową wartość fundingu jako rolling deque aktualizowany przyrostowo (O(1) na aktualizację) — NEVER przeskanuj ponownie pełną serię fundingu wewnątrz on_bar (ten wzorzec powodował powtarzające się przekroczenia czasu w sandboksie 300).

Iteracja 2 naprawia jedyne niepowodzenie Layer-2 (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, wszystkie sześć scenariuszy). Layer-2 `_StrategyProxy` przypisuje na nowo każdy wywoływalny atrybut strategii do zwykłego wrappera za pomocą `types.MethodType`, co zamienia jednoargumentową metodę statyczną klasy bazowej `_bar_ts` w metodę związaną — w efekcie `self._bar_ts(bar)` otrzymuje dwa argumenty. Minimalna poprawka zastępuje to jedno wywołanie modułową funkcją pomocniczą……Pokaż więcejPokaż mniej

Iteracja 2 naprawia jedyne niepowodzenie Layer-2 (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, wszystkie sześć scenariuszy). Layer-2 `_StrategyProxy` przypisuje na nowo każdy wywoływalny atrybut strategii do zwykłego wrappera za pomocą `types.MethodType`, co zamienia jednoargumentową metodę statyczną klasy bazowej `_bar_ts` w metodę związaną — w efekcie `self._bar_ts(bar)` otrzymuje dwa argumenty. Minimalna poprawka zastępuje to jedno wywołanie modułową funkcją pomocniczą `_bar_timestamp_ns(bar)`, która odczytuje `bar.ts_event` bezpośrednio (z wartością zapasową `ts_init`) — zachowanie identyczne, odporne na ponowne wiązanie przez proxy. Nic innego się nie zmieniło: importy, struktura klasy, parsowanie fundingu, logika sygnału, wejścia, wyjścia i sizing są bajt w bajt identyczne z previous_code, który przeszedł Layer 1, więc żadna wcześniejsza kontrola nie może się cofnąć. Uwaga: `_bar_interval_ns` jest nadal wywoływany z `__init__`, który działa na rzeczywistej instancji przed ponownym wiązaniem przez proxy, więc pozostaje niedotknięty. Dźwignia 2.0 jest wykorzystywana w `position_size` poprzez `self.config.leverage` w limicie ekspozycji brutto.

Kontrariański fade dla pojedynczego instrumentu przy ekstremalnym fundingu o ujemnej oczekiwanej wartości — brak przewagi do optymalizacji. PF 0.60, total_return -33.7%, Sharpe -0.42, oczekiwana wartość -$156/transakcję, a avg_trade_return_pct -0.37% (ujemna, poniżej progu opłat Hyperliquid 0.15%, L22). Strata w każdym roku (2024 -14.8%, 2025 -13.8%, 2026 -6.5%), przy czym zarówno noga długa, jak i krótka mają win rate poniżej -43%, a avg_loss > avg_win — kontrariański fade systematycznie znajduje się po złej……Pokaż więcejPokaż mniej

Kontrariański fade dla pojedynczego instrumentu przy ekstremalnym fundingu o ujemnej oczekiwanej wartości — brak przewagi do optymalizacji. PF 0.60, total_return -33.7%, Sharpe -0.42, oczekiwana wartość -$156/transakcję, a avg_trade_return_pct -0.37% (ujemna, poniżej progu opłat Hyperliquid 0.15%, L22). Strata w każdym roku (2024 -14.8%, 2025 -13.8%, 2026 -6.5%), przy czym zarówno noga długa, jak i krótka mają win rate poniżej -43%, a avg_loss > avg_win — kontrariański fade systematycznie znajduje się po złej stronie ruchu, a jedynym dodatnim miesiącem jest pojedynczy dzień odstający +10.77% (kurtoza 9.8). Mechanizm jest dobrze zaimplementowany (brak przekroczeń czasu, funding jest zaliczany), ale wpisuje się w dwie rodziny bez ani jednego przetrwałego przypadku: mean-reversion/fade dla pojedynczego instrumentu (L55) oraz kierunkowa strategia bramkowana suplementarnym (funding) sygnałem dla pojedynczego perpa (L73). Bramka braku potwierdzenia przez cenę nie dodała rzeczywistej przewagi. Znak przewagi na transakcję jest ujemny, czego żadne strojenie parametrów nie odwróci. Nie warte 2 godzin optymalizacji. Wzorzec niepowodzenia: fee_edge/no_edge kontrariański fade bramkowany fundingiem dla pojedynczego perpa.

Implementacja

Kontrariańska strategia long-short dla pojedynczego instrumentu na perpie Hyperliquid SOL (świece 4H). Funding jest wykorzystywany jako miernik tłoku: rolling z-score odczytu hl_funding_rates względem jego własnego kroczącego rozkładu jest zwracany co świecę jako sygnał ciągły. Ekstremalnie dodatni z (tłok, nadmiernie płacące długie pozycje) jest fadeowany za pomocą SHORT; ekstremalnie ujemny z (skapitulowane krótkie pozycje) jest fadeowany za pomocą LONG, ale tylko wtedy, gdy cena nie potwierdza tłumu (zamknięcie nietworzące nowego maksimum/minimum z confirm_bars świec). Wyjścia przy powrocie fundingu do normy (|z| <= exit_z), stopie ATR zapisanym w momencie wejścia lub kalendarzowym stopie czasowym mierzonym od position.ts_opened. Sizing jest oparty przede wszystkim na ryzyku: stop ATR kosztuje ~risk_frac kapitału, z niezależnym limitem ekspozycji brutto.

Wyniki weryfikacji

CLEAN RESTART 2026-09-04 — historia werdyktów i zapisy uczenia się tego przebiegu zostały usunięte i został on zrestartowany od weryfikacji. Jego wcześniejsze porzucenie wynikało z potoku przetwarzania, nie z rynku: harness Layer-2 błędnie wiązał pomocnicze funkcje @staticmethod (naprawione), QA wydawał ostateczne werdykty dotyczące wydajności na niezoptymalizowanym teście dymnym (usunięte — QA ocenia teraz wyłącznie poprawność), a przekroczenia limitu czasu w sandboksie wynikały z głodzenia slotów backtestu (naprawione). Hipoteza i kod strategii pozostają niezmienione. Zweryfikuj kod pod względem jego wartości merytorycznej; wydajność zostanie oceniona później przez pełny backtest i optymalizator.

Zawęź _param_bounds do 3 kluczowych parametrów strojenia (entry_z, exit_z, funding_lookback_prints); zablokuj parametry ryzyka/infrastrukturalne jako stałe.

Hipoteza sprzedaje projekt „3-parametrowy celowo, by opierać się przeuczeniu”, ale _param_bounds ujawnia 11 optymalizowalnych parametrów. Mechanizm jest poprawny, ale 11-wymiarowe przeszukiwanie walk-forward zaprzecza deklarowanemu uzasadnieniu przeciw przeuczeniu i podnosi ryzyko PBO. Nie blokujące.

Brak wymaganych działań; odnotowano dla analityka.

Wszystkie syntetyczne sygnały Layer-2 zamrożone na 0.0 (brak wstrzykniętego fundingu), więc ścieżka transakcyjna była testowana wyłącznie przez sandboks (który zawarł transakcje 65 razy na rzeczywistym fundingu). Nie krytyczne.

Przegląd backtestu

Sharpe
-0,42
Łączna stopa zwrotu
-33,71%
Maksymalne obsunięcie
40,24%
Łączna liczba transakcji
201
Trafność
42,3%
Współczynnik zysku
0,60

Mechanizm uruchamia się prawidłowo i generuje odpowiednią próbę (201 transakcji w ciągu 953 dni) bez przekroczeń czasu — implementacja fundingu O(log n) działa zgodnie z założeniem

Pojedynczy instrument, pojedyncze suplementarne źródło danych (hl_funding_rates), brak patologii danych/weryfikacji; funding jest zaliczany w PnL

Ujemna oczekiwana wartość: profit_factor 0.60, total_return -33.7%, oczekiwana wartość -$156/transakcję

avg_trade_return_pct -0.37% — ujemna i znacznie poniżej progu opłat Hyperliquid 0.15% (L22)

Strata we wszystkich trzech latach (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) — trwały brak przewagi, a nie przewaga, która wygasła

Obie nogi tracą (win rate długiej 42%, win rate krótkiej 42%) przy avg_loss > avg_win — fade przy ekstremalnym fundingu znajduje się po złej stronie ruchu

Jedynym dodatnim miesiącem jest pojedynczy dzień odstający +10.77% (kurtoza 9.8); pozostały zapis jest jednolicie ujemny

Kierunkowy fade bramkowany fundingiem dla pojedynczego instrumentu — klasy bez przetrwałych przypadków: mean-reversion (0/174) i kierunkowa strategia bramkowana suplementarnym sygnałem dla pojedynczego perpa (L73)

Historia iteracji

Weryfikacja nie powiodła się (Layer 2 — scenariusze syntetyczne): Użyte parametry: ['exit_z', 'entry_z', 'atr_bars', 'risk_frac', 'min_prints', 'confirm_bars', '_param_bounds', 'atr_stop_mult', 'max_hold_bars', 'max_lag_seconds', 'max_notional_frac', 'funding_lookback_prints'] Sprawdź, czy __init__ ustawia wszystkie atrybuty z self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - steady_downtrend: TypeError:……Pokaż więcejPokaż mniej

Weryfikacja nie powiodła się (Layer 2 — scenariusze syntetyczne): Użyte parametry: ['exit_z', 'entry_z', 'atr_bars', 'risk_frac', 'min_prints', 'confirm_bars', '_param_bounds', 'atr_stop_mult', 'max_hold_bars', 'max_lag_seconds', 'max_notional_frac', 'funding_lookback_prints'] Sprawdź, czy __init__ ustawia wszystkie atrybuty z self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)

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.