MT5 error 10030: Invalid order filling type
Choose Fill or Kill or Immediate or Cancel from the symbol's SYMBOL_FILLING_MODE flags, and Return otherwise.
Updated 22 October 2026. Runs in your browser; nothing you type is uploaded.
The number after retcode= in MT5's Experts or Journal tab. 41 codes, as MQL5's reference words them.
What MQL5 says
10030TRADE_RETCODE_INVALID_FILL- Invalid order filling type
From MQL5's table of trade server return codes, read 22 October 2026. An Expert Advisor finds it in MqlTradeResult.retcode; the Experts and Journal tabs print it.
What causes it
The order's type_filling (FOK, IOC or RETURN) is one the symbol does not allow; read SYMBOL_FILLING_MODE instead of hard-coding it.
The fix in MQL5
Choose Fill or Kill or Immediate or Cancel from the symbol's SYMBOL_FILLING_MODE flags, and Return otherwise; MQL5 allows Return in every execution mode except Market execution. CTrade's Buy() and Sell() make this choice themselves on Market-execution symbols, so 10030 mostly comes from requests built by hand.
void OpenBuy(const double lots)
{
MqlTradeRequest req = {};
MqlTradeResult res = {};
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = lots;
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.type_filling = ORDER_FILLING_FOK; // hard-coded: this broker's symbol may not list it
if(!OrderSend(req, res))
Print("OrderSend failed: ", res.retcode);
}ENUM_ORDER_TYPE_FILLING FillingFor(const string symbol)
{
const long modes = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
if((modes & SYMBOL_FILLING_FOK) == SYMBOL_FILLING_FOK)
return(ORDER_FILLING_FOK);
if((modes & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
return(ORDER_FILLING_IOC);
return(ORDER_FILLING_RETURN); // allowed in every mode except Market execution
}
void OpenBuy(const double lots)
{
MqlTradeRequest req = {};
MqlTradeResult res = {};
req.action = TRADE_ACTION_DEAL;
req.symbol = _Symbol;
req.volume = lots;
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.type_filling = FillingFor(_Symbol);
if(!OrderSend(req, res))
Print("OrderSend failed: ", res.retcode, " ", res.comment);
}Both compile in MetaEditor 5 with no errors or warnings. Adapt them to your EA; they were not run against a trade server.
Other MT5 errors
- MT5 error 10004: Requote
- MT5 error 10006: Request rejected
- MT5 retcode 10009: Request completed
- MT5 error 10013: Invalid request
- MT5 error 10014: Invalid volume in the request
- MT5 error 10015: Invalid price in the request
- MT5 error 10016: Invalid stops in the request
- MT5 error 10017: Trade is disabled
- MT5 error 10018: Market is closed
- MT5 error 10019: There is not enough money to complete the request
- MT5 error 10021: There are no quotes to process the request
- MT5 error 10022: Invalid order expiration date in the request
- MT5 error 10026: Autotrading disabled by server
- MT5 error 10027: Autotrading disabled by client terminal
- MT5 error 10031: No connection with the trade server
- MT5 error 10044: The request is rejected, because the "Only position closing is allowed" rule is set for the symbol
- MT5 error 10046: The request is rejected, because the "Opposite positions on a single symbol are disabled" rule is set for the trading account.
Read a whole MT5 EA's source
- MTR FullSystemEA (MQL5 source) The full MQL5 source of a production MT5 EA for XAUUSD M5 (hedge-grid and recovery): 21 files, 16,923 lines. $49 once.