Un Expert Advisor MQL5 è un programma a eventi nell’ambiente MetaTrader 5. Può valutare regole e inviare richieste operative se i permessi necessari lo consentono. Esecuzione del programma, permessi e risposta del server sono però controlli distinti da un trade confermato: trascinare un EA sul grafico non stabilisce alcun risultato finanziario.

Sorgente, eseguibile e tipo di programma

MetaEditor compila MQ5 in EX5. Un eseguibile può essere distribuito senza sorgente: imparare MQL5 non rivela l’algoritmo non pubblicato di un EX5 acquistato. Gli EA possono inviare richieste ammesse; gli indicatori calcolano o notificano con eventi e funzioni consentite diversi, quindi ridurli a «disegnano soltanto» è inesatto. Non trasferire automaticamente le capacità di un tipo di programma all’altro.

L’EA MQL5 usa MT5; anche MT4 parla di Expert Advisor, ma con linguaggio e interfacce propri. Altri sistemi possono usare API diverse. Un programma Python può appoggiarsi all’integrazione MetaQuotes e al terminale MT5 oppure ad altre API: non è necessariamente esterno tramite REST/FIX. Confronta dipendenze effettive, non il solo linguaggio. Inizia da Trading algoritmico: primi passi fra dati, regole e controlli.

Indice zero non significa sempre ultima barra chiusa

Supponi che CopyBuffer completi la copia richiesta con start_pos = 1, count = 3, in un array semplice senza AS_SERIES. Sono selezionate tre barre chiuse: il valore più vecchio viene collocato per primo nella memoria fisica. Nel modello i valori sono shift 3 = 103, shift 2 = 101, shift 1 = 102. L’ultimo chiuso è quindi all’indice 2, non 0. Shift 0, barra corrente, non è stato copiato.

Tre elementi copiati, ordine fisico esplicito

Tre elementi copiati, ordine fisico esplicitoArray semplice senza AS_SERIES, start_pos 1,count 3,copia completa. Indice 0: shift 3,valore 103. Indice 1: shift 2,valore 101. Indice 2: shift 1,valore 102,ultimo chiuso. Confronto maggiore di 102,5:103 passa, 102 no. Valori fittizi, non un segnale.Prima controlla quale barra stai leggendoArray semplice · start_pos = 1 · count = 3Indice 0Shift 3103Indice 1Shift 2101Indice 2Shift 1102Più vecchioUltimo chiusoTest > 102,5:103 passa, 102 non passa.Indice 2 vale solo per questa configurazione.
Copiare tutti gli elementi non basta se scegli la barra sbagliata. Registra offset, quantità restituita e modalità d’indicizzazione: indice 2 non è una regola universale.

Scorri orizzontalmente o ingrandisci il diagramma per leggere i dettagli.

Il confronto >102,5 è vero sul 103 vecchio e falso sul 102 più recente. È una verifica della selezione dei dati, non un segnale operativo. Controlla insieme count restituito e ordine, senza generalizzare l’indice a un array configurato diversamente.

Eventi e ciclo di vita

OnInit inizializza: verifica risorse e segnala fallimento se un requisito manca. «Inizializzazione» non significa una sola invocazione durante tutta la vita d’uso del programma. OnDeinit gestisce rimozione, chiusura o cambiamenti che comportano nuova inizializzazione; tratta esplicitamente risorse, motivo e stato da conservare.

OnTick riceve NewTick del simbolo del grafico associato. Se un NewTick è già in coda o in elaborazione, non ne viene aggiunto un altro. L’EA può usare altri eventi e non è obbligato a implementare OnTick. Disattivare AutoTrading impedisce nuove richieste operative ma non ferma il programma né interrompe il gestore corrente. OnTimer e OnTradeTransaction possono essere essenziali: il ciclo non comprende soltanto tre callback.

In un EA multisimbolo, un tick sul grafico non dimostra che osservazioni e prezzi di ogni altro simbolo siano aggiornati. Registra timestamp e stato per ciascuna dipendenza prima di valutarne la regola.

Richiesta, risposta ed eseguiti

OrderSend invia una richiesta; true non conferma da solo il fill di mercato. Controlla codici e riconcilia ordini, deal e posizioni. OrderCheck è un precontrollo, non una garanzia successiva. Nel test di errore fittizio chiedi acquisto 0,10 lotti e perdi certezza della risposta: ripetere senza riconciliazione può produrre 0,20 se entrambe le richieste sono eseguite. Mancata conferma locale non prova assenza di attività sul server.

OnTradeTransaction distingue rimozione dell’ordine e aggiunta di un deal allo storico; non garantisce la priorità di arrivo delle notifiche. Nessuna posizione iniziale, due acquisti confermati D1 = 0,04 e D2 = 0,06 lotti. Un contatore difettoso che si azzera su ORDER_DELETE restituisce 0 dopo D1,D2,ORDER_DELETE; restituisce 0,10 dopo ORDER_DELETE, D1,D2. La somma confermata è 0,10 in entrambi. Stato dell’ordine ed esposizione sono campi diversi. Un registro reale deve gestire anche vendite, inversioni, correzioni dello storico e modalità del conto.

CTrade offre Buy, Sell e PositionClose. Il successo del controllo del metodo Buy non equivale sempre al successo dell’operazione: esamina ResultRetcode e ResultDeal. Prezzo richiesto e prezzo ottenuto possono inoltre differire. Una gestione robusta riconcilia identità e quantità degli eseguiti prima di decidere un retry.

Tester e verifica separata dalla scelta dei parametri

Lo Strategy Tester MT5 può usare tick generati o tick registrati dal broker, secondo modalità e disponibilità. Conserva origine, tempi, specifiche e oneri; non presumere un prezzo universale MetaQuotes. Backtest di una strategia: regole, costi e dati verificabili spiega la distinzione fra sviluppo e valutazione.

Scegliere parametri sulla stessa storia poi usata per giudicarli può sovrastimare le prove. Non garantisce matematicamente né una curva liscia né un fallimento dal vivo. Conserva periodo di valutazione intatto e tutte le varianti tentate. Un’esecuzione corretta del programma e un vantaggio economico persistente sono domande separate.

Quando l’automazione aiuta e cosa non dimostra

Controlli ripetibili, monitoraggio, 200 operazioni al mese o lavoro notturno possono essere requisiti di progetto, non prove di redditività. Definisci input, eventi e condizioni di non operare. Pubblicazioni insolite richiedono supervisione e verifiche, ma non escludono automaticamente qualunque automazione. Un grafico di marketplace o un sondaggio anonimo non stimano in modo affidabile l’esito futuro.

Nuovo esempio EUR collegato al retry: assegna 100000 EUR per lotto, conto inizialmente senza posizione, solo acquisti. La quantità desiderata 0,10 rappresenta 10000 EUR nominali. Se due richieste da 0,10 sono entrambe eseguite, totale 0,20 = 20000 EUR, 10000 in più. Non è una perdita o un requisito di margine, ma esposizione raddoppiata rispetto all’intenzione. Una notifica locale mancante non ti autorizza a trattare la prima quantità come zero.

Progetto proprio e continuità operativa

Un progetto piccolo permette di verificare regole precise. Budget di apprendimento e durata dipendono dalle capacità richieste: tre–sei mesi o costruire anziché comprare non garantiscono superiorità. Un EX5 documentato può essere eseguito senza scrivere MQL5,ma richiede comunque verifica di input, permessi, limiti, log e recupero.

Per funzionamento non presidiato servono infrastruttura, permessi e procedure. Il pulsante locale AutoTrading non chiude posizioni né arresta i calcoli. Uno stop ordinario accettato dal server può restare attivo a terminale locale chiuso; un’uscita affidata soltanto all’EA richiede programma funzionante e comunicazione col server.

MetaQuotes Virtual Hosting è un ambiente migrato separato con trading automatico consentito: il pulsante locale non ferma quell’istanza. Un Windows VPS è un servizio diverso. Verifica termini attuali e operatività in VPS per il trading: latenza, continuità e passaggio di controllo, senza promettere prezzo o latenza universali. Al riavvio ricostruisci esposizione corrente prima di usare un vecchio segnale locale. In netting le strategie sullo stesso simbolo condividono la posizione netta: Magic Number non crea capitale o margine separati.

L’handle esiste: il valore è davvero pronto?

Un handle non dimostra che sia stata calcolata la barra necessaria. BarsCalculated restituisce quantità calcolata o −1 su errore. Poi controlla count di CopyBuffer, buffer corretto e offset. Non trasformare un fallimento in zero: RSI 0 può essere uno stato valido estremo, non «dato non pronto».

Quattro controlli distinti prima della soglia

Handle non basta: quattro porteControlli separati nel modello; non esecuzione reale di MT5.ESEMPIO DI CALCOLO1. HandleValido2. CalcoloBarra necessaria pronta3. CopiaCount atteso4. ValoreValido e non vuoto
Handle non basta: quattro porte. Controlli separati nel modello; non esecuzione reale di MT5.

Valuta la soglia soltanto dopo dati utilizzabili e barra corretta.

1. Handle
Valido – Non INVALID_HANDLE.
2. Calcolo
Barra necessaria pronta – BarsCalculated e requisito specifico.
3. Copia
Count atteso – Non risposta parziale o errore.
4. Valore
Valido e non vuoto – EMPTY_VALUE = DBL_MAX può essere finito; controlla contratto e indice.

Il modello richiede un valore: A)handle non valido, nessuna lettura; B)handle esistente ma 0 valori copiati, attendi; C)un valore copiato EMPTY_VALUE, nessun segnale utilizzabile; D)un valore valido 45 copiato, puoi valutare la regola. Quarantacinque è una lettura inventata, non raccomandazione.

EMPTY_VALUE corrisponde per impostazione predefinita a DBL_MAX, che è finito: la sola verifica di finitezza non basta. Un indicatore personalizzato può usare un altro marcatore vuoto. Controlla il contratto senza rifiutare automaticamente ogni zero. Storia mancante, marcatore vuoto e numero valido sono stati diversi.

Esercizio: handle valido e count 1,ma valore EMPTY_VALUE. Non confrontarlo con la soglia: registra indisponibilità, verifica buffer, barra e marcatore, e riprova all’evento appropriato. Per dati API leggi EA con API nel backtest: replay offline e versioni disponibili; per dipendenze dal grafico EA solo nel tester visuale MT5: dati, oggetti e prima divergenza. Nessuno di questi controlli certifica una strategia redditizia.

Primo progetto con criteri di accettazione

  1. Su Conto demo, con installazione ufficiale o del broker verificata, carica un EA campione disponibile come Moving Average o MACD Sample nel tester EUR/USD H1. Esegui un passaggio e leggi equity, Drawdown e profit factor, senza interpretarli come previsione.
  2. Esplora la documentazione ufficiale OnInit, OnTick e CTrade per sapere dove cercare esempi. Non occorre iniziare scrivendo un sistema completo.
  3. Specifica input, ingresso, uscita, volume e condizioni di non operare. Segna decisioni discrezionali; il contesto diventa programmabile solo con input e regole definiti.
  4. Prepara test per indicatore assente, riavvio, passo volume non valido, risposta incerta e cambiamenti manuali della posizione.
  5. Prova il flusso controllato prima di pensare al conto reale. Un mese è un esempio, non soglia di certificazione; demo e live possono differire. Il tester può simulare ritardi, ma non misura tutti i fill futuri.