Przejdź do treści
Wszystkie strategie

Strategie

BTC Przenoszenie impetu między sesjami — strategia długich i krótkich pozycji na jednym instrumencie OHLCV: Kierunek ruchu podczas sesji ASIA przewiduje kierunek ruchu podczas sesji US; handluj podczas sesji US w tym kierunku ONLY, gdy ruch w Azji jest duży; bez pozycji na noc (BINANCE BTCUSDT USD-M, świece 1H, strategia śróddzienna, 2-parametrowa)

Wynik: Porzucona

BtcAsiaToUsSessionCarryoverLS

Dobrze zmierzone: 594 transakcji w pełnej historii 2020-2026 1H, zrównoważone pozycje długie/krótkie (293/301), czysta realizacja (594 zasygnalizowanych, 594 złożonych, żadnych odrzuconych)

Hipoteza

Strategia LONG-SHORT, SINGLE-INSTRUMENT, czysto-OHLCV INTRADAY na kontrakcie perpetual BTCUSDT.BINANCE USD-M, należąca do naprawdę odmiennej rodziny niż wszystkie strategie oczekujące lub odrzucone w tym zestawie — nie jest NOT strategią trendową/wybicia (momentum dual-TF, SuperTrend, Donchian, ORB), NOT strategią powrotu do średniej/gry na odwrócenie (obie odrzucone) ani NOT sygnałem z dodatkowego źródła danych (wszystkie przynoszą straty netto). Wykorzystuje ona śróddzienny SESSION LEAD-LAG: kierunkowy ton……Pokaż więcejPokaż mniej

Strategia LONG-SHORT, SINGLE-INSTRUMENT, czysto-OHLCV INTRADAY na kontrakcie perpetual BTCUSDT.BINANCE USD-M, należąca do naprawdę odmiennej rodziny niż wszystkie strategie oczekujące lub odrzucone w tym zestawie — nie jest NOT strategią trendową/wybicia (momentum dual-TF, SuperTrend, Donchian, ORB), NOT strategią powrotu do średniej/gry na odwrócenie (obie odrzucone) ani NOT sygnałem z dodatkowego źródła danych (wszystkie przynoszą straty netto). Wykorzystuje ona śróddzienny SESSION LEAD-LAG: kierunkowy ton wyznaczony podczas sesji ASIA o niskiej aktywności (00:00-08:00 UTC) ma tendencję do PERSIST podczas sesji US o większej płynności (13:00-21:00 UTC), ponieważ przepływ zleceń US/instytucjonalnych podtrzymuje ruch, zamiast go odwracać. Każdego dnia UTC mierzy się znak i wielkość stopy zwrotu z sesji azjatyckiej; gdy ruch w Azji jest LARGE (to rzeczywisty sygnał kierunkowy, a nie szum), strategia otwiera pozycję podczas sesji US zgodnie z kierunkiem SAME i utrzymuje ją tylko przez tę sesję, zamykając pozycję przed nocą FLAT (brak ekspozycji na finansowanie, luki nocnej i ryzyka trendu wielodniowego). Różni się to od oczekującego wybicia z zakresu otwarcia BTC (które rozgrywa zakres BREAKOUT pierwszych godzin) — tutaj nie ma wybicia; jest to kierunkowe CARRYOVER już ugruntowanego ruchu sesyjnego podczas późniejszej, odrębnej sesji. Zachowuje odporne niezmienniki (jeden instrument, czyste OHLCV z pełną historią 2020-2026 1H, pozycje długie i krótkie, bez dodatkowego źródła danych zgodnie z wnioskami z lekcji o stratach netto, bez drugiej nogi zgodnie z L69) i została zaprojektowana z myślą o progach statystycznych: niemal codzienna częstotliwość daje LARGE liczbę transakcji (>100/rok), która przekracza próg mierzalności i zawęża oszacowanie deflowanego współczynnika Sharpe'a, a tylko 2 FREE parametrów (próg wejścia oparty na ruchu w Azji, mnożnik stopu ATR) minimalizuje karę za deflację wynikającą z wyboru najlepszego spośród -225 prób. Wypełnia też niedostatecznie reprezentowany koszyk strategii krótkoterminowych (8.6% wobec 10%).

Iteracja 2 wiernie naprawia błąd Layer-2: we wszystkich sześciu scenariuszach syntetycznych wystąpił wyjątek 'TypeError: _day_of() takes 1 positional argument but 2 were given'. Środowisko testowe Layer-2 wiąże każdy wywoływalny atrybut obiektu proxy jako metodę BOUND, więc funkcje pomocnicze @staticmethod _day_of/_hour_of otrzymały instancję jako pierwszy argument, a słupek jako drugi. Naprawa: obie funkcje są teraz zwykłymi metodami instancji (self, bar) — miejsca wywołań już używały……Pokaż więcejPokaż mniej

Iteracja 2 wiernie naprawia błąd Layer-2: we wszystkich sześciu scenariuszach syntetycznych wystąpił wyjątek 'TypeError: _day_of() takes 1 positional argument but 2 were given'. Środowisko testowe Layer-2 wiąże każdy wywoływalny atrybut obiektu proxy jako metodę BOUND, więc funkcje pomocnicze @staticmethod _day_of/_hour_of otrzymały instancję jako pierwszy argument, a słupek jako drugi. Naprawa: obie funkcje są teraz zwykłymi metodami instancji (self, bar) — miejsca wywołań już używały self._day_of(bar)/self._hour_of(bar), więc nic więcej się nie zmieniło, a zachowanie w silniku jest identyczne. Druga zmiana zabezpieczająca w tej samej ścieżce pomocniczej: raportowany przez środowisko testowe znacznik czasu (1735690980000) jest w MILLISECONDS, podczas gdy silnik podaje nanosekundy; stary kod bezwarunkowo dzielił przez 1e9, co w środowisku testowym sprowadziłoby wszystkie syntetyczne słupki do tej samej godziny/dnia i zatrzymało logikę sesji (ukryty drugi błąd Layer-2, który ujawniłby się po usunięciu TypeError). Nowa funkcja _epoch_secs() normalizuje jednostki według rzędu wielkości (ns/us/ms/s) i nic nie zmienia dla rzeczywistych znaczników czasu w nanosekundach, więc Layer-3 i rzeczywisty backtest pozostają bez zmian. Kształt sygnału, reguły wejścia/wyjścia, ATR, wielkość pozycji, importy i struktura klasy pozostają poza tym takie same jak w kodzie, który przeszedł już Layer 1.

Założenie o ujemnej wartości oczekiwanej w dobrze zmierzonej próbie obejmującej pełną historię. W ciągu 594 transakcji na przestrzeni 2020-2026 przenoszenie się ruchu między sesjami Azji i US przynosi straty: profit_factor 0.937 (<1), total_return -9.81%, wartość oczekiwana -$17.34/transakcję, Sharpe -0.15 z przedziałem CI [-0.760, 0.458] obejmującym zero, information_ratio -0.76. Jedynym dodatnim rokiem jest 2020 (+15.3%); każdy kolejny rok jest ujemny lub płaski (2021 -8.1, 2022 -5.8, 2025 -10.8), a kroczący Sharpe zmierza do -8.3 do 2026 — hipoteza „duży ruch w Azji przewiduje ruch US” po prostu nie znajduje potwierdzenia w danych. Strategia jest też na granicy opłacalności po uwzględnieniu opłat: avg_trade_return_pct 0.110% jest poniżej progu opłat Binance 0.15% USD-M (L22). Przy zaledwie 2 wolnych parametrach i ujemnej wartości oczekiwanej przewagi kierunkowej dostrajanie nie zmieni znaku przewagi, która nie istnieje. To charakterystyczny profil strategii przynoszącej straty netto fee_edge/no_edge — nie warto poświęcać na optymalizację 2 godzin.

Implementacja

BTCUSDT.BINANCE USD-M perpetual, słupki 1H, intrasesyjny lead-lag long-short. Każdego dnia UTC stopa zwrotu z sesji azjatyckiej (00:00-08:00 od otwarcia UTC do zamknięcia) jest akumulowana przyrostowo i normalizowana przez odchylenie standardowe z ostatnich 30 stóp zwrotu z sesji azjatyckiej (zastępcza miara rozproszenia oparta na ATR w okresie rozgrzewania tej historii), co daje ciągły, niezależny od skali wynik z-score zwracany przy każdym słupku. O godzinie otwarcia sesji US (13:00 UTC) strategia otwiera……Pokaż więcejPokaż mniej

BTCUSDT.BINANCE USD-M perpetual, słupki 1H, intrasesyjny lead-lag long-short. Każdego dnia UTC stopa zwrotu z sesji azjatyckiej (00:00-08:00 od otwarcia UTC do zamknięcia) jest akumulowana przyrostowo i normalizowana przez odchylenie standardowe z ostatnich 30 stóp zwrotu z sesji azjatyckiej (zastępcza miara rozproszenia oparta na ATR w okresie rozgrzewania tej historii), co daje ciągły, niezależny od skali wynik z-score zwracany przy każdym słupku. O godzinie otwarcia sesji US (13:00 UTC) strategia otwiera pozycję w SAME kierunku ruchu azjatyckiego, gdy |z| >= entry_z, maksymalnie jedno wejście na dzień kalendarzowy. Zamyka ją o godzinie zamknięcia sesji US (20:00 UTC), dzięki czemu portfel nie utrzymuje pozycji przez noc (FLAT; brak finansowania i ryzyka luki cenowej), albo wcześniej po zadziałaniu stopa opartego na ATR (stop_atr_mult x ATR, z dolnym ograniczeniem min_stop_pct). Wielkość pozycji ustala ryzyko na poziomie risk_frac kapitału w odniesieniu do odległości stopa, z limitem ekspozycji brutto wynoszącym max_notional_frac x kapitał. Cały stan (ATR, stopa zwrotu z sesji, kolejka rozproszenia) wymaga O(1) na słupek; zmiana dnia jest zakotwiczona w znaczniku czasu słupka, a nie w liczniku słupków.

Wyniki weryfikacji

CLEAN RESTART 2026-09-04 — historia werdyktów i zapisy procesu uczenia z tego uruchomienia zostały usunięte, a strategię uruchomiono ponownie od etapu weryfikacji. Poprzednie porzucenie wynikało z potoku, a nie z rynku: środowisko testowe Layer-2 nieprawidłowo wiązało funkcje pomocnicze @staticmethod (naprawiono), QA wydawał ostateczne werdykty dotyczące wyników na niezoptymalizowanym teście dymnym (usunięto — QA ocenia teraz wyłącznie poprawność), a przekroczenia limitu czasu w piaskownicy wynikały z braku wolnych slotów backtestu (naprawiono). Hipoteza i kod strategii pozostają bez zmian. Oceń kod na podstawie jego zalet; wyniki zostaną rozstrzygnięte później przez pełny backtest i optymalizator.

Dodaj _param_bounds = {entry_z: [...], stop_atr_mult: [...]} zgodne z ograniczeniami w kodzie; nie umieszczaj w nich stałych dotyczących godzin sesji/ATR/ryzyka.

Konfiguracja deklaruje NO _param_bounds, mimo że hipoteza opiera się na „zaledwie 2 FREE parametrach”, aby zminimalizować karę deflacyjną za wybór najlepszego z -225 prób. Bez tego optymalizator nie ma jawnego obszaru parametrów powiązanego z {entry_z, stop_atr_mult}, co podważa dyscyplinę ograniczenia do 2 parametrów. To nie jest wada poprawności.

Ustaw us_exit_hour=21 dla całego okna albo udokumentuj, że 20:00 jest zamierzone.

Hipoteza wskazuje na sesję US 13:00-21:00 UTC, ale us_exit_hour przypada na 20, co wymusza wyjście z pozycji o godzinę wcześniej. To drobna rozbieżność, która nie zmienia mechanizmu ani niezmiennika braku pozycji na noc.

Przegląd backtestu

Sharpe
-0,15
Łączna stopa zwrotu
-9,81%
Maksymalne obsunięcie
23,40%
Łączna liczba transakcji
594
Trafność
44,8%
Współczynnik zysku
0,94

Dobrze zmierzone: 594 transakcji w pełnej historii 2020-2026 1H, zrównoważone pozycje długie/krótkie (293/301), czysta realizacja (594 zasygnalizowanych, 594 złożonych, żadnych odrzuconych)

Rzeczywiście odrębna rodzina strategii śróddziennych wykorzystujących lead-lag między sesjami; bez pozycji na noc, niska korelacja z benchmarkiem (0.025), bez zależności od dodatkowego źródła danych

Strategia przynosząca straty netto: profit_factor 0.937 (<1), total_return -9.81%, wartość oczekiwana -$17.34/transakcję, Sharpe -0.15 (CI obejmuje zero), information_ratio -0.76

avg_trade_return_pct 0.110% jest poniżej progu opłat 0.15% Binance USD-M — strategia na granicy opłacalności po uwzględnieniu opłat, nawet pomijając ujemną wartość oczekiwaną

Tylko 2020 (+15.3%) jest wyraźnie dodatni; każdy kolejny rok jest ujemny lub płaski (2025 -10.8%), a kroczący Sharpe zmierza do -8.3 do 2026 — założenie o przenoszeniu się ruchu między sesjami nie zapewnia trwałej przewagi

return_kurtosis 78.6 — nierównomierny przebieg notowań (np. dzień -6.07% przy 2023-08-29), a nie stabilna przewaga

Historia iteracji

Weryfikacja nie powiodła się (Layer 2 — scenariusze syntetyczne): Użyte parametry: ['entry_z', 'min_bars', 'risk_frac', 'atr_period', 'min_notional', 'min_stop_pct', 'min_vol_days', 'us_exit_hour', 'asia_end_hour', 'stop_atr_mult', 'us_entry_hour', 'asia_start_hour', 'max_notional_frac', 'vol_lookback_days'] Sprawdź, czy __init__ ustawia wszystkie atrybuty na podstawie self.parameters.get(). - steady_uptrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik……Pokaż więcejPokaż mniej

Weryfikacja nie powiodła się (Layer 2 — scenariusze syntetyczne): Użyte parametry: ['entry_z', 'min_bars', 'risk_frac', 'atr_period', 'min_notional', 'min_stop_pct', 'min_vol_days', 'us_exit_hour', 'asia_end_hour', 'stop_atr_mult', 'us_entry_hour', 'asia_start_hour', 'max_notional_frac', 'vol_lookback_days'] Sprawdź, czy __init__ ustawia wszystkie atrybuty na podstawie self.parameters.get(). - steady_uptrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik czasu słupka: 1735690980000) - steady_downtrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik czasu słupka: 1735690980000) - flat_ranging: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik czasu słupka: 1735690980000) - volatility_spike: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik czasu słupka: 1735690980000) - zero_volume: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik czasu słupka: 1735690980000) - price_gap: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (znacznik czasu słupka: 1735690980000)

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.