New

Complete Suite: all 11 tools. 5 new Premium desks inside.All 11 tools $557.98 one by one

$557.98 one by one $97 once Save $460.98Get the SuiteGet it

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.

10030

TRADE_RETCODE_INVALID_FILL

Invalid order filling type

Cause and fix for 10030

What MQL5 says

10030 TRADE_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.

Before
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);
  }
After
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

Method and privacy

Method: The constant and the description are MQL5's reference table of trade server return codes, read 22 October 2026. The MQL5 code compiles in MetaEditor 5 with no errors or warnings; it is an example to adapt and was not run against a trade server.

Calculations run entirely in your browser — nothing you type is uploaded. Your last numbers stay in this browser so you can pick up where you left off; Forget them clears them. A link with your numbers carries them after the # sign, which browsers do not send to servers, and the page takes them out of the address before any analytics loads. Copy and download actions save your calculation locally. The site may record coarse tool actions under its privacy policy, without inputs, results, file contents or filenames.

Read a whole MT5 EA's source

Goes deeper

Limits and trading risk

These tools calculate from your inputs, supported historical records or explicitly labelled teaching examples. They do not verify a live account, predict future returns or confirm that a broker or prop-firm rule has been met. Missing costs, floating losses and changed market conditions can materially change outcomes. Trading can lose the capital committed to it; check the stated method and your account specifications.

Read the risk disclosure