MQL5 EA — podstawy automatu w MetaTraderze 5

Ostatnio zweryfikowano: · Treść aktualna długoterminowo
Ostrzeżenie · YMYL Ten artykuł ma charakter wyłącznie edukacyjny i nie stanowi rekomendacji inwestycyjnej. Handel na rynku Forex wiąże się z wysokim ryzykiem utraty kapitału — według ESMA 74–89% rachunków detalicznych traci pieniądze.

Expert Advisor w MQL5 to mała aplikacja, która siedzi na wykresie w MetaTraderze 5 i co tick sprawdza, czy w rynku pojawiło się to, co zostało wcześniej opisane jako warunek wejścia. Jeżeli tak, składa zlecenie sama, bez pytania o zgodę. Ten artykuł tłumaczy, jak EA jest zbudowany od środka, jak rozmawia z platformą i z brokerem, i kiedy ma to sens. Nie jest tutoriałem programowania — celowo nie ma w nim ani jednej linijki kodu.

Czym jest Expert Advisor w MQL5

MQL5 (MetaQuotes Language 5) to język bardzo blisko spokrewniony z C++, napisany specjalnie pod platformę MetaTrader 5. Expert Advisor (EA) to pojedynczy program w tym języku, skompilowany do pliku .ex5, który ładuje się na wykres dowolnego instrumentu, jak gdyby był wskaźnikiem. Różnica jest jednak fundamentalna: wskaźnik tylko rysuje, EA może składać zlecenia. To na poziomie uprawnień rozróżnia samodzielną automatyzację od zwykłego wyświetlacza.

Czym EA różni się od ogólnego „robota tradingowego"? Niczym poza ekosystemem. Robot pisany w Pythonie też jest robotem — tyle że żyje poza terminalem, zwykle łącząc się z brokerem przez REST API lub FIX. EA z definicji żyje wewnątrz MT5. Szerszą perspektywę porównawczą znajdziesz w tekście o automatyzacji w MT4 i MT5 oraz w przewodniku algorithmic trading — pierwsze kroki.

Jak EA komunikuje się z platformą — cykl OnInit, OnTick, OnDeinit

Każdy Expert Advisor ma swój życiowy rytm wyznaczony przez trzy zdarzenia, które platforma wywołuje za niego sama. Pierwsze nazywa się OnInit i odpala się raz, w chwili dołączania EA do wykresu albo restartu terminala. To moment, w którym EA wczytuje parametry wejściowe od użytkownika, otwiera uchwyty do wskaźników i mówi platformie, że jest gotów.

Drugie zdarzenie to OnTick — najważniejsze. MetaTrader wywołuje je za każdym razem, gdy z serwera brokera przychodzi nowa kwotacja danego symbolu. Na płynnym EUR/USD w godzinach sesji londyńskiej może to być nawet kilkadziesiąt razy na sekundę. Wewnątrz OnTick EA decyduje, czy bieżąca cena spełnia warunki wejścia, czy trzeba przesunąć stop-loss, czy może zamknąć pozycję. To w OnTick mieszka cała logika strategii.

Trzecie zdarzenie, OnDeinit, jest wywoływane przy ściąganiu EA z wykresu, zmianie symbolu czy zamykaniu MT5. Służy do sprzątania — zwalniania uchwytów wskaźników, zapisywania stanu, zamykania plików logów. Pomijam tu kilka pomocniczych funkcji, jak OnTimer (cykliczny zegar) czy OnTrade (reakcja na zmianę pozycji), bo nie zmieniają one zasady. Cały EA to obsługa zdarzeń, które MT5 podaje na tacy.

Jak EA składa zlecenia — klasa CTrade

Drugą rzeczą, którą warto zrozumieć bez wchodzenia w składnię, jest sposób, w jaki EA komunikuje się z brokerem. MT5 nie pozwala bezpośrednio „wysłać kupna" w sposób, jaki robi to człowiek klikający w interfejsie. Każde zlecenie idzie jako strukturalna prośba (MqlTradeRequest) do serwera, a serwer odsyła wynik (MqlTradeResult) wraz z kodem informującym, czy wszystko się udało, czy może odrzucono zlecenie z powodu wymogu marginu, nieprawidłowych poziomów albo przekroczonej dewiacji.

Surowe wysyłanie tych struktur jest pracochłonne, dlatego MetaQuotes dostarcza w bibliotece standardowej klasę CTrade, która opakowuje wszystko w wygodne metody w rodzaju Buy, Sell, PositionClose, OrderModify. Na każdej liście mailingowej MQL5 znajdziesz długie dyskusje o subtelnościach: czy używać Buy(volume, symbol), czy własnoręcznie wypełnianej struktury, jak obsługiwać requote'y, jak reagować na poślizg cenowy (slippage) przy szybkich wybiciach. Dla 95% strategii detalicznych CTrade jest aż nadto.

Strategy Tester, czyli jak sprawdzić, że nie nauczyło się historii na pamięć

Wbudowany w MT5 Strategy Tester to po Strategy Tester ze starej czwórki dużo solidniejsze narzędzie. Pozwala podać EA historyczne ticki (wygenerowane z barów albo prawdziwe, ściągane z serwera MetaQuotes), policzyć tysiące przebiegów z różnymi parametrami i przedstawić wyniki w formie raportu z krzywą kapitału, drawdownem i czynnikiem zysku.

Problem polega na tym, że ten sam Tester, który ma być narzędziem weryfikacji, najczęściej staje się fabryką iluzji. Optymalizacja parametrów na pełnej historii prawie zawsze produkuje krzywą rosnącą jak po sznurku — i prawie zawsze ta krzywa rozpada się, kiedy uruchomi się EA na pieniądzach. Zjawisko nazywa się curve fitting i jest matematyczną pewnością, nie kwestią pecha. Jak temu przeciwdziałać, opisuję w tekście jak rzetelnie przeprowadzić backtest. Krótka wersja: rozdziel dane na okres do optymalizacji i okres do walidacji (out-of-sample), a najlepiej zrób walk-forward.

„Strategia, która osiąga zysk na danych historycznych, niekoniecznie osiągnie zysk w przyszłości. Dane historyczne to mała próbka uniwersum możliwych stanów rynku, a optymalizacja parametrów pod tę próbkę jest właśnie tym, czym jest — dopasowaniem do próbki." — Ernest P. Chan, Algorithmic Trading: Winning Strategies and Their Rationale, Wiley, 2013

Kiedy EA naprawdę pomaga, a kiedy szkodzi

Sensowność EA mocno zależy od typu strategii. Trzy sytuacje, w których EA daje realną przewagę: konsekwentna egzekucja reguł, których człowiek nie wytrzymuje psychicznie (na przykład 200 transakcji miesięcznie w skalpingu), monitorowanie rynku 24 godziny na dobę w sesjach azjatyckich, gdy reszta świata śpi, oraz handel z reakcją podejmowaną w ułamku sekundy — tam, gdzie człowiek z założenia jest za wolny.

Z drugiej strony EA radzi sobie fatalnie wszędzie tam, gdzie potrzeba osądu. Handel pod publikację Non-Farm Payrolls, ocena, czy bieżące zachowanie wykresu to faktyczna zmiana reżimu rynkowego czy chwilowy szum, interpretacja kontekstu geopolitycznego — to wszystko z reguły dyskwalifikuje EA. Statystyka, którą znajdziesz w niezależnych badaniach forum MQL5, jest brutalna: większość EA sprzedawana na Marketplace, mimo świetnych wykresów backtestowych, daje stratę w handlu na żywo w pierwszym roku. To nie jest kwestia złej woli sprzedawców — to kwestia tego, że dobry backtest jest tani, a dobra strategia rzadka.

Czy warto pisać własny EA

Jeśli rozumiesz, na czym polega twoja strategia, i jesteś w stanie ją opisać regułami na tyle precyzyjnymi, że zniknie z nich uznaniowość, własny EA jest najlepszą inwestycją czasu. Trzy do sześciu miesięcy spędzonych z dokumentacją MQL5, prostym projektem testowym i Strategy Testerem buduje wiedzę, której nie kupisz w pakiecie z gotowym robotem.

Drugi powód jest praktyczny. EA gra 24/5, ale tylko wtedy, gdy 24/5 działa też komputer, na którym jest zainstalowany. Domowy desktop w Warszawie z zasilaniem zależnym od jednego kabla nie wystarczy. Stąd osobna rola serwerów VPS, opisana w przewodniku o VPS, brokerze i opóźnieniach: ta sama strategia EA potrafi mieć zauważalnie inne wyniki w zależności od opóźnień między serwerem brokera a maszyną, na której EA siedzi.

Co zrobić jutro

  1. Pobierz darmowego MetaTradera 5 z oficjalnej strony brokera, otwórz konto demo i przejdź do zakładki Strategy Tester. Załaduj jednego z wbudowanych przykładów (Moving Average lub MACD Sample) na EUR/USD H1 i przejrzyj raport, żeby zobaczyć, jak wyglądają wszystkie podstawowe metryki — krzywa kapitału, drawdown, czynnik zysku.
  2. Otwórz oficjalną dokumentację MQL5 na stronie mql5.com/en/docs i przeczytaj tylko trzy rozdziały: o funkcjach OnInit, OnTick oraz o klasie CTrade. Nie próbuj jeszcze niczego pisać — celem jest zobaczenie, jak dokumentacja jest skonstruowana i gdzie szukać przykładów.
  3. Spisz w notesie swoją obecną strategię w postaci reguł logicznych typu „jeżeli X i Y, to wejście long ze stopem na poziomie Z". Jeżeli po godzinie pracy nadal pojawiają się słowa „w zależności od kontekstu" albo „intuicyjnie", to znak, że strategia jest dyskrecjonalna i automatyzacja jej nie pomoże — wróć do frameworka checklisty setupu.
  4. Jeśli reguły dało się spisać jednoznacznie, zaplanuj harmonogram nauki: trzy miesiące podstaw MQL5 z dokumentacji MetaQuotes plus tygodniowy projekt budowy najprostszego EA opartego na przecięciu dwóch średnich. To bardziej uczy niż dziesięć kupionych robotów.
  5. Zanim odpalisz cokolwiek na żywo, zarezerwuj minimum miesiąc forward testu na koncie demo na bieżących kwotowaniach. Backtest nie zastąpi forward testu — w forward teście widać między innymi opóźnienia brokera, których backtest nie widzi.
Jarosław Wasiński
O autorze

Jarosław Wasiński

Redaktor naczelny MyBank.pl · Analityk finansowy i rynkowy

Niezależny analityk i praktyk z ponad 20-letnim doświadczeniem w sektorze finansowym. Twórca i redaktor naczelny portalu MyBank.pl, działającego od 2004 roku. Analiza fundamentalna rynków walutowych i makroekonomicznych od 2007 roku.

Źródła i bibliografia

  1. MetaQuotes MQL5 Reference — OnTick event handler · oficjalna dokumentacja zdarzenia wywoływanego na każdą kwotację www.mql5.com ↗
  2. MetaQuotes MQL5 Standard Library — CTrade class · klasa biblioteki standardowej do składania zleceń przez EA www.mql5.com ↗
  3. MetaQuotes MetaTrader 5 — Strategy Tester documentation · narzędzie do backtestowania i optymalizacji EA www.metatrader5.com ↗

Najczęstsze pytania

Czym EA w MQL5 różni się od „robota" w Pythonie?

Z perspektywy logiki — niczym. Oba sprowadzają się do pętli, która co jakiś czas sprawdza warunki rynkowe i wysyła zlecenia. Różnica leży w ekosystemie. EA w MQL5 jest dzieckiem MetaTradera: ładuje się na wykres, korzysta z wbudowanych wskaźników, używa Strategy Testera. Robot w Pythonie żyje poza terminalem i łączy się z brokerem zewnętrznie — najczęściej przez REST API albo protokół FIX. EA wygrywa, jeśli twoja strategia opiera się o wskaźniki MT5 i potrzebujesz wbudowanego testera. Python wygrywa, jeśli chcesz korzystać z bibliotek do uczenia maszynowego, statystyki albo łączyć dane z wielu źródeł.

Czy muszę umieć programować, żeby uruchomić EA?

Żeby tylko uruchomić cudzego EA — nie. Plik .ex5 wystarczy przeciągnąć na wykres, ustawić parametry i włączyć autoTrading. Cała trudność zaczyna się dalej: bez znajomości MQL5 nie zweryfikujesz, co robot naprawdę robi w środku, jak reaguje na poślizg, czy nie używa skrycie metody Martingale. Sprzedawcy EA na MQL5 Market często chowają najważniejsze parametry przed użytkownikiem. Bez umiejętności otwarcia kodu źródłowego (a większość komercyjnych EA jest zamknięta) jesteś skazany na zaufanie. Dlatego rekomenduję inwestycję w naukę podstaw języka — kilka tygodni dokumentacji wystarczy, żeby zrozumieć, co czytasz.

Dlaczego Strategy Tester pokazuje rewelacyjne wyniki, a żywy handel pokazuje stratę?

Bo Strategy Tester jest narzędziem optymalizacji, a nie predykcji. Jeśli przeczeszesz pełną historię danych w poszukiwaniu parametrów dających najlepszą krzywą kapitału, niemal na pewno znajdziesz kombinację, która daje świetny wynik na tej konkretnej próbce — ale tylko na niej. To zjawisko nazywa się curve fitting i jest matematyczną pewnością. Antidotum: dzielenie danych na okres do optymalizacji (in-sample, np. 2018–2022) i okres do weryfikacji (out-of-sample, np. 2023–2024), na którym uruchamiasz EA już bez tweakowania parametrów. Dopiero spójny wynik na okresie walidacyjnym uprawdopodabnia, że nie patrzysz na artefakt. Walk-forward analysis idzie krok dalej — przesuwa okno trenujące i testujące przez całą historię.

Czy do EA niezbędny jest VPS?

Dla strategii reagującej w ułamku sekundy — tak, bez dyskusji. Skalper, którego EA wysyła kilkadziesiąt zleceń dziennie, traci przewagę za każdym razem, gdy domowe łącze ma dziurę albo komputer wchodzi w stan uśpienia. VPS umieszczony w tej samej serwerowni co serwer brokera potrafi ściąć opóźnienie z pięćdziesięciu milisekund do kilku. Dla strategii pozycyjnej, która robi jedną transakcję na tydzień, VPS jest komfortem, nie wymogiem — domowy desktop z UPS-em wystarczy. Koszt VPS-a u dostawców specjalizujących się w MT to dziś rząd 15–50 EUR miesięcznie. Niektórzy brokerzy oferują darmowy VPS od pewnego progu depozytu lub obrotów.

Pogłębij temat · pełny przewodnik