EN
Artykuły / 21.3 Kurs Tester i optymalizacja
Kurs Tester i optymalizacjaszkic

Optymalizacja pod challenge zamiast pod zysk: własne kryterium w MT5

14.11.20263 min czytania

W skrócie: MT5 pozwala wybrać w Testerze kryterium “Custom max”, czyli dowolną liczbę zwróconą przez funkcję bota wywoływaną po teście. Moje boty zwracają tam wynik symulacji challenge’u: zaliczone razy 1000 plus niezaliczone. Optymalizacja szuka więc ustawień, które zaliczają najwięcej cykli, a nie tych, które dają największy zysk.

Dlaczego nie zysk

Zysk w koncie prop nie jest celem. Cel to osiągnąć próg zysku bez przekroczenia limitu dziennego i całkowitego. Ustawienie z największym zyskiem bywa takim, które raz w roku wpada w głęboki drawdown i oblewa wszystko, a przy zasadach firmy kończy konto. Optymalizacja pod zysk wybiera to ustawienie, bo zysk go nie karze. Optymalizacja pod zaliczone cykle go karze.

Jak to działa w praktyce

Bot symuluje wyzwanie wielokrotnie: start, cel zysku, limity strat, koniec cyklu po wyniku, nowy start po nim. Na końcu liczy, ile cykli zaliczył i ile oblał. Wynik dla Testera to zaliczone razy 1000 plus niezaliczone. Czytam go jak dwie liczby w jednej:

Wynik Zaliczone Niezaliczone
17000 17 0
14003 14 3
12000 12 0

Tester maksymalizuje, więc tysiące wygrywają z jednostkami: liczba zaliczonych jest ważniejsza niż niezaliczonych. Wynik 14003 jest wyższy niż 13000, choć ma trzy oblane cykle. To prosty kod dwóch liczb w jednej, ale ma wadę: przy równej liczbie zaliczonych wyższy wynik dostaje ustawienie z większą liczbą niezaliczonych. Dlatego po optymalizacji nie biorę pierwszego wiersza, tylko sortuję według zaliczonych i spośród równych biorę te z najmniejszą liczbą niezaliczonych.

Co z tego wynika w tabeli wyników

W teście filtra wyczerpanego dnia (art. Jak oceniać filtr) baza dawała 17 zaliczonych i 0 niezaliczonych. Progi 0,5 i 0,7 zmniejszały to o 3-6, a żaden nie przekroczył bazy. Przy optymalizacji po zysku ten sam filtr wyglądał jak przewaga.

Pułapki

  • Wynik zależy od momentu startu. Cykle zaczynają się od początku okresu, więc inny dzień startu zmienia liczbę cykli. Odporność sprawdzam na przesunięciu daty startu (art. Optymalizacja dat startu).
  • Cykl kończy się po celu. Symulacja zatrzymuje handel do następnego startu, więc liczby transakcji nie można porównywać z testem bez limitów.
  • Wiarygodność. Niewielka liczba cykli to szeroki przedział: 12 zaliczonych z 12 to nie to samo co 120 z 120 (art. PASS/FAIL zamiast profit factor).
  • Zasady firmy zmieniają się. Limity w symulacji muszą odpowiadać aktualnemu regulaminowi, inaczej optymalizuję pod nieistniejącą firmę.

Checklista

  • Kryterium optymalizacji ustawione na własną funkcję bota, nie na zysk.
  • Wynik czytam jako zaliczone i niezaliczone, nie jako jedną liczbę.
  • Z równych zaliczonych biorę najmniej niezaliczonych.
  • Wybrany wiersz sprawdzam na kilku datach startu i na drugim brokerze.
  • Limity w symulacji zgodne z aktualnym regulaminem.

[DO UZUPEŁNIENIA: przykład optymalizacji pod challenge, w której wynik różnił się od optymalizacji pod zysk]

Powiązane

Źródła

Brak źródeł zewnętrznych - opis własnej funkcji kryterium w bibliotece bota; wartości w tabeli ilustrują kodowanie.

Ostrzeżenie: artykuł ma charakter edukacyjny i nie jest poradą inwestycyjną. Wyniki z przeszłości nie gwarantują przyszłych. Handel na rynkach finansowych wiąże się z ryzykiem utraty kapitału.