EN
Artykuły / 19.2 Pod maską
Pod maskąszkic

Cykl życia bota w MT5: OnInit, OnTick, OnTimer, OnDeinit

15.11.20263 min czytania

W skrócie: bot w MT5 nie ma własnej pętli. Terminal sam wywołuje jego funkcje: raz przy starcie, potem przy zdarzeniach (tik, timer, transakcja), na końcu przy zdjęciu. Najwięcej kłopotów robią dwie rzeczy: bot wczytuje się od nowa częściej, niż się spodziewasz, a tiki mogą się gubić, gdy poprzednie wywołanie jeszcze trwa.

Start: OnInit

Po wrzuceniu bota na wykres terminal woła OnInit. Tu bot wczytuje ustawienia, tworzy uchwyty wskaźników, sprawdza symbol i odtwarza stan. Jeśli zwróci błąd inicjalizacji, bot się nie uruchamia i w zakładce Experts widać powód. Dlatego w OnInit sprawdzam wszystko, co może pójść źle: czy symbol ma historię, czy dane wejściowe mają sens, czy konto pozwala na handel. Bot, który ruszył z błędnym inputem, robi więcej szkody niż bot, który się nie uruchomił.

Praca: OnTick, OnTimer i reszta

OnTick wywoływany jest przy nowym tiku symbolu wykresu. Funkcja działa w jednym wątku: dopóki się nie zakończy, kolejne tiki tego bota nie wywołują nowego przebiegu. Przy ciężkich obliczeniach część tików przepada. Dla bota na świecy to zwykle bez znaczenia, dla zarządzania pozycją (BE, trailing) już tak. Dlatego ciężką logikę robię raz na nową świecę, a w tiku tylko tanie sprawdzenia (opis: nowa świeca w EA).

Gdy rynek stoi (weekend, przerwa dobowa), tików nie ma i OnTick milczy. Jeśli bot ma coś robić niezależnie od tików, na przykład zamknąć pozycję o 22:45 albo sprawdzić stan co minutę, używa OnTimer, uruchamianego przez ustawienie timera w OnInit. Timer działa też bez ruchu ceny. Do tego dochodzi OnTradeTransaction, wołany przy zdarzeniach handlowych (zlecenie, deal), którego używam do aktualizacji stanu po zamknięciu pozycji.

Koniec: OnDeinit i powód zdjęcia

OnDeinit dostaje kod powodu. Najczęstsze: bot zdjęty z wykresu, wykres zamknięty, terminal zamknięty, zmiana symbolu lub interwału, zmiana parametrów, ponowna kompilacja, zmiana konta. Tu zwalniam uchwyty wskaźników, usuwam obiekty z wykresu i zapisuję stan, który ma przeżyć.

Pułapka: zmiana interwału wykresu albo parametrów to nie “przełączenie”, tylko pełne zdjęcie bota i założenie od nowa, czyli OnDeinit, potem OnInit. Wszystko, co trzymałem w zmiennych bota, znika. Jeżeli licznik strat z dnia albo flaga “blokada do końca dnia” żyje tylko w pamięci, po kliknięciu innego interwału bot o niej nie wie. Stan, który musi przetrwać, trzymam poza zmiennymi bota: w zmiennych globalnych terminala, w pliku albo odtwarzam z historii transakcji. Tak samo przy restarcie terminala (opis i skutki awarii zasilania: zmienne globalne gasną przy utracie zasilania).

Czego bot nie powinien robić

Nie usuwam bota samego z siebie funkcją usunięcia eksperta. Gdy warunki handlu są złe (limit dzienny, drawdown), bot dalej działa, tylko blokuje nowe wejścia i pozostaje gotowy do zarządzania otwartą pozycją. Zdjęty bot nie zamknie nic, a ktoś na telefonie może nie zauważyć, że pozycja została bez opieki. Różnicę opisuję w artykule wyłączenie bota kontra blokada handlu.

Checklista

  • Czy OnInit sprawdza symbol, historię i sensowność inputów i kończy się błędem, gdy coś jest nie tak?
  • Czy ciężkie obliczenia są raz na świecę, a nie w każdym tiku?
  • Czy rzeczy czasowe (zamknięcie o ustalonej godzinie) mają timer, a nie liczą na tik?
  • Czy stan, który ma przeżyć zmianę interwału i restart, leży poza zmiennymi bota?
  • Czy OnDeinit zwalnia uchwyty wskaźników i obiekty z wykresu?
  • Czy bot blokuje handel, zamiast się sam usuwać?

Powiązane

Źródła

  • Dokumentacja MQL5, “Event Handling Functions” i “Reasons for deinitialization”, docs.mql5.com (sprawdzone 15.11.2026).

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.

Dalej w rozdziale

490

Jak bot wysyła zlecenie w MT5 i co odpowiada serwer - kody zwrotne po ludzku

Bot nie otwiera pozycji, tylko prosi o to serwer brokera. Jak wygląda ta prośba, jak czytać kod zwrotny i które odpowiedzi (brak cen, złe stopy, brak środków) wymagają czekania, a które poprawki.

494

Tester kontra live: różnice w kodzie bota, przez które wynik się rozjeżdża

Bot może sprawdzić, że działa w Testerze, i zachować się inaczej niż na koncie. Opisuję, co faktycznie różni oba tryby, dlaczego nie robię rozgałęzień w kodzie i jak porównuję test z realnym tygodniem.