Przejdź do treści
Moduł 1 z 2
  1. Co to jest Edge i Expectancy - Fundament Systemu
  2. TradingView Pine Script od Zera
  3. Backtesting Bez Oszustw - Overfitting i Lookahead
  4. Excel jako Laboratorium Tradingu
Algo Systematic Lekcja 03

Backtesting Bez Oszustw - Overfitting i Lookahead

Backtesting jest jak mikroskop - może pokazać prawdę lub wielkie kłamstwo w zależności od tego jak go użyjesz. 90% equity curves które widzisz w internecie to efekt lookahead bias, survivorship bias, ignorowania kosztów lub overfittingu parametrycznego. Celem tej lekcji nie...

Ilustracja do lekcji: Backtesting Bez Oszustw - Overfitting i Lookahead
3 / 7
Autor
Zordon Intelligence Sp. z o.o.
Aktualizacja
Czas czytania
7 min
Źródła
2

Wstęp

Backtesting jest jak mikroskop - może pokazać prawdę lub wielkie kłamstwo w zależności od tego jak go użyjesz. 90% equity curves które widzisz w internecie to efekt lookahead bias, survivorship bias, ignorowania kosztów lub overfittingu parametrycznego. Celem tej lekcji nie jest nauczyć Cię robić piękne wykresy rosnące. Celem jest nauczyć Cię jak zniszczyć swój system zanim zrobi to rynek.

W tradingu systemowym nie szukasz potwierdzenia że system działa. Szukasz dowodów że nie działa. Dopiero jeśli system przetrwa wszystkie próby falsyfikacji, zasługuje na forward test.

Trzy grzechy główne fałszywego backtestu

1. Lookahead Bias - widziałeś przyszłość

Używasz danych które nie były dostępne w momencie decyzji.

Przykład lookaheadDlaczego to oszustwo
Wejście na close tego samego bara na którym sygnałW realu sygnał masz po close, wejście dopiero open next bar
close > sma(close,20) i wejście na close bez offsetuSMA liczy close które właśnie poznajesz
Użycie high dnia do wejścia intraday gdy testujesz na D1High nie był znany o 9:00
Poprawka lookahead:
Sygnał na barze N obliczony na close[N]
Wejście na open[N+1] lub close[N+1] z poślizgiem

W Pine: process_orders_on_close=false (domyślnie)
W Pythonie: shift(1) na sygnałach

2. Survivorship Bias - testujesz tylko zwycięzców

Testujesz SP500 dziś = 500 firm które przetrwały. Nie testujesz 1000 które zbankrutowały lub zostały delistowane. Twój system “kupujący dołki” wygląda genialnie bo zwycięzcy wrócili. Przegrani których nie ma w bazie zepsuliby wynik.

Rozwiązanie: używaj baz point-in-time, dla krypto testuj top 100 z 2020 które częściowo już nie istnieją, dla akcji używaj danych survivorship-free (Norgate, CRSP). Jeśli nie masz, przynajmniej testuj na indeksie a nie koszyku zwycięzców.

3. Koszty i poślizg których nie ma w Excelu

Equity Real = Equity Backtest - Prowizje - Poślizg - Swap - Finansowanie - Spread rozszerzony na news

Dla M5 scalping: poślizg 1-2 ticki = 0.02-0.05% na transakcję
Dla 1000 transakcji rocznie to 20-50% zwrotu zjedzone

Zasada: jeśli nie odjąłeś 30% zysku brutto na koszty na M5-M15, nie masz wyniku.

Overfitting - dlaczego krzywa rośnie tylko w przeszłości

Overfitting to dopasowanie systemu do szumu historycznego zamiast do sygnału. Objawy: 10 parametrów, perfekcyjna krzywa, Sharpe 4.0 w backteście, rozpad w forward.

Symptom overfittinguDiagnoza
System ma 5+ parametrów optymalizowanych co 1Szukasz szumu, nie edge
Wynik skacze +/- 40% przy zmianie SMA 20->21Parametr niestabilny, edge pozorny
PF 3.0 na IS, PF 0.9 na OOSKlasyczny overfit
Tylko jeden rynek działa, reszta nieEdge specyficzny dla anomalii historycznej
Metryka overfittingu - Parameter Stability:

Test: Zmieniasz każdy parametr o +-20%
Jeśli EV spada o <25% -> parametr stabilny
Jeśli EV spada o >50% lub zmienia znak -> overfitting
Reguła 1:5:
Na każde 5 transakcji w próbie OOS maksymalnie 1 parametr optymalizowany.
Masz 100 transakcji OOS = max 20 kombinacji? Nie, max 4 parametry.
Masz 100 transakcji = max 1-2 parametry. Reszta musi być z logiki rynku, nie optymalizacji.

Protokół uczciwego backtestu - checklista KursTradera

Przed każdym backtestem przejdź przez 7 kroków:

Krok 1 - Definicja: Zapisz hipotezę w 1 zdaniu: “Kupuję pullback w trendzie wzrostowym definiowanym jako … bo zakładam kontynuację momentum ze względu na …”

Krok 2 - Dane: Czy dane są survivorship-free? Czy masz OHLCV + wolumen? Czy obejmują co najmniej 1 bessę i 1 hossę?

Krok 3 - Koszty: Ustaw prowizję, poślizg 1-2 ticki, spread. Dla krypto 0.05% taker, dla futures 1 tick poślizgu.

Krok 4 - Logika bez przyszłości: Każde wejście na next bar open. Każdy wskaźnik liczony na close[1] lub z shift(1).

Krok 5 - Podział IS/OOS: 70% danych In-Sample do budowy, 30% Out-of-Sample do walidacji. Nigdy nie optymalizuj na OOS.

Krok 6 - Metryki: Nie equity curve. PF, EV w R, MaxDD, SQN, liczba transakcji, stability. Equity to wynik, nie dowód.

Krok 7 - Destrukcja: Przeprowadź randomizację (Monte Carlo), test opóźnienia sygnału o 1 bar, test na losowych rynkach. Jeśli system umiera - nie handlowany.

Testy które zabijają iluzję

Test losowych wejść

Zastąp swoje wejścia losowymi z tym samym SL/TP. Jeśli losowe mają podobny PF, Twój edge jest w zarządzaniu pozycją, nie w wejściu. To cenne info, ale nie to co myślałeś.

Test poślizgu

Dodaj +0.1% do każdej straty i -0.1% do każdego zysku. Jeśli EV zmienia znak - system jest zbyt kruchy.

Python pseudo:
df['pnl_real'] = df['pnl'] - abs(df['pnl'])*0.001 - commission

Test zamiany rynków

System na BTC H1 przetestuj na ETH H1 i SOL H1 bez re-optymalizacji. Jeśli PF wszędzie <1.0 poza BTC, edge jest specyficzny i prawdopodobnie przeoptymalizowany do BTC.

Kiedy plan mówi nie handluj

  1. Gdy backtest nie ma zdefiniowanego poślizgu i prowizji: Nie ma wyniku. Najpierw koszty, potem euforia.
  2. Gdy IS i OOS mają ten sam zakres dat co optymalizacja: To nie jest OOS, to jest IS podzielony. OOS musi być czasowo po IS (walk-forward) lub całkowicie odseparowany rynkami.
  3. Gdy system ma 6 parametrów i 120 transakcji: Masz 20 transakcji na parametr. To overfitting gwarantowany. Zmniejsz parametry lub zwiększ próbę 10x.
  4. Gdy testujesz tylko na jednej hossie 2020-2021: Nie sprawdziłeś bessy. System long-only zawsze działa w hossie.
  5. Gdy po dodaniu 1 bara opóźnienia system zmienia EV z +0.3R na -0.1R: Masz lookahead. Napraw logikę, nie handluj.

Błędy które kosztują najwięcej

  1. Optymalizacja brute-force w TradingView. Przeskanowanie 5000 kombinacji SMA i wybranie najlepszej to przepis na bankructwo. Używasz OOS, nie top 1 z IS.
  2. Ignorowanie survivorship bias na akcjach. Kupowanie spółek z WIG20 dziś które były na dnie w 2020 to łatwy backtest. Delistowane spółki zniknęły z bazy.
  3. Backtest na M1 bez wolumenu i poślizgu. Dane M1 z Binance mają luki, wicks 10%. Twój SL 0.2% jest trafiany w 80% w realu, w backteście 30%.
  4. Mylenie backtestu z forward testem. “Przetestowałem na ostatnich 3 miesiącach” to nie backtest, to forward na małej próbie. Odróżniaj.
  5. Brak dziennika decyzji. Jeśli nie zapiszesz hipotezy PRZED backtestem, mózg dopisze ją PO, żeby pasowała do wyniku. Prowadź pre-registration pomysłów.

Ćwiczenie mierzalne

Cel: Zniszczyć jeden ze swoich systemów testami anty-oszustwo.

Zadanie 90 min:

  1. Weź dowolną strategię z Lekcji 2.
  2. Zastosuj 3 testy:
Test A - Opóźnienie 1 bar:
Przesuń wszystkie sygnały o 1 bar w przód (entry na open next bar +1)
Policz EV w R przed i po. Zapisz % spadku.

Test B - Koszty x2:
Podwój prowizję i poślizg. Jeśli EV &lt; 0 -> system nie nadaje się na real.

Test C - Random Entry:
Zastąp sygnał losowym (50% long). Zachowaj ten sam SL/TP.
Policz PF random vs PF Twój. Jeśli różnica &lt;0.2 -> edge nie jest w wejściu.
  1. Wypełnij tabelę:
TestEV przedEV poWniosek
Opóźnienie
Koszty x2
Random

Jeśli system nie przechodzi 2 z 3, wraca do laboratorium, nie na rynek.

Sprawdź się

  1. Wyjaśnij różnicę między lookahead a survivorship bias i podaj po jednym przykładzie każdego.
  2. Masz 200 transakcji IS i optymalizujesz 4 parametry. Czy to overfitting? Policz regułę transakcji/parametr.
  3. Dlaczego wejście na close bara w którym wygenerowano sygnał to lookahead w większości realnych brokerów?
  4. Czym różni się IS od OOS i dlaczego OOS musi być czasowo po IS w walk-forward?
  5. System ma PF 2.0 bez kosztów i PF 1.05 z kosztami x2. Czy to system gotowy do handlu? Uzasadnij.

Częste pytania

Ile transakcji potrzeba aby backtest był wiarygodny? Minimum 100, lepiej 300+ aby policzyć SQN i stabilność. Dla systemów H1 to 1-2 lata danych. Dla D1 to 3-5 lat (obejmuje różne reżimy). Mniej niż 100 to zabawa, nie pomiar.

Czy mogę używać danych Binance z 2017 do krypto? Możesz, ale pamiętaj o zmianie reżimu: 2017 płynność 1% dzisiejszej, prowizje inne, luki. Podziel dane na reżimy 2017-2020 vs 2020-2024 i testuj stabilność.

Czy overfitting zawsze jest zły? Niewielki overfitting jest nieunikniony przy optymalizacji. Problem zaczyna się gdy wynik IS i OOS różni się o >40% lub gdy mała zmiana parametru zabija edge. Wtedy to overfitting destrukcyjny.

Jak rozpoznać że mam lookahead w Pythonie? Jeśli po dodaniu .shift(1) do sygnału wynik spada o >30%, miałeś lookahead. Każdy sygnał liczony na close i wchodzący na close to lookahead. Zawsze shift.

Czy mogę backtestować na TradingView i ufać wynikowi? Tak, jeśli: ustawione prowizje + poślizg, brak repaint, entry na next bar, test OOS ręcznie (zmień daty), eksport i policzenie metryk w Excelu. TradingView to prototyp, nie certyfikacja.


Reklama

Najważniejsze wnioski

  • Backtesting jest jak mikroskop - może pokazać prawdę lub wielkie kłamstwo w zależności od tego jak go użyjesz. 90% equity curves które widzisz w internecie to efekt lookahead bias, survivorship bias, ignorowania kosztów lub overfittingu parametrycznego. Celem tej lekcji nie...

Źródła i dokumenty

Materiał opieramy na dokumentach źródłowych. Wartości zmienne — opłaty, limity, wskaźniki regulacyjne — sprawdź u źródła przed podjęciem decyzji.

  • TradingView — Pine Script reference
  • Python for Finance — Yves Hilpisch

Zastrzeżenie

  • KursTradera.pl to serwis edukacyjny o charakterze informacyjnym. Nie prowadzimy działalności maklerskiej, nie przyjmujemy i nie przekazujemy zleceń, nie zarządzamy portfelem, nie oferujemy instrumentów finansowych i nie świadczymy usług doradztwa inwestycyjnego w rozumieniu ustawy o obrocie instrumentami finansowymi. Materiały opisują mechanizmy rynkowe i proces decyzyjny — nie są instrukcją kupna lub sprzedaży jakiegokolwiek instrumentu.
  • Żadna z publikowanych treści nie stanowi rekomendacji inwestycyjnej, informacji rekomendującej ani rekomendacji w rozumieniu Rozporządzenia Parlamentu Europejskiego i Rady (UE) nr 596/2014 (MAR) oraz aktów wykonawczych. Nie jest też ofertą nabycia lub zbycia instrumentów finansowych ani zaproszeniem do składania ofert. Wszelkie przykłady, wykresy, zrzuty ekranu i liczby mają charakter ilustracyjny i odnoszą się do sytuacji hipotetycznych lub historycznych.
  • Inwestowanie i trading wiążą się z ryzykiem utraty części lub całości zainwestowanego kapitału. Wyniki osiągnięte w przeszłości — w tym wyniki przedstawione w materiałach edukacyjnych, backtestach i przykładach — nie gwarantują wyników przyszłych i nie są ich wiarygodnym wskaźnikiem. Żadna opisana metoda ani strategia nie eliminuje ryzyka. Decyzje inwestycyjne podejmujesz samodzielnie, na własną odpowiedzialność i po zapoznaniu się z aktualnymi dokumentami swojego brokera.
  • Instrumenty z dźwignią (CFD, kontrakty terminowe, opcje, transakcje typu margin) mogą generować straty przewyższające wartość wpłaconych środków — możesz stracić więcej, niż zainwestowałeś, i zostać wezwanym do uzupełnienia depozytu (margin call). W Unii Europejskiej dźwignia dla klientów detalicznych handlujących CFD na głównych parach walutowych jest ograniczona decyzją ESMA (interwencja produktowa w sprawie CFD i opcji binarnych), ale ograniczenie dźwigni nie usuwa ryzyka. Odsetek rachunków detalicznych przynoszących straty różni się między brokerami i zmienia się w czasie — aktualną wartość odczytaj z ostrzeżenia ryzyka u swojego brokera i zapisz razem z datą.
  • Backtesty, symulacje i przykładowe wyniki nie są rzeczywistymi wynikami transakcyjnymi. Powstają w warunkach odtwarzanych z danych historycznych, nie uwzględniają w pełni poślizgu cenowego, płynności, spreadu, prowizji, swapu, wpływu własnych zleceń na rynek ani czynnika psychologicznego — a wszystkie te elementy pogarszają wynik w praktyce. Wyniki historyczne nie chronią przed przyszłymi stratami.

Kto to pisze i jak to sprawdzamy

Materiały pisze i weryfikuje Redakcja Kurs Tradera — zasady opisuje o serwisie: każda liczba ma źródło, a braki pokazujemy jawnie. Błąd merytoryczny zgłosisz przez kontakt — poprawki opisujemy w treści.

Postęp kursu 0 / 7
Dalej →

Postęp zapisujemy wyłącznie w tej przeglądarce (localStorage) — nie ma konta ani kopii na serwerze. Wyczyszczenie danych witryny go usunie. Zarządzaj swoimi danymi