Przeoptymalizowanie
Dlaczego najlepszy wynik optymalizacji jest zwykle najgorszym wyborem i jak sprawdzić, czy parametry opisują rynek, czy szum.
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
Optymalizator w MetaTraderze przechodzi tysiące kombinacji parametrów i podaje najlepszą. Kłopot polega na tym, że najlepszą na tych konkretnych danych — a dane historyczne zawierają zarówno prawidłowości, jak i przypadkowy szum. Im więcej parametrów stroisz, tym pewniej dopasujesz się do szumu.
Skąd wiadomo, że to szum
Sprawdź kształt otoczenia, nie sam szczyt. Jeśli okres średniej 34 daje świetny wynik, a 33 i 35 dają wyniki fatalne, to nie jest odkrycie — to przypadek. Prawdziwa prawidłowość nie znika przy zmianie parametru o jeden. Szukaj płaskowyżu: obszaru, w którym cała grupa sąsiednich wartości zachowuje się podobnie, i bierz jego środek, nawet jeśli szczyt leży gdzie indziej.
Wykres optymalizacji w zakładce Wykres optymalizacji pokazuje to wprost. Powierzchnia z jednym ostrym pikiem to sygnał ostrzegawczy. Szeroki grzbiet to sygnał, że coś tam może być.
Policz stopnie swobody. Im więcej parametrów, tym więcej danych potrzeba, żeby wynik cokolwiek znaczył. Strategia z ośmioma strojonymi parametrami przetestowana na dwustu transakcjach nie mówi nic — kombinacji jest więcej niż obserwacji. Dwa, trzy parametry i kilkaset transakcji to minimum, przy którym warto w ogóle patrzeć na wynik.
Sprawdź, czy działa poza okresem strojenia. Podziel dane na dwie części, optymalizuj na pierwszej, testuj na drugiej — bez żadnych poprawek. Jeśli wynik na drugiej połowie jest wyraźnie gorszy, dopasowałeś się do pierwszej. MetaTrader ma do tego wbudowany mechanizm: pole Forward w ustawieniach testera dzieli okres automatycznie.
Czego kryteria optymalizacji nie mówią
Domyślnym kryterium jest zysk. To najgorszy możliwy wybór, bo premiuje przebiegi z jedną szczęśliwą transakcją. Bezpieczniejsze są kryteria uwzględniające zmienność wyniku i liczbę transakcji, ale żadne nie zastąpi spojrzenia na krzywą kapitału i na rozkład pojedynczych wyników.
Trzy liczby, które warto sprawdzić przed jakąkolwiek inną:
- Liczba transakcji. Poniżej stu wynik jest opowieścią, nie statystyką.
- Udział największej transakcji w zysku. Jeśli jedna transakcja odpowiada za większość wyniku, testujesz pojedyncze zdarzenie.
- Najdłuższa seria stratna. To ona decyduje, czy realnie wytrzymasz przy tej strategii, a nie zysk końcowy.
Własna funkcja oceny
OnTester pozwala zwrócić własne kryterium optymalizacji. To dobre miejsce, żeby odrzucać przebiegi, które nie spełniają warunków wstępnych, zamiast oglądać je potem w tabeli wyników.
double OnTester()
{
double transakcje = TesterStatistics(STAT_TRADES);
if(transakcje < 100)
return(0.0);
double zysk = TesterStatistics(STAT_PROFIT);
double obsuniecie = TesterStatistics(STAT_EQUITY_DD);
if(obsuniecie <= 0.0)
return(0.0);
//--- zysk na jednostkę obsunięcia, karany za małą liczbę transakcji
return(zysk / obsuniecie * MathSqrt(transakcje / 100.0));
}To jest przykład konstrukcji, nie zalecane kryterium. Sens ma tylko taki wzór, który wynika z tego, co dla ciebie znaczy „lepiej" — a to jest decyzja, nie obliczenie.