Blokada handlu zamiast usuwania bota z wykresu - dlaczego nigdy ExpertRemove()
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.
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).

Blokada z panelu działa tak:
- 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). - Każdy bot co 60 sekund sprawdza, czy taki plik jest.
- Jeśli plik pasuje (to konto, dzisiejsza data), bot nie otwiera nowych pozycji i co godzinę zapisuje w logu “wejście odrzucone: blokada panelu”.
- Następnego dnia plik przestaje działać sam. Żeby odblokować wcześniej, panel przenosi plik do kosza.
- 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
- Dzienny limit straty
- Maksymalny drawdown konta
- Panel monitoringu floty MT5
- Polecenia z panelu - blokada handlu zdalnie
- Algo Trading ON/OFF - co blokuje, a co nie
- Bot otworzył pozycję mimo blokady z panelu
- Pojęcia z artykułu: słowniczek, skorowidz
Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.