EN
Artykuły / 10.4 Ochrona konta
Ochrona kontaszkic

Blokada handlu zamiast usuwania bota z wykresu - dlaczego nigdy ExpertRemove()

14.11.20264 min czytania

W skrócie: gdy bot ma przestać handlować (limit dzienny, drawdown albo Twoja decyzja), nie usuwaj go z wykresu, ani ręcznie, ani funkcją ExpertRemove() w kodzie. Bot usunięty z wykresu przestaje też pilnować otwartych pozycji: przesuwania SL na cenę wejścia, trailingu, zamknięcia o 22:45 i zamknięcia przed weekendem. Bot ma zablokować nowe wejścia, a otwarte pozycje prowadzić dalej do końca.

Blokada handlu kontra usunięcie bota

Co się dzieje, gdy bot się usuwa

ExpertRemove() kończy działanie EA na wykresie. Wygląda to na bezpieczne “wyłącz się po limicie”, ale:

  • otwarta pozycja zostaje bez opieki. SL i TP u brokera działają dalej, ale break even (SL na cenie wejścia), trailing, częściowe zamknięcie i zamknięcie o godzinie są zapisane w kodzie bota,
  • pozycja zostaje na noc albo na weekend, chociaż strategia zakładała zamknięcie o 22:45 albo w piątek,
  • nikt nie wie, że bota nie ma. Wykres wygląda normalnie, brakuje tylko ikonki w rogu. Po tygodniu okazuje się, że bot nie handlował od wtorku,
  • bota trzeba wgrać z powrotem ręcznie, z właściwym plikiem .set, i łatwo wtedy o złe ustawienia.

Dlatego w moich zasadach ten punkt jest twardy: nigdy ExpertRemove(). Blokuję handel, a bot zostaje na wykresie.

Algo Trading OFF też nie jest blokadą

Przycisk “Algo Trading” w terminalu wydaje się idealny. Trzeba jednak wiedzieć, co dokładnie blokuje:

  • EA nie wyśle zleceń przez OrderSend,
  • zamknięcie pozycji przez bota też nie przejdzie, więc trailing i zamknięcie o godzinie przestają działać,
  • zewnętrzne programy połączone z terminalem (np. skrypty i asystenci AI sterujący MT5) mogą dalej zamykać pozycje przy wyłączonym Algo Trading. Sprawdziłem to na żywo.

Algo Trading OFF zostawiam jako wyłącznik awaryjny dla człowieka. Ochronę konta robi kod bota.

Jak wygląda prawidłowa blokada

Zasada jest jedna: blokada zatrzymuje nowe pozycje i nie rusza zarządzania otwartymi.

W kodzie to jedna bramka przed każdym wejściem:

// bramka wejścia - wszystkie powody blokady w jednym miejscu
bool CanOpenNewPosition(int direction)
{
   if(g_dailyGuard.IsBlockedToday())   return false; // limit dzienny
   if(g_ddGuard.IsBlocked())           return false; // drawdown konta
   if(TB_Blocked(direction))           return false; // blokada z panelu
   if(!g_session.IsEntryWindow())      return false; // poza oknem godzin
   return true;
}

Zarządzanie pozycją (ManageOpenPositions(): break even, trailing, zamknięcie o godzinie) bot wywołuje zawsze, niezależnie od blokady.

Skąd bierze się blokada

Źródło Kto ustawia Do kiedy
Limit dzienny straty albo zysku bot do końca dnia serwera
Maksymalny drawdown konta bot do ręcznego odblokowania
Seria strat, pauza bot N godzin albo dni
Blokada z panelu trader zdalnie do końca dnia albo odblokowania
Okno godzin, newsy, weekend bot do następnego okna

Blokada zdalna z panelu

Przy flocie kilkudziesięciu kont nie da się klikać w każdy wykres. Dlatego blokadę włączam z mojego panelu monitoringu Flota MT5. To strona w przeglądarce, która pokazuje wszystkie konta z kilku komputerów w jednej tabeli (opis i zrzut: Panel monitoringu floty MT5).

Panel Flota MT5 (dane przykładowe)

Blokada z panelu działa tak:

  1. Przycisk “Zablokuj handel” w panelu zapisuje na komputerze z terminalem mały plik z numerem konta i dzisiejszą datą (we wspólnym folderze plików MT5, Common\Files).
  2. Każdy bot co 60 sekund sprawdza, czy taki plik jest.
  3. Jeśli plik pasuje (to konto, dzisiejsza data), bot nie otwiera nowych pozycji i co godzinę zapisuje w logu “wejście odrzucone: blokada panelu”.
  4. Następnego dnia plik przestaje działać sam. Żeby odblokować wcześniej, panel przenosi plik do kosza.
  5. Brak pliku albo błąd odczytu oznacza brak blokady i bot działa normalnie. Tak jest celowo, żeby uszkodzony plik nie zatrzymał całej floty.

Bot wszedł mimo blokady

Blokada działa tylko w botach, które mają ją wpiętą w kod (pełny opis przypadku: Bot otworzył pozycję mimo blokady z panelu). Jeden ze starszych botów otworzył pozycję mimo blokady z panelu, bo nie miał bramki TB_Blocked(). Od tamtej pory przy każdym wdrożeniu sprawdzam, które boty na koncie obsługują blokadę. Panel powinien też pokazywać wykresy, które jej nie respektują.

Blokada musi przetrwać restart

Blokada, którą ustawił sam bot (limit dzienny, drawdown), musi zostać po:

  • restarcie EA (zmiana inputów, przeładowanie wykresu),
  • restarcie terminala,
  • awarii zasilania. MT5 zapisuje zmienne globalne na dysk dopiero przy zamknięciu terminala, więc po utracie prądu ich nie ma. Pewniej jest odtworzyć stan z historii transakcji (np. wynik dnia z transakcji od północy serwera) albo zapisywać go do pliku przy każdej zmianie.

Checklista

  • w kodzie nie ma ExpertRemove(),
  • jedna funkcja-bramka przed każdym wejściem,
  • zarządzanie otwartymi pozycjami działa także przy blokadzie,
  • blokada zostaje po restarcie i po awarii zasilania,
  • log i mail przy włączeniu blokady (raz, nie co tik),
  • blokada zdalna wpięta we wszystkie boty na koncie (sprawdzić przy wdrożeniu),
  • wiem, co u mnie robi Algo Trading OFF i jakie inne narzędzia mają dostęp do konta.

Powiązane

Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.

Dalej w rozdziale

233

Dzienny limit straty w bocie MT5 - jak go liczyć i wdrożyć

Jak działa dzienny limit straty w EA: baza dnia, saldo kontra equity, reset o północy serwera, zamknięcie pozycji i blokada do końca dnia. Na przykładach z floty botów.

234

Dzienny cel zysku w bocie - czy zatrzymywać handel po zysku?

Kiedy dzienny cel zysku pomaga (reguła konsekwencji prop firm, ochrona przed oddaniem zysku), a kiedy obcina najlepsze dni. Wersje: stop po celu, blokada po powrocie do zera, zamknięcie o godzinie.

236

Maksymalny drawdown konta - automatyczne zatrzymanie bota

Statyczny i trailing drawdown, jak liczy go prop firma i jak bot ma reagować: zmniejszanie ryzyka przy spadku, blokada nowych wejść przed granicą, odblokowanie tylko ręczne.