Typy wypełnienia FOK, IOC i Return: skąd bierze się błąd 10030
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
- Limit zamiast zlecenia rynkowego
- Luka cenowa: SL bez gwarancji
- Wygasanie zleceń oczekujących po stronie brokera
- Ten sam bot u trzech brokerów
- Słowniczek: typy wypełnienia; skorowidz: skorowidz
Źródła
- MQL5 Book, “Execution and filling modes”: https://www.mql5.com/en/book/automation/experts/experts_execution_filling (sprawdzone 14.11.2026)
- Dyskusja na forum MQL5 o błędzie 10030 u jednego z brokerów: https://www.mql5.com/en/forum/508038 (sprawdzone 14.11.2026)
- Dyskusja na forum MQL5 o doborze trybu z maski symbolu: https://www.mql5.com/en/forum/58514/page2 (sprawdzone 14.11.2026)
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.