Home > Blog > Unsupported filling mode (errore MT5 10030)

MT5MQL5ErroriRisoluzione problemiEA

Unsupported filling mode (errore MT5 10030)

Pubblicato: 2026-07-07Lettura: circa 6 min
This article reflects information as of its publish date. EA performance figures (PF, DD, annual return) change with live trading and re-validation — check the latest on the EA pages. See the latest EA results

Unsupported filling mode (errore MT5 10030): la guida definitiva

Fino a ieri l'EA funzionava perfettamente su un altro broker, ma appena lo sposti su un nuovo conto la scheda Experts si riempie di messaggi Unsupported filling mode o OrderSend error 10030 e non riesci più a inviare nemmeno un ordine — questo è uno dei problemi più classici quando si cambia broker gestendo un EA su MT5. L'EA non è rotto e il conto non ha alcun problema. Il punto è semplicemente che la modalità di esecuzione dell'ordine (filling mode) impostata non è consentita per quel simbolo sul nuovo broker.

Questo articolo è pensato sia per chi utilizza EA su MT5 sia per chi programma in MQL5, e riunisce in un'unica guida tutto ciò che serve sapere su TRADE_RETCODE_INVALID_FILL (10030): cosa significa esattamente, il significato di FOK/IOC/RETURN, una verifica di 30 secondi e la soluzione permanente lato codice. Per un elenco completo dei codici di errore, consulta la guida generale alla risoluzione dei codici di errore MQL5/MT5.

Questo articolo fa riferimento a MT5 (build serie 4xxx) aggiornato a luglio 2026. Nomi delle schermate e diciture possono variare leggermente a seconda del broker e della build.


Cos'è il codice 10030 (TRADE_RETCODE_INVALID_FILL)

Il risultato di OrderSend() viene restituito in MqlTradeResult.retcode. Il valore 10030 = TRADE_RETCODE_INVALID_FILL è una notifica di rifiuto da parte del server, che indica che il type_filling (modalità di esecuzione) specificato nella richiesta non è consentito per quel simbolo.

Significato: la modalità di esecuzione (filling type) specificata non è supportata
Costante: TRADE_RETCODE_INVALID_FILL
Valore  : 10030
Messaggio: Unsupported filling mode / Invalid order filling type
// Esempio tipico di output nel log
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: OrderSend error 10030
2026.07.07 09:15:32.441 EA_NAME EURUSD,M15: failed market buy 0.10 EURUSD [Unsupported filling mode]

Il punto fondamentale è che capitale, lottaggio e prezzo non c'entrano nulla. Il 10030 riguarda esclusivamente il campo MqlTradeRequest.type_filling della richiesta: basta correggere quello e lo stesso ordine passerà senza problemi.

I quattro tipi di modalità di esecuzione (type_filling)

L'enumerazione ENUM_ORDER_TYPE_FILLING di MQL5 prevede quattro valori.

CostanteNome comuneSignificato
ORDER_FILLING_FOKFill or KillEsegue l'ordine solo se può essere eseguito per intero. Se su un ordine da 1 lotto c'è liquidità solo per 0.7 lotti, l'intero ordine viene annullato
ORDER_FILLING_IOCImmediate or CancelEsegue immediatamente la parte eseguibile e annulla il resto. Su 0.7 lotti eseguiti, i restanti 0.3 lotti vengono cancellati
ORDER_FILLING_RETURNReturnEsegue la parte eseguibile e la quantità residua rimane come ordine attivo in attesa di ulteriori esecuzioni. Tipico dell'esecuzione in stile borsa
ORDER_FILLING_BOCBook or CancelAccetta l'ordine solo se resta nel book in attesa (passivo); viene rifiutato se il prezzo comporterebbe un'esecuzione immediata. Esclusivo per ordini limit/stop limit (aggiunto nelle build più recenti)

Nella maggior parte degli EA forex utilizzati in pratica si trovano quasi solo FOK o IOC. RETURN ha senso nell'esecuzione di tipo borsa (Exchange execution) per azioni e futures, mentre BOC è un caso particolare per forzare ordini maker.

Perché viene considerato "non valido" — SYMBOL_FILLING_MODE

Quali modalità di esecuzione sono accettate dipende da un flag (SYMBOL_FILLING_MODE) impostato dal broker per ciascun simbolo. Da MQL5 si legge così:

long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
// Se il flag SYMBOL_FILLING_FOK è attivo, FOK è consentito
// Se il flag SYMBOL_FILLING_IOC è attivo, IOC è consentito

SYMBOL_FILLING_MODE è un campo di bit che indica quali tra FOK e IOC sono consentiti (se entrambi sono permessi, entrambi i flag sono attivi). RETURN non rientra in questo flag: la sua disponibilità dipende dalla modalità di esecuzione del simbolo (vedi sotto).

In sintesi, la logica del 10030 è semplice:

type_filling inviato dall'EA ∉ modalità di esecuzione consentite per quel simbolo → 10030

Tutto qui.


Perché compare proprio "il giorno del cambio broker"

Il motivo per cui il 10030 viene definito "l'errore classico del cambio broker" è il seguente.

  1. Le modalità di esecuzione consentite variano per broker e per simbolo. Alcuni broker consentono solo FOK sui simboli forex, altri solo IOC, altri ancora entrambi. Anche all'interno dello stesso broker, forex e CFD/azioni possono avere configurazioni diverse.
  2. Molti EA hanno il type_filling scritto in modo fisso nel codice (hardcoded). Un EA con request.type_filling = ORDER_FILLING_FOK; funzionerà per anni su un broker A che consente FOK. Poiché funziona nell'ambiente dello sviluppatore, il problema non viene mai identificato come un bug e l'EA viene distribuito così com'è.
  3. Se il broker B di destinazione non consente FOK, tutti gli ordini falliranno fin dal primo tentativo. Spesso il problema non emerge nel backtest (il comportamento del tester è più permissivo del server reale), e si manifesta solo "il giorno in cui si passa al conto reale".

In altre parole, il 10030 non è tanto un bug dell'EA quanto la conseguenza di un'ipotesi fissa sull'ambiente che viene meno. Al contrario, se l'EA viene corretto per leggere i flag consentiti dal simbolo e scegliere dinamicamente, funzionerà con qualsiasi broker (vedi il codice più avanti).

Relazione con la modalità di esecuzione (SYMBOL_TRADE_EXEMODE)

Oltre alla modalità di esecuzione dell'ordine, ogni simbolo ha una modalità di esecuzione (execution mode), che influisce su quali filling mode hanno senso.

Modalità di esecuzioneCostanteTipico diTendenza delle modalità di esecuzione
InstantSYMBOL_TRADE_EXECUTION_INSTANTAlcuni forex (spesso broker DD)Esecuzione al prezzo indicato. Mondo FOK/IOC con requotes
MarketSYMBOL_TRADE_EXECUTION_MARKETLa maggior parte di forex/CFD (broker NDD)Esecuzione a mercato. FOK o IOC (a seconda della configurazione del broker)
ExchangeSYMBOL_TRADE_EXECUTION_EXCHANGEAzioni, futuresEsecuzione inviata al book. RETURN come base
RequestSYMBOL_TRADE_EXECUTION_REQUESTLegacyEsecuzione su richiesta (oggi rara)

Le combinazioni esatte consentite dipendono dalla configurazione del server del broker, ma nella pratica è sufficiente ricordare che "per l'esecuzione Market su forex/CFD si usano FOK o IOC, mentre per i simboli di tipo borsa si presuppone RETURN". Anche la modalità di esecuzione si può verificare con SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE).


Verifica rapida in 30 secondi

① Controlla le modalità consentite per il simbolo (interfaccia MT5)

Apri Market Watch → clic destro sul simbolo → Specifiche (Specification) e controlla la riga "Filling" (Esecuzione). Verrà mostrato Fill or Kill, Immediate or Cancel, oppure entrambi. Se l'EA invia una modalità non elencata qui, il 10030 è garantito.

② Controlla i parametri di input dell'EA

Gli EA ben realizzati hanno un input come FillingType o Filling Mode. Se presente, basta modificarlo in base alla modalità consentita verificata al punto ① per risolvere il problema (nessuna modifica al codice necessaria).

③ Verifica tramite codice (per sviluppatori)

long flags = SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);
PrintFormat("%s filling: FOK=%s IOC=%s exemode=%d",
            _Symbol,
            ((flags & SYMBOL_FILLING_FOK) != 0) ? "yes" : "no",
            ((flags & SYMBOL_FILLING_IOC) != 0) ? "yes" : "no",
            (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE));

Eseguendo questo codice tramite uno script, in una sola riga si ottiene la situazione reale delle modalità consentite per quel broker e quel simbolo.


Soluzione permanente — codice MQL5 che legge i flag e seleziona automaticamente

Il modo corretto di risolvere il 10030 non è "adattare manualmente ogni volta che si cambia broker", ma far leggere all'EA stesso i flag consentiti del simbolo e far scegliere automaticamente la modalità. Ecco un'implementazione standard pronta all'uso.

Funzione di rilevamento automatico

// Restituisce la modalità di esecuzione effettivamente consentita per quel simbolo
// Ordine di priorità: FOK → IOC → RETURN (fallback per esecuzione di tipo borsa)
ENUM_ORDER_TYPE_FILLING GetFillingMode(const string symbol)
{
   long flags = SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);

   if((flags & SYMBOL_FILLING_FOK) != 0)
      return ORDER_FILLING_FOK;    // Esegue solo se è possibile l'esecuzione totale (nessuna esecuzione parziale)

   if((flags & SYMBOL_FILLING_IOC) != 0)
      return ORDER_FILLING_IOC;    // Esegue solo la parte possibile, il resto viene annullato

   return ORDER_FILLING_RETURN;    // Nessun flag = tipo borsa ecc. Invia con RETURN
}

Utilizzo con OrderSend

MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);

req.action       = TRADE_ACTION_DEAL;
req.symbol       = _Symbol;
req.volume       = lots;
req.type         = ORDER_TYPE_BUY;
req.price        = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.deviation    = 20;
req.magic        = MagicNumber;
req.type_filling = GetFillingMode(_Symbol);   // ← non hardcodato

if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
   if(res.retcode == TRADE_RETCODE_INVALID_FILL)   // 10030
      PrintFormat("Unsupported filling mode: sent=%d, allowed flags=%d",
                  (int)req.type_filling,
                  (int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE));
   else
      PrintFormat("OrderSend failed: retcode=%d", res.retcode);
}

In questo modo, lo stesso identico binario funziona sia su broker che accettano solo FOK sia su quelli che accettano solo IOC, senza bisogno di modifiche manuali a ogni cambio broker.

Se utilizzi CTrade

La libreria standard CTrade mette a disposizione SetTypeFillingBySymbol(), che imposta automaticamente la modalità di esecuzione in base ai flag consentiti dal simbolo.

#include <Trade/Trade.mqh>
CTrade trade;

int OnInit()
{
   trade.SetExpertMagicNumber(MagicNumber);
   trade.SetTypeFillingBySymbol(_Symbol);   // Legge i flag consentiti e imposta automaticamente
   return INIT_SUCCEEDED;
}

Se il 10030 è causato dal vecchio stile trade.SetTypeFilling(ORDER_FILLING_FOK); (impostazione fissa), basta sostituirlo con questa singola riga per risolvere il problema. Anche volendo specificare manualmente la modalità, si può ottenere lo stesso effetto passando il risultato di GetFillingMode() a SetTypeFilling().

Attenzione nell'uso degli ordini limit (BOC)

ORDER_FILLING_BOC (Book or Cancel) è esclusivo per ordini limit e stop limit: viene rifiutato se si specifica un prezzo che comporterebbe un'esecuzione immediata. È un errore specificarlo per un ordine a mercato, quindi non c'è motivo di includere BOC tra le opzioni per EA che operano a mercato.


Nota sui broker (nuova verifica in caso di cambio)

  • Le impostazioni delle modalità di esecuzione consentite non variano solo da broker a broker, ma anche tra simboli (gruppi di strumenti) all'interno dello stesso broker. È normale trovare configurazioni in cui il forex consente IOC ma i CFD azionari consentono solo RETURN.
  • Anche un cambio di tipo di conto o di server può modificare le impostazioni. Non solo il cambio broker, ma anche una migrazione del server all'interno dello stesso broker, un cambio di tipo di conto o un aggiornamento delle specifiche degli strumenti possono far comparire improvvisamente il 10030.
  • Come regola operativa, conviene quindi abituarsi a "verificare di nuovo la modalità di esecuzione (tramite la schermata delle specifiche o uno script) ogni volta che cambia conto, server o simbolo". Con un EA dotato di codice di rilevamento automatico, questa verifica diventa superflua.

Le informazioni specifiche del tipo "questo broker consente solo FOK per questo simbolo" diventano rapidamente obsolete a causa delle modifiche alle configurazioni server, quindi non vengono elencate in questo articolo. Verifica sempre le specifiche del simbolo sul tuo conto.


Checklist di priorità

PrioritàVerificaAzione
🚨 Prima cosaIl campo "Filling" nelle specifiche del simbolo corrisponde alla modalità impostata nell'EA?Adegua alla modalità consentita
🚨 Prima cosaL'EA ha un parametro di input FillingType?Basta modificare l'input (nessun codice necessario)
⚠️ PoiIl type_filling è hardcodato nel codice dell'EA?Sostituisci con GetFillingMode() / SetTypeFillingBySymbol()
⚠️ PoiÈ stato cambiato broker, server o tipo di conto?Dopo ogni cambiamento, verifica sempre di nuovo le specifiche
✅ Da verificareDifferenza tra modalità di esecuzione (Instant/Market/Exchange)Per gli strumenti di tipo borsa si presuppone RETURN
🛠 SviluppoIl retcode 10030 viene gestito singolarmente?Registra nel log la modalità inviata e i flag consentiti

  • Unsupported filling mode (10030 / TRADE_RETCODE_INVALID_FILL) è un rifiuto del server quando il type_filling (FOK / IOC / RETURN / BOC) dell'ordine non è consentito per quel simbolo. Capitale e lottaggio non c'entrano.
  • Le modalità consentite variano per broker e per simbolo, quindi un EA con type_filling hardcodato genera il 10030 in massa proprio il giorno del cambio broker: è questo lo scenario tipico di questo errore.
  • Per l'utente, la soluzione immediata è "controllare il campo Filling nelle specifiche del simbolo → modificare l'input dell'EA". Per lo sviluppatore, la soluzione permanente consiste nel leggere i flag di SymbolInfoInteger(SYMBOL_FILLING_MODE) e selezionare automaticamente la modalità (oppure usare CTrade::SetTypeFillingBySymbol()).

Per l'elenco completo dei codici di errore, consulta la guida generale alla risoluzione dei codici di errore MQL5/MT5. Gli EA distribuiti da FXEA365 implementano il rilevamento automatico della modalità di esecuzione e funzionano indipendentemente dal broker (elenco EA).


FAQ

D: L'EA che funzionava fino a ieri, dopo il cambio broker dà errore 10030 e non riesce più a inviare ordini. È un guasto dell'EA?

Non è un guasto. Semplicemente la modalità di esecuzione impostata dall'EA (ad esempio FOK) non è consentita per quel simbolo sul nuovo broker. Controlla il campo "Filling" nelle specifiche del simbolo e adegua l'input dell'EA (FillingType ecc.), oppure correggi il codice per il rilevamento automatico: l'EA tornerà a funzionare come prima.

D: È meglio usare FOK o IOC?

Se il simbolo consente entrambi, la differenza di comportamento emerge solo "quando la liquidità non è sufficiente". Con FOK, se non è possibile l'esecuzione totale l'intero ordine viene annullato (evitando posizioni parziali indesiderate); con IOC si mantiene la quantità eseguita (può verificarsi un'esecuzione parziale). Per i lottaggi tipici del trading forex personale, la carenza di liquidità in sé è rara, quindi in pratica la differenza è minima. Come nel codice di rilevamento automatico, dare priorità a FOK non crea problemi.

D: Nel backtest non compare, ma sul conto reale ottengo il 10030.

L'elaborazione degli ordini nello Strategy Tester non riproduce fedelmente le impostazioni del server reale, quindi un'incompatibilità nel type_filling potrebbe non emergere durante i test. Al primo avvio su conto reale o demo, confronta innanzitutto il campo Filling nelle specifiche del simbolo.

D: Con lo stesso broker, il 10030 compare per alcuni simboli e non per altri.

È un comportamento normale (e possibile). Le modalità di esecuzione consentite sono impostate a livello di singolo simbolo, quindi è comune che le coppie forex consentano IOC mentre i CFD azionari consentano solo RETURN, a seconda del gruppo di strumenti. Un EA multi-simbolo deve sempre leggere SYMBOL_FILLING_MODE per ogni singolo simbolo.

D: Non posso modificare il codice dell'EA (possiedo solo il file .ex5). Cosa posso fare?

Innanzitutto controlla se tra i parametri di input dell'EA è presente una voce relativa a FillingType. Se non c'è, quell'EA non può essere utilizzato con quel simbolo sul broker attuale. In tal caso, occorre chiedere all'autore di intervenire, oppure operare con un broker/tipo di conto che consenta la modalità di esecuzione presupposta dall'EA.

📧 Avvisi prima degli aumenti di prezzo + corso email gratuito di 5 giorni

Tutti gli EA sono a prezzo di lancio e salgono a scatti con le vendite. Ricevi un avviso prima di ogni aumento, più un'email al giorno su trading algoritmico, lettura dei backtest e scelta del broker.

* Privacy rigorosamente protetta. Potete cancellarvi in qualsiasi momento.

Commenti e domande