retcode 10030
10030 — TRADE_RETCODE_INVALID_FILL
Instrument nie obsługuje trybu wypełnienia podanego w zapytaniu. Kod działa u jednego brokera i przestaje u drugiego.
2 fragmenty kodu z tej strony przeszły przez kompilator MetaEditor build 6090, 2026-08-05.
CTrade::OrderSend: market buy 0.10 EURUSD [unsupported filling mode]Co ten kod znaczy
Pole type_filling w zapytaniu określa, co serwer ma zrobić, jeśli nie da się wypełnić zlecenia w całości po żądanej cenie. Nie każdy instrument u każdego brokera obsługuje wszystkie tryby — i to jest najczęstsza przyczyna sytuacji, w której ten sam kod chodzi na jednym rachunku, a na drugim nie.
| Tryb | Znaczenie |
|---|---|
ORDER_FILLING_FOK | wypełnij w całości albo odrzuć |
ORDER_FILLING_IOC | wypełnij ile się da, resztę anuluj |
ORDER_FILLING_RETURN | wypełnij ile się da, reszta zostaje jako zlecenie |
ORDER_FILLING_BOC | tylko jako zlecenie pasywne w arkuszu |
Jak zapytać instrument, co obsługuje
Właściwość SYMBOL_FILLING_MODE zwraca maskę bitową. Sprawdza się ją iloczynem bitowym, nie porównaniem.
ENUM_ORDER_TYPE_FILLING DobierzWypelnienie(const string symbol)
{
long dozwolone = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
if((dozwolone & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK)
return ORDER_FILLING_FOK;
if((dozwolone & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
return ORDER_FILLING_IOC;
//--- gdy maska jest pusta, instrument działa w trybie zwrotu
return ORDER_FILLING_RETURN;
}Jeśli używasz klasy CTrade
CTrade ma metodę, która ustawia tryb raz na całą instancję:
#include <Trade\Trade.mqh>
CTrade handel;
int OnInit()
{
handel.SetTypeFillingBySymbol(_Symbol);
return INIT_SUCCEEDED;
}To załatwia sprawę dla eksperta pracującego na jednym instrumencie. Przy pracy wielosymbolowej trzeba ustawiać tryb przed każdą operacją na innym symbolu.
Gdy kod działa u jednego brokera, a u drugiego nie
Ten kod jest najczęstszym objawem szerszego problemu: ustawień wpisanych na sztywno zamiast odczytanych z instrumentu. Opisaliśmy go osobno przy pułapkach CTrade.