Se un Expert Advisor (EA) funziona soltanto nel tester visuale MT5, controlla se la decisione dipende da un dato o da qualcosa disegnato sul grafico. Un oggetto grafico non dovrebbe sostituire un valore esplicito del segnale. Prima di cambiare strategia confronta modalità, versioni, dati e prima differenza nei log. Il modello di questa pagina non esegue MT5 né ordini: separa numero, input non disponibile e risultato del confronto.

Che cosa cambia nella modalità visuale?

La documentazione MQL5 indica che fuori dal test visuale gli oggetti grafici non vengono disegnati e le richieste delle proprietà degli oggetti creati restituiscono valori zero. Il limite non si applica alla modalità visuale. È comportamento documentato della piattaforma, non un esperimento eseguito sul tuo EA e non prova della causa di ogni divergenza.

Se il programma legge prezzo di una linea o stato di un pulsante, registra quel passaggio separatamente da prezzi e indicatori. Prima di calcolare verifica se il valore esiste nella modalità usata. Riconoscere input indisponibile evita di accettare uno zero tecnico come prezzo. Vedere un grafico non dimostra che ogni altro dato della strategia sia pronto; allo stesso modo, non vedere disegni non prova che il modulo numerico non abbia funzionato.

Numero esplicito e oggetto sono percorsi diversi

Simulazione didattica senza trading: segnale numerico positivo 1,1050, soglia 1,1040, condizione «segnale maggiore della soglia». Sono valori assegnati, non quotazioni MT5 o log di esecuzione. Il percorso numerico soddisfa il confronto; nel percorso oggetto indisponibile il modello conserva null e non valuta. Null è la nostra rappresentazione dell’assenza, non un’affermazione sul valore restituito da una funzione MT5.

Input mancante non significa prezzo zero

Valore, assenza e ripiego errato

Valore, assenza e ripiego erratoModello didattico:1.1050 è maggiore di 1.1040. Dato numerico esplicito produce vero, oggetto indisponibile resta null senza confronto, sostituzione erronea con 0 produce falso. Null non è il valore restituito dalla funzione MT5 e nessun ordine viene inviato.Controlla prima la disponibilitàDato esplicito: 1,10501,1050 >1,1040 → vero nel modelloOggetto indisponibile: nullNessun confronto: input mancanteRipiego errato: zero al posto di null0 >1,1040 → falso, ma nasconde l’assenzaSolo simulazione: nessun terminale o conto.Il comportamento MT5 documentato è distinto.
La condizione falsa con un valore valido è diversa dall’impossibilità di valutarla senza input.

Scorri orizzontalmente o ingrandisci il diagramma per leggere i dettagli.

La variante errata inserisce 0 e restituisce falso per 0> 1,1040, nascondendo l’assenza come un esito ordinario. Con condizione opposta «minore della soglia», quello zero potrebbe persino soddisfarla. Non risolvere il problema inserendo un fallback arbitrario o il prezzo dell’ultimo grafico. Decidi e verifica esplicitamente la politica del dato non disponibile.

Controesempio EUR distinto. Regola fittizia «input< 100». Il dato numerico corretto 101 non abilita ingresso; l’oggetto mancante resta sconosciuto. Sostituirlo con 0 abilita invece un ordine nel modello: tre unità long di contratto da 1 EUR per punto e unità, fill assegnato 100 e uscita 99, più 2 EUR di costi separati, danno −5 EUR. Il caso dimostra perché un ripiego tecnico può cambiare una decisione anche quando il dato reale avrebbe escluso l’ordine. Non stima la perdita del tuo EA o l’utilità della strategia.

Lo zero può abilitare una decisione sbagliata EURControesempio input<100, valore corretto 101, oggetto assente; percorso 100 → 99,3 unità, 1 EUR/punto/unità e 2 EUR costi.ESEMPIO DI CALCOLODato corretto101<100: falsoAssenza riconosciutanull: non valutabileRipiego zero0<100: vero, poi −5 EUR
Lo zero può abilitare una decisione sbagliata EUR. Controesempio input<100, valore corretto 101, oggetto assente; percorso 100 → 99,3 unità, 1 EUR/punto/unità e 2 EUR costi.

La perdita assegnata illustra una dipendenza, non il risultato dell’EA reale.

Dato corretto
101<100: falso – Nessun ingresso della singola idea.
Assenza riconosciuta
null: non valutabile – Nessun numero inventato.
Ripiego zero
0<100: vero, poi −5 EUR – −3 di prezzo −2 di costi nel percorso assegnato.

Separa il dato dall’oggetto del grafico

Il modello didattico funziona nel browser: non si collega a conti o API, non trasmette gli input né li conserva in modo persistente. Non inserire password o dati personali.

Simula la regola didattica, non un test EA in MT5. Usa numeri positivi con virgola o punto decimale, da 10⁻⁸ a 10⁸, fino a 15 cifre e senza esponente o separatori delle migliaia. Il punto in 1.000 è ambiguo e viene rifiutato: scrivi 1 oppure 1000 per un intero. La virgola indica sempre decimali: 1,000 significa uno. Il formato JSON degli altri strumenti mantiene il punto. Oggetto assente significa null nel modello; una variante errata sostituisce zero. Non identifica la causa del guasto del tuo EA.

Il controllo locale permette di modificare due numeri positivi finiti, con punto decimale: da 10⁻⁸ a 10⁸, fino a 15 cifre, senza notazione esponenziale. Nel modello la modalità visuale assegna all’oggetto il segnale; quella normale lo dichiara non disponibile. La pagina non legge grafici, non esegue test della piattaforma, non invia input e non genera segnali d’investimento. Se inserisci due valori uguali, il confronto stretto «maggiore» è falso nel percorso numerico; l’oggetto assente resta sconosciuto indipendentemente dal risultato numerico.

Registrare modalità e build senza negoziare

Le costanti MQL_TESTER, MQL_VISUAL_MODE e MQL_OPTIMIZATION identificano l’ambiente del programma; TERMINAL_BUILD descrive la build effettiva. Registra letture reali senza dedurre modalità dall’aspetto di una finestra. Queste informazioni non dimostrano identità di parametri o snapshot dei dati.

Il piccolo EA diagnostico autonomo seguente usa OnInit per il log e lascia OnTick vuoto. Non invia o modifica ordini, non calcola segnali e non gestisce posizioni. Codice e stringhe sono mantenuti invariati: salva un file MQ5 separato, compila in MetaEditor e conserva risultato e log effettivi. Questa pagina non dichiara compilazione nativa del programma.

#property strict
int OnInit()
{
   PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
      (int)MQLInfoInteger(MQL_TESTER),
      (int)MQLInfoInteger(MQL_VISUAL_MODE),
      (int)MQLInfoInteger(MQL_OPTIMIZATION),
      (int)TerminalInfoInteger(TERMINAL_BUILD),
      _Symbol, (int)_Period);
   return INIT_SUCCEEDED;
}
void OnTick() {}

Non aggiungere un secondo OnInit a un EA esistente e non sostituire la sua inizializzazione con questo esempio. Integrare log richiede preservare il flusso originale. La documentazione del tester indica un’eccezione per PrintFormat dentro OnInit durante ottimizzazione: mancanza di stampe in altre fasi non dimostra che tali fasi non siano mai state eseguite.

La prima differenza conta più del profitto finale

Prepara una coppia di registrazioni: modalità visuale/non visuale, build e codice, input, simbolo e timeframe, modello tick, inizio richiesto ed effettivo, snapshot dei dati, costi e stato iniziale. Conserva preset e identificatori di versione. Se le dichiarazioni differiscono, non attribuire tutto alla finestra grafica. Stesso backtest, risultato diverso: confrontare condizioni e prove aiuta a confrontarle, senza verificare da solo che i file dichiarati siano autentici.

Individua il primo punto con input differente: successo del recupero, timestamp, indicatore pronto, segnale, condizione o decisione. «Profitto 120 anziché 80» non identifica il passaggio. Conserva log originali e tabella minima affiancata senza inventare valori non registrati. Usa identificatore dell’osservazione e posizione temporale o di sequenza: prezzi simili non provano stesso evento. Registrare tutto senza chiavi può rendere più difficile il confronto, non risolverlo automaticamente.

Un segnale verificabile anche senza disegni

Il calcolo dovrebbe restituire valore esplicito e stato della disponibilità; il livello grafico può poi mostrarli. Disattivare il disegno non dovrebbe cambiare intenzionalmente la fonte del segnale. Prova separatamente il modulo su input controllati, inclusi assenza e uguaglianza alla soglia. Rimuovere questa dipendenza non garantisce identità dell’intero backtest: dati, versioni, costi e altre parti del codice restano rilevanti.

Se non disponi del codice, fornisci all’autore la coppia di configurazioni e il primo punto documentato di divergenza, con campi ancora incerti. Non sostituire diagnosi con una sequenza di ordini reali di prova. Backtest in MT4 e MT5: pratica, tick, costi e orologi sviluppa preparazione generale e differenze fra ambienti. Il modulo numerico corretto non dimostra redditività futura.

Tre passi riproducibili

  1. Completa un registro della coppia di modalità: codice, build, input, dati e intervallo. Indica campi non confermati. Lo stesso file EA non stabilisce identità di tutto il resto.
  2. Nel controllo usa 1.1050 e 1.1040 con punto, poi valori uguali. Distingui condizione numerica falsa e oggetto null non valutato. Non serve un conto e non si collocano ordini.
  3. In configurazione demo separata o tester raccogli log diagnostici senza trading e confronta sequenza. Determina se differiscono input, disponibilità o confronto; non usare soltanto incremento del profitto come verifica della correzione.