Unsupported filling mode (errore MT5 10030)
Contenuti
- Cos'è il codice 10030 (TRADE_RETCODE_INVALID_FILL)
- I quattro tipi di modalità di esecuzione (type_filling)
- Perché viene considerato "non valido" — SYMBOL_FILLING_MODE
- Perché compare proprio "il giorno del cambio broker"
- Relazione con la modalità di esecuzione (SYMBOL_TRADE_EXEMODE)
- Verifica rapida in 30 secondi
- ① Controlla le modalità consentite per il simbolo (interfaccia MT5)
- ② Controlla i parametri di input dell'EA
- ③ Verifica tramite codice (per sviluppatori)
- Soluzione permanente — codice MQL5 che legge i flag e seleziona automaticamente
- Funzione di rilevamento automatico
- Utilizzo con OrderSend
- Se utilizzi CTrade
- Attenzione nell'uso degli ordini limit (BOC)
- Nota sui broker (nuova verifica in caso di cambio)
- Checklist di priorità
- Riepilogo
- 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?
- D: È meglio usare FOK o IOC?
- D: Nel backtest non compare, ma sul conto reale ottengo il 10030.
- D: Con lo stesso broker, il 10030 compare per alcuni simboli e non per altri.
- D: Non posso modificare il codice dell'EA (possiedo solo il file .ex5). Cosa posso fare?
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.
| Costante | Nome comune | Significato |
|---|---|---|
ORDER_FILLING_FOK | Fill or Kill | Esegue 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_IOC | Immediate or Cancel | Esegue immediatamente la parte eseguibile e annulla il resto. Su 0.7 lotti eseguiti, i restanti 0.3 lotti vengono cancellati |
ORDER_FILLING_RETURN | Return | Esegue la parte eseguibile e la quantità residua rimane come ordine attivo in attesa di ulteriori esecuzioni. Tipico dell'esecuzione in stile borsa |
ORDER_FILLING_BOC | Book or Cancel | Accetta 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.
- 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.
- 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'è. - 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 esecuzione | Costante | Tipico di | Tendenza delle modalità di esecuzione |
|---|---|---|---|
| Instant | SYMBOL_TRADE_EXECUTION_INSTANT | Alcuni forex (spesso broker DD) | Esecuzione al prezzo indicato. Mondo FOK/IOC con requotes |
| Market | SYMBOL_TRADE_EXECUTION_MARKET | La maggior parte di forex/CFD (broker NDD) | Esecuzione a mercato. FOK o IOC (a seconda della configurazione del broker) |
| Exchange | SYMBOL_TRADE_EXECUTION_EXCHANGE | Azioni, futures | Esecuzione inviata al book. RETURN come base |
| Request | SYMBOL_TRADE_EXECUTION_REQUEST | Legacy | Esecuzione 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à | Verifica | Azione |
|---|---|---|
| 🚨 Prima cosa | Il campo "Filling" nelle specifiche del simbolo corrisponde alla modalità impostata nell'EA? | Adegua alla modalità consentita |
| 🚨 Prima cosa | L'EA ha un parametro di input FillingType? | Basta modificare l'input (nessun codice necessario) |
| ⚠️ Poi | Il 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 verificare | Differenza tra modalità di esecuzione (Instant/Market/Exchange) | Per gli strumenti di tipo borsa si presuppone RETURN |
| 🛠 Sviluppo | Il retcode 10030 viene gestito singolarmente? | Registra nel log la modalità inviata e i flag consentiti |
Riepilogo
Unsupported filling mode(10030 / TRADE_RETCODE_INVALID_FILL) è un rifiuto del server quando iltype_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 usareCTrade::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.
Correlati
📧 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.