Walk-forward analysis to chronologiczna procedura, w której parametry strategii wybieramy na wcześniejszych danych, zamrażamy je i oceniamy na kolejnym, niewykorzystanym do tego wyboru okresie. Następnie przesuwamy granicę czasu i powtarzamy proces. Wynik stanowi połączona ścieżka rzeczywistych testów poza próbą, a nie najlepszy backtest znaleziony na całej historii.
Metoda służy ocenie procesu badawczego i aktualizacji modelu. Nie dowodzi istnienia trwałej przewagi ani nie gwarantuje przyszłego wyniku. Jeżeli po obejrzeniu każdego testu zmieniamy reguły, test przestaje być niezależną oceną.
Co właściwie podlega testowi?
W zwykłej optymalizacji szukamy parametrów najlepiej opisujących znaną próbę. W walidacji walk-forward sprawdzamy szerszą regułę: na jakich danych model będzie kalibrowany, według jakiego kryterium, jak często oraz jak długo wybrane ustawienia będą obowiązywać.
Przed pierwszym uruchomieniem warto zapisać hipotezę ekonomiczną, listę dopuszczalnych parametrów, kalendarz aktualizacji, model kosztów i warunki odrzucenia strategii. Bez tego można nieświadomie dopasować nie tylko parametry, lecz także samą procedurę testową.
Przedmiotem oceny jest powtarzalny proces wyboru strategii. Nie wystarczy znaleźć jeden zestaw parametrów, który dobrze wygląda po obejrzeniu całej historii.
Przykład: pięć lat kalibracji, rok testu
Załóżmy edukacyjny eksperyment z danymi dziennymi. Kalibracja wykorzystuje pięć pełnych lat, test trwa kolejny rok, a aktualizacja następuje raz w roku. Schemat trzech pierwszych kroków wygląda następująco:
- 2016–2020: wybór parametrów; 2021: test zamrożonej wersji.
- 2017–2021: ponowny wybór według tej samej reguły; 2022: kolejny test.
- 2018–2022: następna kalibracja; 2023: trzeci test.
Włączenie roku 2021 do kolejnego treningu jest prawidłowe: przed rozpoczęciem 2022 roku ta historia była już znana. Nie wolno natomiast użyć wyniku z 2021 roku do ręcznej poprawy wcześniejszych transakcji. Powstałą ścieżkę tworzą wyniki testowe z lat 2021, 2022 i 2023, zapisane chronologicznie.
Podane długości są przykładem, nie zaleceniem. Strategia miesięczna może mieć w pięciu latach zbyt mało niezależnych decyzji, a strategia intraday może obejmować wiele transakcji zależnych od tego samego reżimu.
Okno kroczące czy rozszerzające się?
W wariancie rolling długość próby uczącej pozostaje stała, a najstarsze dane wypadają. W wariancie expanding, nazywanym też anchored, początek historii jest stały, a trening rośnie wraz z czasem.
Okno kroczące szybciej zapomina dawne warunki, ale odrzuca część informacji. Rozszerzające się daje więcej danych, lecz stare reżimy mogą dominować nad nowym otoczeniem. Wybór powinien wynikać z charakteru hipotezy i planowanego wdrożenia, nie z tego, który wariant dał ładniejszą krzywą.
Granica czasu nie zatrzymuje każdego przecieku
Samo rozdzielenie dat nie wystarcza. Skalowanie cech, uzupełnianie braków i selekcja zmiennych muszą być dopasowane wyłącznie na części treningowej. Dopasowanie transformacji na całej historii przekazuje modelowi informacje o późniejszym rozkładzie danych. Dokumentacja scikit-learn opisuje ten problem i zaleca rozdzielenie uczenia transformacji od jej stosowania.
Druga pułapka dotyczy etykiet. Jeśli obserwacja z końca treningu opisuje stopę zwrotu z następnych dziesięciu sesji, jej wynik może sięgać już do testu. Trzeba wykluczyć rekordy, których horyzont informacyjny nachodzi na granicę. Przy stałym horyzoncie pomocna bywa odpowiednio dobrana przerwa; przy zmiennych terminach wyjścia należy sprawdzać rzeczywiste przedziały etykiet.
Parametr gap w TimeSeriesSplit odcina określoną liczbę obserwacji przed testem. Nie jest automatycznym audytem finansowego przecieku: nie zna terminów publikacji danych, rewizji makroekonomicznych ani czasu zamknięcia transakcji. Dodatkowo liczba wierszy nie zawsze odpowiada stałemu czasowi — zwłaszcza w danych zdarzeniowych.
Wybór parametrów musi pozostać wewnątrz treningu
Jeżeli model wymaga strojenia, można wewnątrz wcześniejszej próby utworzyć dodatkowe chronologiczne podziały walidacyjne. Zewnętrzny odcinek testowy służy wtedy tylko ocenie wybranej procedury. Nie powinien rozstrzygać między dziesiątkami okien, filtrów i kryteriów optymalizacji.
Bailey, Borwein, López de Prado i Zhu analizują problem nadmiernego dopasowania w badaniach strategii oraz prawdopodobieństwo wyboru pozornego zwycięzcy. Praktyczny wniosek dla walk-forward jest prosty: kolejne wersje eksperymentu trzeba liczyć i dokumentować. Wielokrotne oglądanie tych samych wyników poza próbą nie tworzy nowych, niezależnych dowodów.
Jak połączyć wyniki bez sztucznego restartu?
Nie należy uśredniać rocznych współczynników Sharpe’a i nazywać wyniku Sharpe’em całej strategii. Najpierw łączymy niepokrywające się szeregi testowych stóp zwrotu, zachowujemy ciągłość kapitału i dopiero wtedy liczymy statystyki.
Trzeba także ustalić, co dzieje się z otwartą pozycją na granicy okna. Jeżeli wdrożenie zamknęłoby ją po zmianie modelu, test musi naliczyć koszty. Jeśli pozycja byłaby przenoszona, symulacja musi zachować jej stan. Zerowanie portfela bez transakcji i kosztów tworzy wynik, którego nie dałoby się odtworzyć.
Gdy odcinki testowe nachodzą na siebie, ten sam dzień nie może być wielokrotnie doliczony do jednej krzywej. Potrzebna jest jawna reguła wyboru aktywnej wersji modelu albo osobne raportowanie alternatywnych ścieżek.
Co powinien zawierać raport?
- wynik netto, obrót oraz pełny model kosztów i finansowania,
- łączny drawdown, czas odrabiania strat i zmienność ekspozycji,
- wyniki każdego odcinka, aby ujawnić koncentrację zysku w jednym okresie,
- liczbę transakcji i opis zależności między obserwacjami,
- historię wybranych parametrów oraz wrażliwość na sąsiednie ustawienia,
- porównanie z prostym, nieoptymalizowanym punktem odniesienia,
- rejestr sprawdzonych wariantów, wersję danych i kodu.
Najważniejsze wnioski
Walk-forward analysis pomaga odtworzyć warunki podejmowania decyzji, ale nie naprawia słabej hipotezy, błędnych danych ani nierealnej egzekucji. Chronologiczny podział jest początkiem kontroli, nie jej zakończeniem.
Wiarygodny proces z góry określa okna i zasady aktualizacji, chroni granice informacji, uwzględnia koszty oraz dokumentuje wszystkie próby. Po zakończeniu badań warto pozostawić nietknięty okres końcowy lub przejść do obserwacji na nowych danych. Kolejna ręczna poprawka po obejrzeniu testu oznacza nowy eksperyment, a nie potwierdzenie poprzedniego.
Źródła i dalsza lektura
- David H. Bailey, Jonathan Borwein, Marcos López de Prado, Qiji Jim Zhu, The Probability of Backtest Overfitting — selekcja modeli i ryzyko dopasowania do historii.
- scikit-learn, TimeSeriesSplit — chronologiczne podziały i parametr gap.
- scikit-learn, Common pitfalls and recommended practices — przeciek danych przy przygotowaniu cech.
