In questo articolo
Dopo questo articolo saprai…
- Leggere l’ultimo chiuso nella specifica configurazione CopyBuffer.
- Distinguere handle, copia e valore utilizzabile prima del segnale.
- Riconciliare eseguiti e quantità prima di ripetere una richiesta incerta.
I concetti senza lasciare l’articolo
Backtesting Piano di trading Conto demo Drawdown Stop loss Requote: nuova quotazioneUn 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
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
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
- 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.
- Esplora la documentazione ufficiale OnInit, OnTick e CTrade per sapere dove cercare esempi. Non occorre iniziare scrivendo un sistema completo.
- Specifica input, ingresso, uscita, volume e condizioni di non operare. Segna decisioni discrezionali; il contesto diventa programmabile solo con input e regole definiti.
- Prepara test per indicatore assente, riavvio, passo volume non valido, risposta incerta e cambiamenti manuali della posizione.
- 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.
Verifica ciò che hai imparato
Circa 2 minuti di esercizio.
Mostra risposta e spiegazione
Il più vecchio è per primo in memoria fisica; con tre elementi l’ultimo copiato chiuso è indice 2.
Altre domande
Come differisce da un bot Python?
MQL5 usa eventi, dati e funzioni MT5. Python può usare API del fornitore o integrazione MetaQuotes col terminale: non necessariamente REST/FIX esterno. Confronta dipendenze, disponibilità dei dati, esecuzioni e test. Nessun linguaggio vince universalmente per strategia o machine learning.
Devo programmare per eseguire un EA?
Non necessariamente, ma devi verificarne input, permessi, operatività e recupero. Il sorgente permette revisione; imparare il linguaggio non rivela un algoritmo EX5 non pubblicato. Nessun corso di poche settimane garantisce un controllo adeguato.
Perché il tester guadagna e il conto live perde?
Possibili differenze: selezione parametri, dati, spread, oneri, ritardi e fill. Usare la storia per scegliere e valutare può sovrastimare le prove, ma non garantisce una specifica curva o un fallimento. Conserva varianti e periodo separato, con contratti e tempi coerenti.
Serve un VPS?
Dipende da continuità, dati e percorso d’esecuzione. Può aiutare alcuni aspetti, non garantisce latenza o fill. Distingui Windows VPS e Virtual Hosting migrato; il pulsante AutoTrading locale non controlla da solo il secondo. Verifica servizio e procedure anziché una tariffa universale.
Dove si trova l’ultimo valore chiuso nell’array 103,101,102?
Con copia completa, start_pos 1,count 3,array semplice senza AS_SERIES è 102 all’indice 2. Indice 0 contiene il più vecchio 103,shift 3. Non applicare questa risposta ad altre configurazioni senza controllarle.
Un valore finito copiato è sempre valido?
No. EMPTY_VALUE predefinito è DBL_MAX, finito. Dopo handle e quantità verifica anche marcatore, buffer, barra e contratto dell’indicatore. Non sostituire un dato assente con RSI 0 né scartare ogni zero valido.
Fonti e verifica
- MetaQuotes — CopyBuffer
Sezioni 77–153 lette: start_pos e barra corrente distinti dall’ordine fisico dei dati e conteggio restituito.
- MetaQuotes — OnTick
Note 69–75 lette: AutoTrading impedisce richieste operative dell’EA, non ne ferma funzionamento o elaborazione corrente.
- MetaQuotes — OrderSend
Un esito true del controllo non equivale all’esecuzione: occorre verificare il codice di risposta e le transazioni successive. Il controllo preventivo non è una garanzia.
- MetaQuotes — OnTradeTransaction
Tipi di ordini e di operazioni; l’ordine di arrivo degli eventi non è garantito. Il controesempio dell’articolo è un modello indipendente.
- MetaQuotes — BarsCalculated
BarsCalculated restituisce il numero di valori calcolati o un errore: il solo conteggio non dimostra la validità economica dei valori.
- MetaQuotes — Other Constants
EMPTY_VALUE corrisponde a DBL_MAX: essere un numero finito non basta per considerarlo un valore valido dell’indicatore.
- MetaQuotes — Virtual Hosting Migration
Lette sezioni autorizzazioni 116–125 e sincronizzazione 129–148: trading remoto indipendente dal permesso locale e controllo log. Non generalizzazione a tutti i VPS.
- MetaQuotes — CTrade.Buy
Valore restituito e note di CTrade.Buy: il controllo riuscito della struttura non dimostra l’esecuzione; occorre controllare ResultRetcode e ResultDeal.
I calcoli usano ipotesi esplicite. Non sostituiscono i dati attuali di mercato o le condizioni dell’intermediario.
