Home > Blog > Market closed (10018 / errore 132): come risolvere

MT5MQL5ErroriRisoluzione problemiEA

Market closed (10018 / errore 132): come risolvere

Pubblicato: 2026-07-07Lettura: circa 8 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

Come risolvere definitivamente Market closed (MT5/MQL5)

Quando nel log del tuo EA compare Market closed o market is closed, la spiegazione "è normale, è weekend" copre solo metà dei casi. Questo errore mette in difficoltà moltissimi trader perché compare anche in pieno giorno feriale, oppure solo su un simbolo specifico mentre su altri gli ordini passano tranquillamente.

La causa non è solo il "weekend": entrano in gioco anche la sessione di trading specifica del simbolo (le pause giornaliere di oro o indici azionari), lo scarto tra l'ora del server del broker e la tua ora locale, e le restrizioni sulla modalità di trading del simbolo (come close-only). Questo articolo è pensato sia per chi usa un EA su MT5 sia per chi sviluppa EA in MQL5, e raccoglie in modo definitivo cosa significa realmente Market closed, le sue 6 cause, una diagnosi rapida in 30 secondi e la prevenzione permanente lato codice. Per l'elenco completo dei codici di errore, consulta la guida completa ai codici di errore MQL5 / MT5.

Questo articolo fa riferimento a MT5 (build serie 4xxx) a luglio 2026. Gli orari di sessione e i nomi delle schermate possono variare a seconda del broker e della build.


Cos'è Market closed (differenza tra 10018 e 132)

Il codice che indica "il mercato è chiuso" è diverso tra MT5 e MT4 (MQL4). Interpretalo in base alla piattaforma che stai usando e a dove hai rilevato il valore.

① TRADE_RETCODE_MARKET_CLOSED = 10018 (MT5 / codice di ritorno di OrderSend())

Il risultato di un ordine inviato con OrderSend() in MQL5 viene restituito in MqlTradeResult.retcode. Il codice 10018 indica che il server di trading ha rifiutato l'ordine perché "questo simbolo è al momento fuori dall'orario di trading". Non è un errore interno di MT5, ma una notifica di rifiuto proveniente dal server del broker.

Significato: mercato chiuso (Market is closed)
Costante: TRADE_RETCODE_MARKET_CLOSED
Valore  : 10018
// Esempio tipico riscontrabile nel log
2026.07.06 23:05:11.204 EA_NAME XAUUSD,M5: OrderSend error 10018 [Market closed]

② ERR_MARKET_CLOSED = 132 (MT4 / GetLastError() in MQL4)

Su MT4 (MQL4), quando OrderSend() fallisce, GetLastError() restituisce 132. Il significato è identico a 10018: "mercato chiuso". Se usi in parallelo un EA per MT4, la stessa causa si manifesta come 10018 su MT5 e 132 su MT4.

Significato: mercato chiuso (Market is closed)
Costante: ERR_MARKET_CLOSED (MQL4)
Valore  : 132

Riepilogo pratico:

PiattaformaDove si rilevaValore
MT5 (MQL5)MqlTradeResult.retcode / CTrade.ResultRetcode()10018
MT4 (MQL4)GetLastError() dopo il fallimento di OrderSend()132

In entrambi i casi la causa di fondo è la stessa: "è stato inviato un ordine al di fuori della sessione di trading del server (oppure il trading su quel simbolo è limitato)". Anche il rimedio è comune, quindi lo trattiamo insieme di seguito.


Diagnosi rapida in 30 secondi

Prima di riavviare l'EA a caso, controllando questi 4 punti puoi già individuare la causa più probabile.

  1. Controlla la sessione di trading del simbolo — nel Market Watch, clic destro sul simbolo interessato → "Specifiche" → "Sessioni di trading". Vi troverai gli orari di trading disponibili per ciascun giorno della settimana (in ora server). Se l'orario attuale è fuori da questa fascia, hai già la risposta.
  2. Verifica l'ora del server — l'orario mostrato nella parte superiore della finestra Market Watch è l'ora del server del broker. La valutazione della sessione si basa su questo orario, non sull'orologio del tuo PC. È normale che sia sfasato di diverse ore rispetto all'ora italiana.
  3. Verifica la modalità di trading — nella stessa schermata "Specifiche", controlla che il campo "Trading" non sia impostato su qualcosa di diverso da Full access (ad esempio Disabled o Close only). In tal caso, i nuovi ordini vengono rifiutati anche durante la sessione.
  4. Prova con un altro simbolo — se lo stesso EA o lo stesso ordine manuale funziona su una coppia FX principale come EURUSD, allora il problema non riguarda il conto o l'EA, ma la sessione/le restrizioni di quel simbolo specifico.

Cause e soluzioni (6 casistiche)

① Weekend o festivo: l'intero mercato è chiuso

Sintomo: l'errore compare di sabato, domenica, oppure durante le festività di fine anno o a Natale. Si presenta su tutti i simboli.

Causa: il mercato Forex resta generalmente chiuso dalla chiusura del venerdì all'apertura del lunedì, in ora server. Nei giorni festivi (Capodanno, Natale, ecc.) il mercato può restare chiuso o operare con orari ridotti anche se è un giorno feriale. Se l'EA tenta di inviare ordini nel weekend per via della gestione delle barre o del timeframe, gli errori 10018/132 si ripetono in serie.

Soluzione:

  1. L'errore in sé è innocuo. Si risolve automaticamente alla riapertura del mercato
  2. Se non vuoi che il log si riempia di errori, imposta nell'EA un controllo su giorno/sessione per evitare direttamente l'invio dell'ordine (vedi codice più avanti)
  3. Il calendario delle festività varia da broker a broker: controlla sempre gli annunci ufficiali sulle chiusure del tuo broker

② Fuori dalla sessione di trading specifica del simbolo (pausa giornaliera)

Sintomo: l'errore compare anche in giorno feriale, ma solo su simboli specifici (oro, argento, CFD su indici azionari, energia, ecc.). Si presenta quasi sempre nella stessa fascia oraria ogni giorno.

Causa: le coppie FX sono negoziabili quasi 24 ore su 24 nei giorni feriali, ma i metalli preziosi e i CFD su indici azionari hanno pause di trading giornaliere che vanno da qualche decina di minuti a diverse ore. Queste pause sono legate alla manutenzione della borsa dell'asset sottostante o al rollover, e gli orari variano a seconda del broker e del simbolo. Se l'EA invia ordini durante questa pausa, si ottiene l'errore 10018.

Soluzione:

  1. Verifica in "Specifiche → Sessioni di trading" l'esatta fascia di pausa per quel simbolo (l'orario riportato qui è l'unica informazione affidabile: non fidarti degli orari letti su altri blog, perché variano da broker a broker)
  2. Usa il filtro orario dell'EA (TradeStartHour/TradeEndHour, ecc.) per evitare la fascia di pausa
  3. Chi sviluppa EA può controllare SymbolInfoSessionTrade() via codice (vedi più avanti)

Va detto che le criptovalute (come BTCUSD) sono spesso negoziabili anche nel weekend presso molti broker, ma anche questo dipende dal broker. Non dare per scontato che "essendo crypto, si tratti di un mercato 24/7": verifica sempre nella schermata delle specifiche.


③ Confusione tra ora del server e ora locale

Sintomo: l'errore compare anche se "secondo le specifiche della sessione dovrebbe essere orario di trading". Frequente con broker esteri.

Causa: sia gli orari di sessione riportati nelle specifiche, sia l'orario mostrato in MT5, sono sempre espressi nell'ora del server del broker. Molti broker esteri adottano un fuso GMT+2/+3 (impostato in modo che la chiusura di New York coincida con la mezzanotte), con uno scarto di 6-7 ore rispetto all'ora italiana. Un caso tipico: quando in Italia "è ancora venerdì sera", sul server potrebbe già essere sabato.

Soluzione:

  1. Abitua ad orientarti sempre sull'orario mostrato nella finestra Market Watch (= ora server)
  2. Di norma i parametri dell'EA (come i filtri orari di trading) vanno impostati in base all'ora del server. Verifica di non averli impostati pensando all'ora italiana
  3. Nel codice, usa TimeTradeServer() (non valutare la sessione con TimeLocal())

④ Simbolo con trading disabilitato o solo in chiusura (SYMBOL_TRADE_MODE)

Sintomo: anche in orario di sessione e in giorno feriale, tutti i nuovi ordini su un simbolo specifico vengono rifiutati. A volte le chiusure di posizioni funzionano comunque.

Causa: i broker possono impostare la modalità di trading a livello di singolo simbolo.

SYMBOL_TRADE_MODESignificato
SYMBOL_TRADE_MODE_FULLNessuna restrizione (normale)
SYMBOL_TRADE_MODE_CLOSEONLYSolo chiusura consentita (niente nuovi ordini). Tipico per CFD prossimi al delisting o al cambio di scadenza
SYMBOL_TRADE_MODE_DISABLEDTrading completamente disabilitato
SYMBOL_TRADE_MODE_LONGONLY / SHORTONLYSolo acquisti / solo vendite consentite

Le impostazioni possono differire tra conto demo e conto reale, e i simboli disponibili possono variare a seconda del tipo di conto.

Soluzione:

  1. Controlla il campo "Trading" nella schermata "Specifiche"
  2. Se è impostato su Close only, rinuncia a nuove aperture e gestisci la chiusura delle posizioni esistenti. Se vuoi continuare a operare su quel simbolo, verifica se è disponibile un simbolo equivalente con scadenza o suffisso diverso (ad esempio US500.f)
  3. Se resta su Disabled, verifica con il broker se il trading è disponibile per quel tipo di conto

⑤ Subito dopo l'apertura del lunedì o la ripresa di una sessione

Sintomo: l'errore o il rifiuto dell'ordine si presenta solo nei primi minuti dopo l'apertura del mercato il lunedì, oppure subito dopo la fine di una pausa giornaliera.

Causa: c'è sempre un intervallo tra il momento in cui la sessione "si apre" e il momento in cui gli ordini possono essere eseguiti in modo stabile. Subito dopo l'apertura la liquidità è scarsa e lo spread si allarga in modo estremo, e alcuni broker non accettano ordini finché le quotazioni non iniziano a fluire regolarmente (trattandolo come mercato chiuso e rifiutando l'ordine). Sono casi tipici gli EA che generano segnali proprio all'apertura del lunedì mattina, o gli EA sull'oro che puntano sulla ripresa dopo una pausa.

Soluzione:

  1. Inserisci un filtro che eviti nuovi ordini per i primi X minuti dopo l'apertura (ad esempio AvoidMondayOpen). È proprio per questo motivo che gli EA distribuiti da questo sito hanno di default l'esclusione della fascia 0-3 del lunedì (in ora server)
  2. Usa sempre anche un filtro sullo spread (MaxSpread). Un'esecuzione con lo spread anomalo tipico dell'apertura può causare una perdita più dolorosa di un semplice errore
  3. Progetta l'EA in modo che, quando riceve 10018, non riprovi subito ma attenda la barra successiva

⑥ Sospensione del trading per notizie o eventi

Sintomo: l'errore compare temporaneamente prima o dopo la pubblicazione di dati economici importanti, oppure durante movimenti anomali su un singolo simbolo.

Causa: alcuni broker e simboli possono sospendere temporaneamente il trading (halt) o limitare i nuovi ordini in occasione di eventi rilevanti. Sui CFD su indici azionari, la sospensione può anche essere collegata a un circuit breaker scattato sul mercato dell'asset sottostante. Gli ordini inviati in questo intervallo vengono rifiutati con un errore di tipo mercato chiuso.

Soluzione:

  1. Si tratta di una situazione temporanea che si risolve dopo un po' di tempo
  2. Usando un filtro sui dati economici (il parametro UseEconomicFilter degli EA di questo sito) per bloccare i nuovi ordini prima e dopo la pubblicazione dei dati, si evitano contemporaneamente sia l'errore sia il rischio di movimenti improvvisi

Codice MQL5 per prevenire questo errore (per gli sviluppatori di EA)

L'approccio corretto per Market closed non è "gestire l'errore dopo che si è verificato", ma verificare sessione e modalità di trading prima di inviare l'ordine, e non inviarlo affatto se il mercato è chiuso. Non solo il log resta pulito, ma si evitano anche richieste inutili al server e tentativi di retry fuori controllo.

Verificare se si è dentro la sessione di trading

SymbolInfoSessionTrade() restituisce l'orario di inizio/fine (in secondi dalla mezzanotte, in ora server) della i-esima sessione per il giorno della settimana indicato. Per gestire simboli con più sessioni (ad esempio indici con una pausa giornaliera), si scorrono tutte le sessioni in un ciclo.

// Determina se l'ora attuale del server rientra nella sessione di trading di questo simbolo
bool IsTradeSessionOpen(const string symbol)
{
   MqlDateTime dt;
   TimeToStruct(TimeTradeServer(), dt);           // valutare sempre in base all'ora del server
   int now = dt.hour*3600 + dt.min*60 + dt.sec;   // secondi trascorsi dalla mezzanotte

   datetime from, to;
   for(uint i = 0; SymbolInfoSessionTrade(symbol, (ENUM_DAY_OF_WEEK)dt.day_of_week, i, from, to); i++)
   {
      int f = (int)from;                 // secondi dalla mezzanotte
      int t = (int)to;                   // la fine alle 24:00 diventa 86400
      if(now >= f && now < t)
         return true;
   }
   return false;   // nessuna sessione per questo giorno (es. weekend) o fuori da tutte le sessioni
}

Verificare la modalità di trading (SYMBOL_TRADE_MODE)

// Determina se la modalità di trading consente una nuova apertura
bool IsNewEntryAllowed(const string symbol, ENUM_ORDER_TYPE type)
{
   long mode = SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE);
   if(mode == SYMBOL_TRADE_MODE_DISABLED)  return false; // trading disabilitato
   if(mode == SYMBOL_TRADE_MODE_CLOSEONLY) return false; // solo chiusura = niente nuovi ordini
   if(mode == SYMBOL_TRADE_MODE_LONGONLY  && type != ORDER_TYPE_BUY)  return false;
   if(mode == SYMBOL_TRADE_MODE_SHORTONLY && type != ORDER_TYPE_SELL) return false;
   return true;   // SYMBOL_TRADE_MODE_FULL, ecc.
}

Riunire tutto in un gate prima dell'invio dell'ordine

// Dentro OnTick: anche se c'è un segnale, non inviare l'ordine se il mercato è chiuso
if(!IsTradeSessionOpen(_Symbol) || !IsNewEntryAllowed(_Symbol, ORDER_TYPE_BUY))
{
   // previene il 10018 in anticipo. Lascia una sola riga di log e attendi la barra successiva
   return;
}

Come gestire il caso in cui venga comunque restituito 10018

Non è possibile azzerare del tutto i casi che superano il gate, come i ritardi nell'aggiornamento delle informazioni di sessione o i rifiuti subito dopo l'apertura. La regola fondamentale è controllare il retcode di OrderSend() e, in caso di 10018, non riprovare immediatamente (attendere la barra successiva). Inviare ordini a raffica durante la chiusura del mercato non fa altro che sporcare il log, senza alcun beneficio.

MqlTradeRequest req; MqlTradeResult res;
ZeroMemory(req); ZeroMemory(res);
// ... costruzione di req ...
if(!OrderSend(req, res) || res.retcode != TRADE_RETCODE_DONE)
{
   if(res.retcode == TRADE_RETCODE_MARKET_CLOSED)   // 10018
      Print("Market closed. Skip and wait for the next session.");
   else
      PrintFormat("OrderSend failed: retcode=%d, lastError=%d", res.retcode, GetLastError());
}

In tutta onestà, gli EA che inviano ordini subito dopo l'apertura del lunedì o intorno alle pause giornaliere (soprattutto su oro e indici azionari) incontrano questo errore molto frequentemente. Un EA progettato con attenzione alla programmazione oraria — con controllo della sessione, esclusione dei minuti successivi all'apertura e chiusura prima del weekend — non solo evita errori inutili, ma previene anche esecuzioni sfavorevoli nelle fasce a bassa liquidità. Gli EA distribuiti da FXEA365 implementano di serie l'esclusione dell'apertura del lunedì (AvoidMondayOpen), i filtri orari e la chiusura pre-weekend (CloseAllBeforeWeekend).


Checklist di priorità

PrioritàVerificaSoluzione
🚨 Prima cosaÈ weekend o festivo (in ora server)?Basta attendere. L'errore in sé è innocuo
🚨 Prima cosaSi è dentro la fascia "Sessioni di trading" delle specifiche?Evitare la pausa specifica del simbolo con un filtro orario
⚠️ PoiC'è confusione tra ora del server e ora italiana?Reimpostare prendendo come riferimento l'orario del Market Watch
⚠️ PoiLa modalità di trading è su Full access?Se è Close only / Disabled, verificare le specifiche con il broker
✅ ControlloNon è subito dopo l'apertura o la fine di una pausa?Attesa di X minuti + filtro sullo spread
🛠 SviluppoSi verifica sessione/modalità prima dell'invio dell'ordine?Implementare un gate con SymbolInfoSessionTrade

Conclusione

  • Market closed corrisponde a 10018 (TRADE_RETCODE_MARKET_CLOSED) su MT5 e 132 (ERR_MARKET_CLOSED) su MT4. Il significato è lo stesso: "ordine inviato fuori sessione di trading o durante una restrizione al trading".
  • Non compare solo nel weekend, ma anche per pause giornaliere specifiche del simbolo (oro, indici), scarti con l'ora del server, restrizioni SYMBOL_TRADE_MODE e rifiuti subito dopo l'apertura. Se compare in un giorno feriale, controlla prima "Specifiche → Sessioni di trading".
  • Gli orari di sessione variano da broker a broker e da simbolo a simbolo. L'unico riferimento corretto è quello riportato nella schermata delle specifiche del tuo MT5.
  • Chi sviluppa EA dovrebbe implementare una prevenzione permanente con un gate pre-invio basato su SymbolInfoSessionTrade() + SYMBOL_TRADE_MODE + TimeTradeServer(). In caso di 10018, non riprovare subito, ma attendere la barra successiva.

Per l'elenco completo dei codici di errore, consulta la guida completa ai codici di errore MQL5 / MT5; per gli EA gratuiti con filtro orario e prevenzione delle sessioni già integrati di serie, consulta l'elenco degli EA.


Domande frequenti

D: Mi compare Market closed in pieno giorno feriale. Perché?

La causa è probabilmente una fascia di pausa specifica di quel simbolo (pausa giornaliera) oppure una restrizione sulla modalità di trading del simbolo. Oro, argento e CFD su indici azionari hanno fasce orarie in cui non è possibile fare trading anche nei giorni feriali. Clicca con il tasto destro sul simbolo nel Market Watch → "Specifiche" → controlla i campi "Sessioni di trading" e "Trading".

D: Che differenza c'è tra 10018 e 132?

Sono solo piattaforme diverse: il significato è identico. 10018 (TRADE_RETCODE_MARKET_CLOSED) è il codice di ritorno di OrderSend() su MT5, mentre 132 (ERR_MARKET_CLOSED) è il valore restituito da GetLastError() su MT4 (MQL4). La soluzione è la stessa per entrambi.

D: Il mio EA continua a generare errori nel weekend. Posso ignorarlo?

Non causa alcun danno reale. Si interrompe automaticamente alla riapertura del mercato. Tuttavia, se ti dà fastidio che il log si riempia o che le notifiche push continuino a suonare, la soluzione definitiva è impostare nell'EA un controllo su giorno/sessione che salti direttamente l'invio dell'ordine (vedi il codice nel testo).

D: Mi è comparso Market closed anche su una criptovaluta (BTCUSD). Non dovrebbe essere negoziabile 24 ore su 24?

La possibilità di fare trading su CFD su criptovalute anche nel weekend dipende dal broker. Alcuni broker sospendono il trading nel weekend o prevedono brevi pause di manutenzione. Come per le coppie FX, verifica in "Specifiche → Sessioni di trading" gli orari di trading effettivamente disponibili presso il tuo broker.

📧 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