EN
Artykuły / 1.3 Zlecenia
Zleceniaszkic

Typy wypełnienia FOK, IOC i Return: skąd bierze się błąd 10030

14.11.20263 min czytania

W skrócie: każde zlecenie w MT5 niesie informację, jak ma być wypełnione, gdy na rynku nie ma pełnej ilości po żądanej cenie. Nie każdy symbol u każdego brokera przyjmuje każdy tryb. Bot, który na sztywno prosi o tryb nieobsługiwany, dostaje błąd 10030 (nieprawidłowy typ wypełnienia) i nie otwiera pozycji, choć kod jest poprawny.

Trzy tryby

  • FOK (fill or kill): całe zlecenie albo nic. Gdy brakuje płynności na całą ilość, serwer odrzuca zlecenie.
  • IOC (immediate or cancel): wypełnij tyle, ile da się od ręki, resztę anuluj. Przy małych lotach prywatnego tradera różnica względem FOK zwykle nie jest widoczna, bo cała ilość mieści się w ofercie.
  • Return: to, co się nie wypełniło od razu, zostaje na rynku jako zlecenie. Ten tryb ma sens przy zleceniach oczekujących i na giełdach. Przy wykonaniu rynkowym (market execution) według dokumentacji i wątków na forum bywa niedozwolony, ale źródła w tej sprawie się różnią, więc nie zakładam niczego z góry.

Jak to wygląda w praktyce

Błąd widzę zwykle po przeniesieniu bota do innego brokera albo na inny rodzaj symbolu: indeksy, kryptowaluty i akcje mają często inne dozwolone tryby niż forex. W dzienniku Experts pojawia się odrzucone zlecenie z kodem 10030, a pozycji brak. Objaw jest łudząco podobny do wielu innych przyczyn braku wejść, więc to jedna z pozycji na liście z artykułu o bocie, który nie otwiera pozycji.

Jak sprawdzić, co dopuszcza symbol

Specyfikacja symbolu zawiera pole z trybem wypełnienia, które jest maską bitową. Wartość 1 oznacza, że dozwolony jest FOK, 2 że IOC, 3 że oba. Tryb Return jest osobną właściwością zlecenia, a brak bitów FOK i IOC przy wartości 0 zdarza się na symbolach, gdzie dopuszczone jest tylko Return. Wynik zależy od brokera i od symbolu, więc sprawdzam go na koncie, na którym bot ma pracować, a nie w innym terminalu.

Jak bot ma wybierać tryb

Zamiast wpisywać tryb na stałe, bot powinien przy każdym zleceniu odczytać maskę symbolu i wybrać w ustalonej kolejności: FOK, jeśli dozwolony, w innym razie IOC, a gdy żaden nie jest ustawiony, Return. Taki wzorzec polecają też wątki na forum MQL5. Taką logikę najlepiej mieć w jednym miejscu wspólnego kodu, a nie kopiować do każdego bota, bo to rzecz, którą łatwo przepisać z błędem. Przed napisaniem własnej wersji sprawdź, czy takie rozwiązanie już masz.

[DO UZUPEŁNIENIA: konkretny przypadek bota, który u jakiegoś brokera zwracał 10030, i jak go naprawiono; bez nazwy brokera, jeśli nie chcesz jej podawać]

Czego nie robię

  • Nie przełączam trybu na ślepo, aż zlecenie przejdzie. Bez znajomości maski nie wiem, czy ominąłem problem, czy trafiłem w tryb, który daje gorsze wypełnienie.
  • Nie traktuję błędu 10030 jako awarii brokera. Zanim zgłoszę go brokerowi, sprawdzam tryb w specyfikacji symbolu i próbuję zlecenia testowego na koncie demo.
  • Nie zakładam, że ten sam tryb działa na wszystkich symbolach tego samego brokera.

Checklista

  • Przed uruchomieniem bota u nowego brokera sprawdzam tryby wypełnienia jego symboli.
  • Bot wybiera tryb z maski symbolu, a nie ze stałej.
  • Błąd 10030 w dzienniku Experts to sygnał do sprawdzenia trybu, nie do zmiany lota.
  • Po zmianie brokera robię zlecenie testowe na demo.

Powiązane

Źródła

Ostrzeżenie: opis ogólny, tryby i ich dostępność zależą od brokera i symbolu. Handel CFD wiąże się z wysokim ryzykiem utraty kapitału; nie jest to porada inwestycyjna.

Dalej w rozdziale

18

Limit zamiast zlecenia rynkowego: wejście na dotknięcie poziomu

Bot czekał na cofnięcie do poziomu i wchodził rynkowo przy pierwszym dotknięciu. Zamieniłem to na zlecenie limit i backtest na świecach M1 zgodził się z testem na tikach.

20

Zlecenia oczekujące na noc: dlaczego ich nie zostawiam

Zlecenie stop lub limit wystawione wieczorem i zostawione do rana to ryzyko, którego bot w ciągu dnia nie ma: luka, szeroki spread po przerwie, zmiana czasu i reguły prop firm. Cztery powody, dla których kasuję pendingi przed zamknięciem sesji.

21

Wygasanie zleceń oczekujących po stronie brokera

Zlecenie oczekujące może wygasnąć samo na serwerze brokera albo zależeć od sprzątania w bocie. Różnica robi się ważna, gdy terminal lub VPS padnie w trakcie dnia. Opisuję tryby GTC, DAY i z datą oraz pułapkę błędu 10022.