Come risolvere il problema “Trade context is busy” su MT4/MT5

“Trade context is busy” è il modo in cui MetaTrader indica che la piattaforma sta già elaborando un’altra operazione di trading e non ne accetta altre. In MT4 appare come errore 146 (ERR_TRADE_CONTEXT_BUSY); MT5 segnala una condizione simile attraverso i codici di ritorno del server di trading e semplicemente rifiuta la nuova richiesta.
La soluzione è sempre la stessa: serializza le tue operazioni di trading in modo che ne sia in corso solo una alla volta e riprova correttamente quando il terminale è occupato.

Apri un conto con FXTM

Cosa significa realmente l’errore

  • Pipeline di trading singola. MT4 accetta solo una operazione di trading alla volta su tutti i grafici e gli EA in un terminale. Se due EA (o un EA e un clic manuale) tentano di aprire/modificare/chiudere contemporaneamente, la seconda operazione viene rifiutata con il messaggio “Contesto di trading occupato”. Si tratta di una caratteristica intrinseca del sistema.
  • Richieste troppo frequenti. Su MT5, il server restituisce esplicitamente “Richieste troppo frequenti” (TRADE_RETCODE_TOO_MANY_REQUESTS, 10024) quando lo si martella; il risultato pratico è lo stesso: ritirare e inviare nuovamente in un secondo momento.
  • Fattori scatenanti tipici. Più scalper in un unico terminale, script che si attivano ripetutamente, doppio clic sul pulsante Acquista/Vendi o EA che inviano nuovamente la richiesta prima che la precedente sia stata completata. I broker descrivono l’errore anche quando un cliente invia molte aperture/modifiche/chiusure in rapida successione o quando una seconda richiesta viene inviata prima che arrivi la prima risposta.

Investi nel Forex con FXTM

Soluzioni immediate per i trader discrezionali

  1. Smetti di inviare due volte lo stesso ordine. Clicca una volta sola e attendi qualche istante affinché la piattaforma completi l’operazione precedente. Se viene visualizzata una finestra pop-up, chiudila e riprova dopo che il diario ha smesso di registrare nuove operazioni di trading. Anche l’assistenza clienti del broker consiglia di procedere in questo modo: il messaggio viene visualizzato quando vengono inviate più richieste troppo rapidamente.
  2. Riavvia il terminale. Un riavvio pulito cancella qualsiasi finestra di dialogo di trading bloccata e ristabilisce la sessione del server. Diverse knowledge base dei broker indicano questa come la prima soluzione.li>
  3. Riduci il carico. Chiudi i grafici/indicatori inutilizzati e metti in pausa gli EA su quel terminale mentre effettui un ordine manuale. I broker suggeriscono anche di suddividere le configurazioni impegnative su istanze separate del terminale per ridurre l’attività simultanea.
    li>

Apri un conto con FXTM

Soluzioni immediate per gli utenti algo

  1. Serializza ogni chiamata di trading. In MT4, gate OrderSend/OrderModify/OrderClose dietro il controllo della piattaforma in modo da non emettere mai una nuova chiamata mentre il thread di trading è occupato. L’approccio ufficiale consiste nel testare IsTradeAllowed() immediatamente prima di inviare la richiesta, non minuti prima. Se è occupato, attendere, quindi inviare.
  2. Riprovare con un breve intervallo di attesa. Se una chiamata di trading restituisce ancora 146 (MT4) o un codice di tipo “riprova” (MT5), attendere brevemente e inviare nuovamente, esattamente come raccomandato dagli articoli di MetaQuotes. Non continuare all’infinito, ma utilizzare un ciclo limitato.
  3. Un terminale, un trader. Quando più EA devono operare contemporaneamente, eseguili in istanze separate del terminale (puntando allo stesso conto, se necessario). Le linee guida della community e la documentazione dei broker concordano su questo punto per ridurre i conflitti.

Investi nel Forex con FXTM

Perché i controlli devono essere “corretti prima” dell’ordine

Testare la funzione tick del tuo EA all’inizio è troppo presto. Un altro EA potrebbe acquisire il contesto di trading dopo il tuo controllo ma prima del tuo OrderSend, e tu continueresti a ricevere l’errore. L’articolo ufficiale mostra il modello corretto: esegui prima tutti i calcoli, poi controlla IsTradeAllowed(), quindi invia immediatamente; altrimenti lo stato potrebbe cambiare sotto il tuo controllo.

Apri un conto con FXTM

Il modello di riprova robusto (concetto, non codice)

  • Convalida: parametri, autorizzazione al trading dei simboli, sessione e riempimenti.
  • Tentativo: inviare l’ordine/la modifica.
  • Leggere il risultato:
    • MT4: GetLastError() uguale a 146attendere e reinviare.
    • MT5: MqlTradeResult.retcode è uguale a TOO_MANY_REQUESTS (10024) o altri blocchi temporanei → attendere e inviare nuovamente.
  • Limita i tentativi (ad esempio, 3-10 tentativi) e back-off esponenziale (ad esempio, 100-500 ms). MetaQuotes mostra lo stesso approccio “attendere e inviare nuovamente” nella sua serie di gestione degli errori.

Investi nel Forex con FXTM

Metodi comprovati per prevenire completamente l’errore

Mantieni una sola coda di trading per terminale

È consentito chiamare l’API di trading solo da un grafico/EAModule alla volta. Molti sviluppatori implementano un mutex/lock (ad esempio, tramite una variabile globale a livello di terminale) in modo che tutti gli EA condividano una singola coda. Ciò elimina le chiamate simultanee ed è un modello comune discusso dai membri della comunità MQL.

Scaglionare le strategie e utilizzare i timer

Se più EA agiscono sullo stesso evento (ad esempio, l’apertura di una barra), scaglionare i loro tempi di invio di alcune centinaia di millisecondi utilizzando OnTimer in modo che non entrino in collisione sullo stesso tick. Questo è funzionalmente equivalente alla messa in coda ed evita il codice 146 senza rallentare in modo evidente l’esecuzione degli ordini. (MT5 dispone anche di TRADE_RETCODE_TOO_MANY_REQUESTS per avvisarti quando agisci troppo rapidamente).

Dividi i carichi pesanti tra i terminali

I portafogli ad alta frequenza o multi-simbolo sovraccaricano un singolo terminale. Clona il terminale e distribuisci le strategie tra le istanze; diversi broker lo raccomandano esplicitamente per ridurre le collisioni “busy”. È banale eseguire più copie di MT4/MT5, anche se si è connessi allo stesso account.

Non controllare troppo presto; controlla appena prima

Come nota MetaQuotes, chiamare IsTradeAllowed() molto prima dell’operazione è inutile, poiché il contesto può cambiare. Calcola prima, poi controlla, poi invia.

Gestisci le “richieste troppo frequenti” su MT5

MT5 restituisce codici di errore delle operazioni dettagliati. Quando vedi 10024 (TOO_MANY_REQUESTS), rallenta e invia nuovamente in un secondo momento. Trattalo allo stesso modo in cui tratti il codice 146 di MT4.

Apri un conto con FXTM

Lista di controllo diagnostica (cosa controllare nel terminale)

  • Schede Diario / Esperti: conferma la sequenza: cerca aperture/modifiche/chiusure consecutive su grafici diversi con lo stesso timestamp o una cascata di 146 voci. Si tratta di una collisione. L’elenco di riferimenti autorevoli 146 come “Contesto di trading occupato”.
  • Grafici/EA aperti: conta quanti sono in grado di inviare ordini ora (in particolare gli scalper).
    I creatori di strategie notano che questo errore diventa comune quando molte strategie vengono eseguite all’interno di un unico terminale.

Investi nel Forex con FXTM

Abitudini operative corrette che risolvono il problema

  • Un’azione alla volta: in condizioni di traffico intenso, attendere che il risultato dell’ordine precedente appaia nel Registro prima di avviare l’azione successiva. Le FAQ dei broker collegano esplicitamente il messaggio alle richieste in sospeso.
  • Riavvia le sessioni bloccate: se la piattaforma continua a restituire il messaggio anche quando è inattiva, riavviarla.
    Diversi articoli sui broker indicano il riavvio come prima soluzione, poiché cancella qualsiasi richiesta incompleta.

  • Limitare le strategie per terminale: dividere un portafoglio su più terminali; si tratta di una pratica standard documentata dal fornitore per ridurre le contese.

Apri un conto con FXTM

Linee guida per sviluppatori (specifiche MT4)

  • Utilizza i controlli ufficiali: IsTradeAllowed() (e IsTradeContextBusy() se necessario) esistono per proteggere le richieste; chiamali immediatamente prima di OrderSend/Modify/Close. La documentazione è esplicita riguardo al loro scopo.
  • Segui la sequenza di MetaQuotes: calcola prima i segnali e i livelli, poi controlla e infine invia. L’articolo originale “Errore 146” spiega perché un controllo troppo precoce fallisce e mostra la logica wait-until-free.
  • Trattare 146 come transitorio: su GetLastError()==146, sleep brevemente e riprova con un ciclo limitato. Gli articoli di MetaQuotes sulla gestione degli errori raccomandano i cicli di riprova per gli stati transitori del server/thread di trading.

Investi nel Forex con FXTM

Linee guida per sviluppatori (specifiche MT5)

  • Leggi MqlTradeResult.retcode dopo ogni OrderSend(). Se ricevi 10024 (TOO_MANY_REQUESTS) o codici di blocco/timeout, attendi e invia nuovamente; non inviare più richieste.
    La tabella dei codici di ritorno è autorevole.

  • Centralizza le chiamate di trading: incanala tutti i moduli EA attraverso un unico gestore di trading (un’istanza CTrade) per ogni istanza del terminale per evitare invii simultanei. Questo rispecchia il principio della “coda unica” sopra descritto. (La serie di MetaQuotes sulla gestione delle risposte delinea la struttura circostante).

Apri un conto con FXTM

Distinguere da altri errori

  • 137 Broker occupato — carico sul lato server, non correlato al thread di trading locale. Riprovare più tardi.
  • 141 Troppe richieste — hai inviato le richieste troppo rapidamente (anche esplicito in MT5 come 10024). Rallenta e metti in coda.
  • Prezzo/Stop non validi — non è un problema di concorrenza; correggi i parametri e invia nuovamente. La tabella dei codici di ritorno di MT5 li elenca separatamente.

Investi nel Forex con FXTM

Quando si eseguono molte strategie

  • Limita le strategie per terminale e clona i terminali. I fornitori di automazione delle strategie e i broker suggeriscono entrambi di suddividere i pacchetti di grandi dimensioni su più MT4 piuttosto che gestire tutto tramite un’unica istanza.
  • Centralizza il rischio e l’esecuzione. Utilizza un unico “EA di esecuzione” per ricevere le intenzioni di trading dagli EA di lavoro (tramite file, socket o variabili globali) e inviarle in ordine. I post della community discutono i modelli mutex/lock per questo motivo.

Apri un conto con FXTM

Playbook rapidi e concreti

Faccio trading manualmente e ho visto il popup

  • Chiudi il messaggio, attendi qualche istante e invia una volta sola.
  • Se persiste, riavvia MT4/MT5.
  • Metti in pausa gli EA in esecuzione su quel terminale mentre agisci. Questi passaggi corrispondono alle indicazioni del broker.

Il mio EA raggiunge 146 in MT4

  • Sposta il controllo IsTradeAllowed() immediatamente prima di OrderSend/Modify/Close.
  • A 146, attendi brevemente e riprova con un limite massimo.
  • Se più EA operano contemporaneamente, dividili su più terminali o aggiungi un mutex/coda.

Il mio bot MT5 riceve il messaggio “Richieste troppo frequenti”

  • Leggi retcode e considera 10024 come “rallenta”.
  • Aggiungi una coda di richieste e una logica back-off/resend come mostrato negli articoli di MetaQuotes.

Investi nel Forex con FXTM

Conclusione

Il messaggio “Trade context is busy” (Contesto di trading occupato) non è un bug di MetaTrader, ma una misura di sicurezza. Il terminale elabora una sola operazione di trading alla volta. Le soluzioni sono semplici e collaudate:

  • Serializza le chiamate di trading (una coda per terminale).
  • Controlla subito prima di inviare, quindi riprova con un breve timeout quando la piattaforma/il server segnala “occupato”.
  • Suddividi i portafogli multi-EA pesanti su più terminali per ridurre le collisioni.
  • Per il trading manuale, evita i doppi invii rapidi e riavvia se la sessione sembra bloccata.

Tutto quanto sopra corrisponde alla documentazione di MetaQuotes (errore 146 e utilizzo di IsTradeAllowed; gestione dei codici di ritorno MT5) e alle linee guida del broker (riavvio, riduzione delle richieste simultanee, suddivisione dei terminali).
Applica questi passaggi e il messaggio scomparirà definitivamente.

Apri un conto con FXTM

1

DerivDeriv

4,9 rating based on 49 ratings
4.9/5 49
2

XMXM

4,9 rating based on 64 ratings
4.9/5 64
3

LiteFinanceLiteFinance

4,8 rating based on 41 ratings
4.8/5 41
4

easyMarketseasyMarkets

4,8 rating based on 37 ratings
4.8/5 37
5

FXGTFXGT

4,7 rating based on 20 ratings
4.7/5 20
1

BybitBybit

4,4 rating based on 44 ratings
4.4/5 44
2

CoinTRCoinTR

4,1 rating based on 40 ratings
4.1/5 40
3

BitgetBitget

punteggio 3,0
3/5 0
4

BinanceBinance

4,8 rating based on 66 ratings
4.8/5 66
5

KuCoinKuCoin

4,5 rating based on 36 ratings
4.5/5 36
  • Close