In questa lezione scriverai un Expert Advisor completo la cui logica è: compra quando una Media Mobile veloce incrocia al rialzo quella lenta, vendi quando la incrocia al ribasso. Si tratta di una delle strategie sistematiche classiche — abbastanza semplice da programmare in una sola sessione, ma un EA reale e funzionante che puoi mettere in backtest.
Step 1: Dichiarazione delle Variabili
La prima cosa di cui ogni EA ha bisogno è un insieme di variabili. Le variabili in MQL4 possono essere globali (dichiarate prima di OnInit(), accessibili da qualsiasi funzione) o locali (dichiarate all'interno di una funzione, utilizzabili solo al suo interno).
Per un EA con crossover, dichiara queste cinque variabili intere globalmente all'inizio del file:

openPosition— tiene traccia di una posizione attualmente aperta (1) o no (0)longPosition— segnala che siamo attualmente longshortPosition— segnala che siamo attualmente shortticketLong— memorizza il numero del ticket per la posizione long apertaticketShort— memorizza il numero del ticket per la posizione short aperta
Termina sempre ogni riga di dichiarazione di variabile con un punto e virgola — i punti e virgola mancanti sono la causa più comune di errori di compilazione.
Step 2: La Funzione OnInit
All'interno di OnInit(), assegna i valori di default alle tre variabili di stato. Questo garantisce che l'EA parta sempre da zero ogni volta che viene agganciato a un grafico:

Impostare openPosition, longPosition e shortPosition a 0 all'avvio fa sì che l'EA riconosca correttamente che nessuna posizione è aperta al primo caricamento.
Step 3: La Funzione OnTick
Qui vive la logica di trading. All'interno di OnTick(), dichiara prima quattro variabili locali per le Medie Mobili:

Perché quattro MA? Un segnale di crossover richiede di confrontare i valori fast/slow MA della barra corrente con quelli della barra precedente. Servono entrambi i passi temporali per rilevare il momento in cui le linee si incrociano:
fastMACurrent— MA veloce sulla barra corrente (in formazione)fastMAPrevious— MA veloce sulla barra precedenteslowMACurrent— MA lenta sulla barra correnteslowMAPrevious— MA lenta sulla barra precedente
Step 4: Condizioni di Ingresso e Uscita con le Istruzioni if
Con i quattro valori di MA calcolati, scrivi le condizioni di ingresso usando le istruzioni if:

La logica in parole semplici:
Ingresso long: Se nessuna posizione è aperta E la MA veloce era sotto quella lenta nell'ultima barra E la MA veloce è ora sopra quella lenta → le linee si sono appena incrociate al rialzo → chiama OrderSend() con OP_BUY, imposta longPosition = 1, openPosition = 1.
Ingresso short: Se nessuna posizione è aperta E la MA veloce era sopra quella lenta nell'ultima barra E la MA veloce è ora sotto quella lenta → le linee si sono incrociate al ribasso → chiama OrderSend() con OP_SELL, imposta shortPosition = 1, openPosition = 1.
Uscita long: Se longPosition == 1 E la MA veloce è tornata sotto quella lenta → chiudi l'ordine long usando OrderClose() con il ticketLong memorizzato, reimposta le variabili di stato a 0.
Uscita short: Se shortPosition == 1 E la MA veloce è tornata sopra quella lenta → chiudi l'ordine short usando ticketShort, reimposta lo stato.
Conclusioni
Hai ora costruito un Expert Advisor completo da zero. Dichiara variabili globali, le inizializza in OnInit(), legge le Medie Mobili ad ogni tick in OnTick(), e usa le istruzioni if per entrare e uscire dalle operazioni sui segnali di crossover.
Il passo successivo è il backtesting — carica i dati storici di uno strumento ed esegui questo EA attraverso lo Strategy Tester di MetaTrader per vedere come si sarebbe comportato. Leggi la guida Come fare il Backtest di un Expert Advisor in MetaTrader 4 per iniziare.
La serie di programmazione MQL4 continua con un video corso approfondito su variabili, array, operatori e molto altro — vedi Impara la Programmazione MQL4.