Biases in Backtesting
9 min czytania
Avoid survivorship bias, overfitting, and lookahead bias that make backtest results lie to you before you go live.
9 min czytania
Avoid survivorship bias, overfitting, and lookahead bias that make backtest results lie to you before you go live.
Twoje wyniki backtestu mogą cię okłamywać — oto jak to wykryć i naprawić, zanim wejdziesz na żywo.
Backtest jest kluczowy.
Ale zły backtest?
Jest gorszy niż brak testów — bo daje ci fałszywą pewność siebie.
Większość traderów nie traci dlatego, że są leniwi. Tracą, ponieważ za bardzo zaufali strategii, która wyglądała świetnie z perspektywy czasu — ale była zbudowana na niewidocznych wadach.
Trzy siły zmawiają się, by zawyżyć każdy backtest: (1) publikujesz tylko te strategie, które zadziałały na historii (selekcja), (2) dostrajasz je, dopóki nie zaczną działać (overfit), (3) twój model kosztów zaniża rzeczywiste tarcie egzekucji. Efekt: rozkład wskaźnika Sharpe'a wycentrowany znacznie powyżej rozkładu live. Zrozumienie dlaczego tak jest oddziela testowanie od teatru.
Wymagania wstępne: swoboda w in-sample vs out-of-sample, podstawy Monte Carlo, wskaźnik Sharpe'a. Ścieżka modułu: ta lekcja omawia strukturalne błędy, które sprawiają, że backtest kłamie. Następna lekcja, Degradacja edge'a, opisuje, co dzieje się z uczciwym edge'em w czasie. Wartości odstające omawiają trzecie kłamstwo: pojedynczy gruby ogon udający umiejętność.
Korzystanie z przyszłych informacji, które w rzeczywistości nie były dostępne w momencie zawarcia transakcji.
Przykłady:
Dlaczego to niebezpieczne: Twoje wejścia i wyjścia wydają się "trafne", ale są nierealistycznie idealne — bo oszukujesz czas.
Jak to naprawić:
Tworzenie strategii, która działa dobrze tylko na danych historycznych — ale zawodzi w czasie rzeczywistym.
Objawy:
Dlaczego to niebezpieczne: Nie odkrywasz edge'a — zapamiętujesz szum. Bailey i López de Prado (2014) pokazali, że już przy 7 próbach na standardowym poziomie 5% prawdopodobieństwo fałszywego pozytywu przekracza 30%. Ich Deflated Sharpe Ratio koryguje raportowany Sharpe o liczbę przeprowadzonych prób.
Jak to naprawić:
[t0, t0+12m], testuj na [t0+12m, t0+15m], przesuń okno testowe o 3 miesiące, dopasuj ponownie, powtórz. Raportuj wyłącznie sklejony equity z części testowych. Nigdy nie używaj fragmentu testowego ponownie do dopasowaniaTestowanie wyłącznie systemów lub aktywów, które nadal istnieją — ignorowanie tych, które upadły lub drastycznie się zmieniły.
Przykłady:
Dlaczego to niebezpieczne: Zakładasz, że warunki, które stworzyły twój edge, zawsze będą istnieć.
Jak to naprawić:
Jeśli przetestujesz 100 strategii na poziomie istotności 5%, około 5 z nich będzie wyglądać "dobrze" wyłącznie przez przypadek.
To bias, który sprawia, że większość publicznych backtestów to śmieci. Każdy parametr, który przeszukujesz, każda wariacja, którą poprawiasz, każdy wykres, na który zerkasz — to kolejna cicha próba. A im więcej prób, tym wyższe prawdopodobieństwo, że coś wygląda jak edge czysto z szumu.
Jak to naprawić:
mlfinlab Lópeza de Prado lub własna implementacja CSCV w ~50 liniach Pythona| Typ biasu | Opis | Korekta |
|---|---|---|
| Bias selekcji | Testowanie tylko "ulubionych" transakcji | Uwzględnij każdą transakcję w próbce danych |
| Cherry picking | Ręczne wykluczanie brzydkich wyników | Loguj każdy wynik, dobry czy zły |
| Bias optymizmu | Założenie, że zawsze dostaniesz fill po idealnych cenach | Symuluj slippage i głębokość księgi zleceń realistycznie |
| Bias zakotwiczenia | Odmowa ponownego testowania lub porzucenia starych systemów | Niech decyzjami kierują dane, nie nostalgia |
"System jest tylko tak dobry, jak jego najgorsze założenie."
Mniej ruchomych części = mniejsze ryzyko overfittingu. (Zobacz Wartości odstające i ich wpływ na metryki — jak pojedynczy słupek może stworzyć iluzję dopasowanego edge'a; oraz Sharpe Ratio i Sortino Ratio — metrykę najmocniej zniekształcaną przez te biasy.) Im prostsza, tym łatwiej ją testować, ulepszać i jej ufać
Lookahead bias to korzystanie z przyszłych informacji, które w rzeczywistości nie były dostępne w momencie symulowanej transakcji — np. działanie na cenie zamknięcia świecy, zanim ta świeca się w pełni zamknie. Daje to nierealistycznie idealne wejścia, które znikają w realnym tradingu.
Overfitting to tworzenie strategii, która działa dobrze tylko na danych historycznych, bo zapamiętała szum zamiast odkryć strukturę. Bailey i López de Prado (2014) pokazali, że już przy 7 próbach na standardowym poziomie 5% prawdopodobieństwo fałszywego pozytywu przekracza 30%.
Heurystyka robocza: zdyskontuj Sharpe z backtestu o 30–50% przed uwierzeniem w niego. Nawet przy rygorystycznym IS/OOS zmiana reżimu i tarcie egzekucji zabierają mniej więcej tyle. Jeśli twoja strategia jest nierentowna po tej korekcie, nie ma edge'a — jest tylko dopasowanie.
Większość przegranych traderów nie pominęła testów. Zaufali wadliwym testom.
Wydajność twojego systemu jest tak niezawodna, jak rzetelność twojego backtestu — a heurystyka robocza mówi: zdyskontuj Sharpe z backtestu o 30–50% przed uwierzeniem w niego. Nawet przy rygorystycznym IS/OOS zmiana reżimu i tarcie egzekucji zabierają mniej więcej tyle. Jeśli twoja strategia jest nierentowna po tej korekcie, nie ma edge'a — jest tylko dopasowanie.
Lista kontrolna pre-trust (5 punktów). Zanim postawisz dolara na backteście, przejdź przez nią:
<< stopnie swobody w danych< 0,5 z CSCVZawalisz którykolwiek punkt → zakładaj, że twój edge to artefakt.
Do dalszej lektury: Bailey, Borwein, López de Prado, Zhu (2014) Pseudo-Mathematics and Financial Charlatanism — praca o PBO/DSR. Bessembinder (2018) Do Stocks Outperform Treasury Bills? — kanoniczne studium survivorship bias. López de Prado (2018) Advances in Financial Machine Learning, rozdz. 11–14.