← Wszystkie artykuły

Cmentarz strategii, rozdział 1 — pułapki metody

Zajrzenie w przyszłość w filtrze z wyższego interwału

8 min czytania · Opublikowano 27.10.2026

Najgroźniejszy błąd w backteście to ten, który poprawia wynik, bo nikt go nie szuka. W naszym teście wybić kanału filtr z wykresu dziennego „znał” zamknięcie dnia, zanim ono nastąpiło. Z wyniku bliskiego zera zrobił strategię z PF 1,29, przetrwał naszą pierwszą poprawkę i wyszedł na jaw dopiero wtedy, gdy porównaliśmy backtest z sygnałami z rachunku demo, wartość po wartości.

Dwa skróty, których używamy: R to wynik transakcji w jednostkach ryzyka (−1 R = strata równa odległości do stopu). PF (profit factor) to suma zysków podzielona przez sumę strat; PF 1,00 oznacza wynik zerowy: zyski równe stratom.

Hipoteza

Wybicie kanału Donchiana to jedna z najstarszych reguł podążania za trendem. Jeśli świeca zamyka się powyżej najwyższego szczytu z ostatnich N świec, kupujemy, a jeśli poniżej najniższego dołka, sprzedajemy. Pomysł ma podstawy w literaturze. W przeglądzie 4 128 strategii wyczucia rynku złota (Bartsch, Baur, Dichtl i Drobetz, praca z 2018 r.) po korekcie na wielokrotne testowanie obroniły się tylko wybrane strategie techniczne. Według autorów zarabiały głównie na wychodzeniu ze złota po długich spadkach, czyli na podążaniu za trendem. Tamte strategie działały na danych miesięcznych, nie godzinowych, więc to wskazówka, a nie dowód dla naszej wersji.

Nasza wersja grała na wykresie godzinowym (H1) i miała dodatkowy filtr zgodności interwałów. Kupno było dozwolone tylko wtedy, gdy na M15, H1, H4 i D1 ostatnie zamknięcie leżało powyżej średniej kroczącej danego interwału, a sprzedaż odwrotnie. W najlepszej wersji hipoteza brzmi tak: wybicie godzinowe zgodne z trendem dnia i czterech godzin ma większą szansę się rozwinąć niż wybicie pod prąd. Brzmi to rozsądnie i takie filtry są powszechnie zalecane.

Jak to sprawdziliśmy

Dane i koszt. Użyliśmy dziewięciu instrumentów: złota i ośmiu indeksów (niemieckiego, japońskiego, francuskiego, europejskiego, hiszpańskiego, holenderskiego, szwajcarskiego i amerykańskiego indeksu małych spółek). Świece H1 pochodziły z lat od 2016; dla trzech instrumentów historia zaczyna się w latach 2017–2020, bo dopiero od wtedy jest wiarygodna. Koszt transakcji był wliczony. Wyjście było mechaniczne: stały stop i limit czasu trzymania pozycji.

Pierwszy alarm i pierwsza, zła poprawka (22.09.2026). Zaczęło się od pytania, czy filtr wielointerwałowy w backteście liczy to samo co strategia na demo. Trafiliśmy na linię, która wybierała świecę wyższego interwału. Kod brał ostatnią świecę, która zaczęła się przed chwilą decyzji. Poprawiliśmy jedną linię, a komentarz obok mówił: „ostatnia świeca zamknięta przed decyzją”. PF spadł o około 0,09 i z ulgą zapisaliśmy, że „przewaga przetrwała własny błąd”. Przy okazji zmierzyliśmy, że bez filtra wielointerwałowego wynik spada mniej więcej do PF 1,10. Wniosek brzmiał: to filtr robi większość przewagi. Na podstawie tych liczb strategia trafiła na rachunek demonstracyjny.

Drugi alarm (25.09.2026). Budowaliśmy narzędzie, które bierze każdy sygnał z demo, odtwarza go z danych historycznych i porównuje wszystkie wartości: cenę, granice kanału, średnie i odległości od średnich na czterech interwałach. Na D1 wartości się nie zgadzały. Policzyliśmy więc, jak często backtest brał inną świecę niż ostatnia zamknięta:

interwał backtest użył innej świecy niż ostatnia zamknięta
M15 0 % decyzji
H1 0 % decyzji
H4 76,8 % decyzji
D1 98,3 % decyzji (17 783 z 18 085)

Poprawka z 22.09 działała tylko tam, gdzie decyzja wypada dokładnie na początku nowej świecy, czyli na M15 i H1. Na wykresie dziennym decyzja o 14:00 wypada w środku dnia, więc „ostatnia świeca, która się zaczęła” to nadal dzisiejsza świeca. W danych historycznych ma ona już końcowe zamknięcie, czyli cenę, której o 14:00 nikt nie znał.

Poprawna reguła jest jedna. Świeca wyższego interwału nadaje się do decyzji tylko wtedy, gdy jej koniec wypada nie później niż chwila decyzji. Początek świecy o tym nie rozstrzyga.

Dla piszących własne backtesty. Błąd wygląda niewinnie: „weź ostatnią świecę D1, której czas otwarcia jest wcześniejszy niż chwila decyzji”. Poprawnie: „weź ostatnią świecę D1, której czas otwarcia plus długość świecy nie wypada później niż chwila decyzji”. Dla wykresu dziennego to różnica między „dziś” a „wczoraj”. Przy przerwach sesji i skróconych dniach ta reguła jest ostrożna; w razie wątpliwości bierz starszą świecę. Uwaga też na zwyczaj platform, w których świeca o indeksie 0 to bieżąca, a 1 to ostatnia zamknięta. W tablicy danych historycznych ta umowa nie obowiązuje, bo każda świeca w pliku jest już zamknięta, także ta, która w chwili decyzji jeszcze trwała.

Niezależna kontrola. Całość przeliczyliśmy dwiema drogami. Pierwszą był poprawiony backtest. Drugą osobna emulacja, w której dane są fizycznie obcinane do chwili decyzji, więc przyszłość po prostu nie istnieje w pamięci programu. Obie drogi wskazały te same wejścia w 99–100 % przypadków.

Potem zbudowaliśmy stałe zabezpieczenia. Pierwsze to automatyczny test obcięcia: 227 sygnałów wybranych losowo i warstwowo × 44 cechy, wszystkie identyczne na danych pełnych i uciętych, a każda różnica przerywa budowę zbioru. Drugie to porównanie z sygnałami z demo: 9 na 9 odtworzonych bez różnicy. Kod przejrzał też niezależny recenzent (inny model AI). Znalazł kolejne, mniejsze błędy, między innymi podwójnie liczony spread przy kupnie i fałszywą historię świec M5 w pierwszych latach. Piszemy o nich w rozdziałach o koszcie i o jakości danych.

Wynik

Mechanika i dane były te same. Jedyna różnica dotyczyła tego, którą świecę wyższego interwału widzi filtr.

9 instrumentów, od 2016 z zajrzeniem w przyszłość poprawnie (jak na żywo)
liczba transakcji 8 449 7 523
suma wyników +1 720 R +149 R
średnio na transakcję +0,204 R +0,020 R
PF 1,29 1,03
PF bez 20 najlepszych transakcji 1,24 0,98

W podziale na instrumenty PF wyglądał tak: indeks niemiecki 1,52 → 1,14, japoński 1,39 → 1,11, złoto 1,39 → 1,10, a sześć pozostałych indeksów razem 1,19 → 0,96. Około 91 % sumy zysku pochodziło z informacji, której w chwili decyzji jeszcze nie było. Po odjęciu 20 najlepszych transakcji poprawna wersja jest na minusie.

Wszystkie liczby tej strategii z 22–25 września uznaliśmy za nieważne, łącznie z wcześniejszym „zaliczonym” testem i wnioskami o sposobie wychodzenia z pozycji. Od tej chwili punktem wyjścia do dalszych badań było PF 1,03, czyli praktycznie zero.

Dlaczego to nie działa

Filtr stał się wyrocznią. W wersji z błędem warunek „kupuj, gdy dzień zamyka się nad średnią” znaczył w praktyce: „kupuj tylko w dni, które zamkną się nad średnią”. Wybicie w górę w dniu, o którym wiadomo, że skończy się mocno, oczywiście ma większe szanse. Backtest nie mierzył więc, czy trend dzienny pomaga wybiciu. Mierzył, czy znajomość końca dnia pomaga zarabiać w jego trakcie. I tak, pomaga.

Błąd był po „dobrej” stronie. Gdyby przyszłość psuła wynik, szukalibyśmy przyczyny od razu. Zawyżony wynik wygląda jak sukces, więc dostaje mniej pytań.

Poprawkę sprawdziliśmy komentarzem, a nie przykładem. Na M15 i H1 nowa linia działała poprawnie, więc szybki rzut oka potwierdzał, że „jest dobrze”. Nikt nie wziął jednej konkretnej decyzji z 14:00 i nie sprawdził ręcznie, którą świecę dzienną widzi filtr.

Zdanie „filtr robi większość przewagi” powinno było nas zaniepokoić. Najmocniejsza część systemu była dokładnie tą, w której siedział błąd. Gdy jeden element tłumaczy prawie cały wynik, to jego trzeba sprawdzić w pierwszej kolejności.

Wersja na żywo i backtest liczyły co innego. Strategię na demo napisano osobno i ona poprawnie brała ostatnią zamkniętą świecę. Bez porównania obu stron wartość po wartości wyniki na żywo byłyby po prostu „słabsze od testu”. Przy trafności rzędu 30–35 %, typowej dla wybić, seria strat długo wygląda jak zwykły pech.

Lekcja dla Ciebie

Jeśli strategia korzysta z czegokolwiek z wyższego interwału (trendu D1, wczorajszego poziomu, świecy tygodniowej, wskaźnika z H4), w backteście to właśnie ten element jest najbardziej podejrzany. Platformy i biblioteki różnie definiują „bieżącą” świecę, a w danych historycznych każda świeca ma już swoje zamknięcie.

Jak sprawdzić to u siebie:

  1. Zapisz chwilę decyzji i koniec każdej użytej świecy. Dla każdej transakcji z backtestu koniec świecy wyższego interwału musi wypadać nie później niż chwila decyzji. Wystarczy sprawdzić kilkadziesiąt losowych transakcji.
  2. Zrób test obcięcia. Utnij dane dokładnie w chwili decyzji, przelicz wskaźniki i porównaj je z wartościami z pełnych danych. Każda różnica oznacza, że pełne dane coś podpowiadają.
  3. Porównaj z sygnałami na żywo, wartość po wartości. Test obcięcia sprawdza kod jego własną definicją „zamkniętej świecy”. Błąd w samej definicji złapie dopiero porównanie z tym, co platforma pokazała na żywo albo na demo.
  4. Sprawdzaj poprawkę na znanym przykładzie, najlepiej na decyzji w środku świecy wyższego interwału, a nie na tej, która wypada na jej początku.
  5. Najpierw badaj element, który daje najwięcej wyniku. Jeśli bez filtra strategia jest bliska zeru, a z filtrem świetna, to filtr pierwszy idzie do testu obcięcia.

W dzienniku zapisuj nie tylko wynik, ale też wartości wskaźników w chwili wejścia, bo tylko z nich da się porównać wynik na żywo z testem. Gdy masz już serię transakcji, kalkulator „Szczęście czy przewaga?” pokaże, ile zostaje z wyniku po odjęciu najlepszych pozycji i jak szeroki jest przedział niepewności.


Materiał edukacyjny, nie porada inwestycyjna. Wyniki historyczne nie gwarantują przyszłych. Opisujemy wyniki naszych testów, na naszych danych i przy naszych kosztach.

Sprawdź to na własnych transakcjach

Darmowe narzędzia, bez rejestracji, dane zostają w Twojej przeglądarce.

← Wszystkie artykuły