Optymalizacja pod challenge zamiast pod zysk: własne kryterium w MT5
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
- PASS/FAIL zamiast profit factor
- Pułapka najlepszego wiersza
- Optymalizacja dat startu
- Pojęcia: słowniczek, skorowidz
Ź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.