In-sample i out-of-sample: jak podzielić historię na strojenie i kontrolę
W skrócie: optymalizacja zawsze znajdzie parametry, które pasują do historii, na której ją puściłem. Dlatego dzielę dane na dwie części. Na starszej (in-sample) dobieram ustawienia, młodszą (out-of-sample) zostawiam w spokoju i odpalam dopiero na końcu. Jeśli na kontroli wynik się rozsypie, to nie była strategia, tylko dopasowanie.
Dlaczego jeden okres nie wystarcza
Tester pokazuje tysiące kombinacji i wszystkie liczy na tych samych danych. Wiersz z najlepszym wynikiem jest najlepszy częściowo dlatego, że trafił w szum tego konkretnego okresu. Pisałem o tym przy pułapce najlepszego wiersza. Podział na dwie części jest kolejnym zabezpieczeniem: ustawienia, które nigdy nie widziały drugiej części danych, nie mogły się do niej dopasować.
Jak ja to dzielę
W scenariuszu testu nowego bota, który przygotowałem we wrześniu, podział wygląda tak. Strojenie robię na okresie od stycznia 2025 do końca lutego 2026, czyli na 14 miesiącach. Kontrola to kolejne 6 miesięcy, od marca do końca sierpnia 2026. Proporcja wychodzi mniej więcej 70 do 30. Gdy broker nie ma danych od stycznia 2025, wracam do podziału 9 miesięcy na strojenie i 3 na kontrolę. Ten scenariusz opisuję jako przyjętą metodę, na jego pierwszym bocie jeszcze nie skończyłem całego przejścia.
Zasady są proste, ale łatwo je złamać:
- Na kontroli nie patrzę, dopóki strojenie nie jest skończone. Jedno zerknięcie “dla orientacji” i część informacji już wycieka do decyzji.
- Kontrolę odpalam raz na wybrany zestaw. Jeśli po złym wyniku zmieniam parametry i puszczam ponownie, kontrola staje się kolejnym okresem strojenia.
- Test końcowy z ostatnich 12 miesięcy zachodzi na strojenie, więc nie jest niezależnym dowodem. Służy tylko do porównania z resztą floty w tym samym formacie. Niezależny dowód daje wyłącznie kontrola.
- Minimum transakcji obowiązuje w obu częściach. Kontrola, w której bot zrobił 8 transakcji, nic nie mówi.
Jak wygląda dobry wynik
W jednej z serii testów bota na złocie, który handluje po sesji azjatyckiej (bot 2010_GoldAsiaEmaChannelBreakoutEA), rozbiłem wynik referencyjnego zestawu na dwie części. Rok 2025 dał 12 zaliczonych i 1 niezaliczony cykl challenge, rok 2026 dał 17 zaliczonych i 1 niezaliczony. Obie części mają podobny stosunek zaliczeń do porażek, a to jest to, na co patrzę. Nie szukam, w której części zysk jest większy, tylko czy charakter wyniku się utrzymał.
Zły wynik wygląda inaczej: świetne strojenie, a na kontroli zysk spada do zera albo drawdown rośnie kilkukrotnie. Taki zestaw odrzucam, nawet jeśli łączny wynik z całej historii wygląda ładnie.
Gdy danych jest mało
Wiele prop firm udostępnia historię dopiero od 2025 roku, a na koncie demo MetaQuotes realne dane mam od stycznia 2024. Przy 12-14 miesiącach strojenia i kilku miesiącach kontroli liczba transakcji szybko staje się wąskim gardłem. Wtedy wolę uprościć bota (mniej parametrów w optymalizacji) niż walczyć o ładniejszą kontrolę. Dłuższa historia u innego brokera jest lepszym ratunkiem niż sztuczne dzielenie kilku miesięcy na jeszcze mniejsze kawałki.
Czego ten podział nie załatwia
Jedna kontrola to jedna próba. Przy zmianie reżimu rynku (inna zmienność, inny trend) może wyjść gorzej bez winy strategii albo lepiej przez przypadek. Dlatego podział to dopiero pierwszy filtr. Dalej idę do Monte Carlo transakcji, do testu na innych latach osobno i do kryteriów przyjęcia bota.
Checklista
- Daty strojenia i kontroli zapisane przed pierwszą optymalizacją.
- Kontrola młodsza niż strojenie i niezachodząca na nie.
- Kontrolę uruchomiłem raz, po wyborze zestawu.
- W obu częściach jest sensowna liczba transakcji.
- Porównałem charakter wyniku (zaliczenia kontra porażki, drawdown), nie sam zysk.
- Po złej kontroli nie poprawiałem parametrów i nie powtarzałem jej bez zapisu, że to nowa próba.
Powiązane
- Pułapka najlepszego wiersza
- Kryteria przyjęcia bota
- Monte Carlo transakcji
- Pojęcia z artykułu: słowniczek, skorowidz
Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.