EN
Artykuły / 8.2 Wiarygodność wyniku
Wiarygodność wynikuszkic

Standard testu bota: 12 miesięcy, 52 starty tygodniowe i wersja w wyniku

14.11.20263 min czytania

W skrócie: dwa wyniki da się porównać tylko wtedy, gdy powstały w tych samych warunkach. Dla każdego bota robię więc ten sam test: ostatnie dwanaście miesięcy, pięćdziesiąt dwa starty co tydzień, konto 10 tysięcy dolarów. Przy wyniku zapisuję wersję kodu i dokładny plik ustawień. Wynik bez tych dwóch rzeczy traktuję jak anegdotę.

Co wchodzi do standardu

  • Okno: ostatnie 12 miesięcy. Okno przesuwam po zakończeniu każdego miesiąca. Po końcu miesiąca nowy test liczę na bieżącym oknie, nie na starym, i przy porównaniu ze starym wynikiem zaznaczam, że okno się przesunęło. Przesunięcie o jeden miesiąc potrafi zmienić wynik bota (artykuł o przesuwaniu okna co miesiąc).
  • 52 starty tygodniowe. Ten sam bot uruchamiam w pięćdziesięciu dwóch wariantach różniących się tygodniem startu symulacji konta prop. Dzięki temu widać, ile z tych startów kończy się zaliczeniem, a ile oblaniem, a nie tylko wynik jednego, szczęśliwego początku (szczegóły w artykule o odporności na moment startu).
  • Konto 10 tysięcy. Stałe saldo i stałe ryzyko na transakcję pozwalają zestawić boty o różnych strategiach i różnych instrumentach.
  • Model OHLC z minutowych świec. Tryb wolniejszy z prawdziwymi tikami uruchamiam tylko wtedy, gdy mam konkretny powód (opisałem to w artykule o OHLC kontra tiki).

Wynik “dwunastu miesięcy” to po prostu przebieg ze startem w dniu zerowym tego samego sweepu, więc osobnego testu na to nie robię: ten sam okres, kod i ustawienie dają identyczny wynik.

Co zapisuję przy każdym przebiegu

Skrypt uruchamiający test dopisuje wiersz do pliku wyników. Zawiera on między innymi: czas testu, bota, wersję kodu, identyfikator zatwierdzenia w repozytorium, informację, czy w kodzie bota i biblioteki były niezatwierdzone zmiany, symbol, interwał, okres, model testu, serwer, saldo, ryzyko, odcisk pliku ustawień, liczbę przejść i oblań, współczynnik zysku, liczbę transakcji, zysk, spadek kapitału, numer wersji terminala i raport. Dwie rzeczy z tej listy są dla mnie najważniejsze:

  1. Wersja kodu i zatwierdzenie. Bez nich nie wiem, czy zmiana wyniku wynika z nowej wersji, czy z innych danych.
  2. Odcisk pliku ustawień. Ten sam bot z dwoma różnymi ustawieniami to dwa różne wyniki, nawet jeśli nazwa pliku jest podobna.

Znacznik niezatwierdzonych zmian w kodzie ma jeden cel: wynik z “brudnego” katalogu nie powinien zostać uznany za wynik wersji z repozytorium.

Czego nie robię

  • Nie wpisuję na stronę wyników wszystkich przebiegów siatki optymalizacji. Zatwierdzam jeden, najlepszy spełniający standard: mniej oblań, potem więcej przejść, potem wyższy współczynnik zysku.
  • Nie biorę ostatniego testu za aktualny wynik. Ostatni nie znaczy najlepszy.
  • Nie porównuję wyniku sprzed zmiany okna z wynikiem po zmianie bez zaznaczenia tej różnicy.
  • Nie liczę liczby transakcji z logów. Dane biorę z pliku wyników.

Szerzej o tym, jak AI może pomóc w analizie takiej tabeli i gdzie się myli, jest w artykule AI jako analityk wyników backtestu.

[DO UZUPEŁNIENIA: jedna konkretna sytuacja, w której porównanie dwóch wyników bez wspólnego standardu dało błędny wniosek]

Checklista

  • Okno to ostatnie 12 miesięcy, przesunięte po końcu miesiąca.
  • Uruchomiłem 52 starty tygodniowe, nie jeden.
  • Saldo i ryzyko są takie jak w standardzie, na koncie 10 tysięcy.
  • W wyniku jest wersja kodu, zatwierdzenie i odcisk ustawienia.
  • Wiem, czy w kodzie były niezatwierdzone zmiany.
  • Zatwierdzam najlepszy wynik, nie najnowszy.

Powiązane

Ostrzeżenie: wynik backtestu nie gwarantuje zysku na koncie. Standard testu służy do porównań, nie jest prognozą. Handel CFD wiąże się z wysokim ryzykiem utraty kapitału.

Dalej w rozdziale

177

Test rok po roku: suma z 33 miesięcy ukrywa słaby rok

Jeden przebieg na całym okresie pokazuje zysk i profit factor, ale nie mówi, czy bot zarabiał w każdym roku. Osobny test na każdy rok kalendarzowy pokazał u mnie, że 2024 był słaby, a prawie cały zysk dały dwa następne lata.

182

Lista transakcji zamiast sumy: jak znaleźć powód regresji wyniku

Po refaktoryzacji bot zarabiał o połowę mniej. Zamiast zgadywać, porównałem listy transakcji z dwóch raportów dzień po dniu. Cena wejścia była średnio o 8 punktów gorsza, a przyczyna siedziała w jednej linijce.