Wygasanie zleceń oczekujących po stronie brokera
W skrócie: zlecenie oczekujące (stop, limit) ma czas ważności. Jeśli bot kasuje je sam o ustalonej godzinie, to cała ochrona zależy od tego, że terminal i VPS wtedy działają. Wygasanie ustawione u brokera działa nawet wtedy, gdy bota nie ma. Dlatego w botach ustawiam czas ważności na serwerze, a sprzątanie w kodzie zostawiam jako drugą linię.
Trzy tryby ważności
W MT5 zlecenie oczekujące może mieć jeden z trzech czasów ważności:
| Tryb | Co się dzieje |
|---|---|
| GTC (dobre do odwołania) | zlecenie żyje, dopóki ktoś go nie usunie |
| DAY (do końca dnia) | serwer kasuje je z końcem dnia handlowego |
| z konkretną datą | serwer kasuje je w podanej chwili |
Tylko pierwszy tryb zostawia sprzątanie botowi. W pozostałych kasuje serwer, więc zlecenie znika także wtedy, gdy terminal jest wyłączony.
Dlaczego to ma znaczenie: awaria w środku dnia
W jednej z moich klas bibliotecznych zlecenia stop były kiedyś wystawiane jako GTC, a bot kasował je o ustalonej godzinie. Przy normalnej pracy wszystko wyglądało dobrze. Ale gdyby VPS padł przed tą godziną i nie wstał do końca dnia, zlecenie zostałoby przez całą noc i mogło się uruchomić na nieaktualnym setupie, już w innych warunkach rynku. Po audycie zmieniłem tryb na DAY. Moja zasada jest prosta: zlecenia oczekujące nie przechodzą na następny dzień (pending na noc to źródło luk i zleceń w nieoczekiwanych cenach). Codzienne zachowanie nie zmieniło się, bo bot i tak sprzątał zlecenia o swojej godzinie. Zmieniła się tylko ochrona na wypadek awarii.
Wygasanie z datą: bot z limitem
W bocie, który wchodzi zleceniem limit na poziomie z wybicia (wejście na dotknięcie poziomu), ustawiam wygaśnięcie na godzinę graniczną wejść. Limit znika u brokera nawet po awarii terminala. Pozycja otwarta z tego limitu nie ma już czasu ważności: SL i TP pilnuje broker, a zamknięcie o godzinie robi bot.
Pułapka: wygaśnięcie za blisko (błąd 10022)
Przy wygasaniu z datą broker może odrzucić zlecenie, jeśli czas ważności jest za blisko chwili wystawienia. W teście 10 zleceń zostało odrzuconych z kodem 10022. Dlatego bot nie wystawia limitu w ostatnich trzech minutach przed wygaśnięciem. Minimalny odstęp zależy od brokera, więc nie traktuj tych trzech minut jako reguły ogólnej: sprawdź w dzienniku, jak odpowiada Twój serwer.
W Testerze wygasanie działa, więc ten błąd widać też na backteście. To dobra okazja, żeby wychwycić go przed uruchomieniem na koncie (bot nie otwiera pozycji).
Co zrobić w swoim bocie
- Wybierz tryb DAY albo z datą, zamiast GTC.
- Zostaw sprzątanie w kodzie jako drugą linię (kasowanie o godzinie zamknięcia).
- Przy trybie z datą zostaw margines od chwili wygaśnięcia i obsłuż odrzucenie zlecenia w logu.
- Przetestuj awarię: w Testerze zatrzymaj bota przed godziną sprzątania i sprawdź, czy zlecenie znika.
- Pamiętaj o zasadzie “wyłączenie kontra blokada”: usunięcie bota nie usuwa zleceń (wyłączenie a blokada).
[DO UZUPEŁNIENIA: czy zdarzyło się, że zlecenie GTC przeżyło noc na koncie live i co z tego wyszło]
Checklista
- zlecenia oczekujące mają ważność DAY albo z datą, nie GTC,
- godzina graniczna wejść ustawiona z marginesem od wygaśnięcia,
- obsługa odrzucenia (kod 10022) w logu,
- sprzątanie w kodzie jako druga linia,
- sprawdzone, co się dzieje przy zatrzymaniu bota przed godziną sprzątania.
Powiązane
- Limit zamiast zlecenia rynkowego
- Luka cenowa: SL bez gwarancji
- Wyłączenie bota kontra blokada handlu
- 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ą.