Imparare il linguaggio MQL4 (MetaQuotes Language 4) e utilizzarlo per creare Expert Advisor (EA) apre le porte all'automazione delle strategie di trading sulla popolare piattaforma MetaTrader 4 (MT4). Gli EA sono essenzialmente robot di trading che eseguono operazioni al posto tuo, seguendo regole precise che hai definito nel codice. Questa guida ti accompagnerà passo dopo passo nel percorso di apprendimento e sviluppo.
MQL4, acronimo di MetaQuotes Language 4, è un linguaggio di programmazione procedurale, con alcune caratteristiche orientate agli oggetti, sviluppato da MetaQuotes specificamente per la piattaforma di trading MetaTrader 4. La sua sintassi è molto simile a quella del linguaggio C/C++, il che può facilitare l'apprendimento per chi ha già familiarità con questi linguaggi. Tuttavia, anche chi parte da zero può impararlo grazie alle numerose risorse disponibili. Viene utilizzato principalmente per scrivere:
Un Expert Advisor è il cuore del trading algoritmico su MT4. È un software scritto in MQL4 che viene allegato a un grafico specifico. L'EA monitora costantemente le condizioni di mercato (prezzi, indicatori tecnici) e, quando le regole definite nel suo codice sono soddisfatte, può:
L'obiettivo principale di un EA è eliminare l'emotività dal trading ed eseguire una strategia in modo disciplinato e continuo, 24 ore su 24 se necessario (richiede un VPS o computer sempre acceso).
Avere una conoscenza di base dei concetti di programmazione (variabili, cicli, condizioni) o una minima familiarità con C/C++ può accelerare l'apprendimento di MQL4. Tuttavia, molte risorse didattiche, inclusi corsi specifici, sono progettate per principianti assoluti senza alcuna esperienza pregressa di programmazione.
Esiste un'ampia gamma di risorse per imparare MQL4, adatte a diversi stili di apprendimento e livelli di esperienza.
Esistono anche libri dedicati, come "Expert Advisor Programming for MetaTrader 4" di Andrew R. Young, che possono fornire una base solida, sebbene sia importante verificare che le informazioni siano aggiornate rispetto alle ultime build di MT4.
La scelta delle risorse dipende dalle tue preferenze e dal tuo livello di partenza. Questo grafico radar offre una valutazione soggettiva di alcune delle principali categorie di risorse basata su criteri comuni:
Nota: I punteggi sono soggettivi e basati su una valutazione generale. La risorsa migliore dipende dalle esigenze individuali.
Creare un EA segue un processo logico, dalla concezione all'esecuzione.
Questa mappa mentale illustra le fasi principali coinvolte nell'apprendimento di MQL4 e nella creazione di un Expert Advisor:
Prima ancora di scrivere una riga di codice, devi avere una strategia di trading chiara e definita in modo meccanico. Chiediti:
Più dettagliata è la strategia, più facile sarà tradurla in codice MQL4.
Apri MetaEditor da MT4 (F4). Qui creerai un nuovo file EA (File -> Nuovo -> Expert Advisor (template)). Segui la procedura guidata per dare un nome al tuo EA e definire eventuali parametri di input (variabili che potrai modificare dall'esterno senza ricompilare, utili per l'ottimizzazione).
Questo è il cuore del processo. Dovrai tradurre la tua strategia usando la sintassi MQL4 all'interno delle funzioni principali generate dal template:
OnInit()
: Eseguita una volta quando l'EA viene avviato o i parametri vengono cambiati. Utile per inizializzazioni.OnDeinit()
: Eseguita una volta quando l'EA viene rimosso dal grafico o la piattaforma chiusa. Utile per pulizie finali.OnTick()
: Eseguita ad ogni nuova quotazione (tick) ricevuta per il simbolo a cui l'EA è collegato. Qui risiede la logica principale di trading: controllo delle condizioni, apertura/gestione/chiusura ordini.Utilizzerai funzioni MQL4 integrate per accedere ai dati di mercato (es. Ask
, Bid
, iMA
, iRSI
), gestire gli ordini (OrderSend
, OrderClose
, OrderModify
, OrdersTotal
), e controllare eventuali errori (GetLastError
).
Esempio di Codice Molto Semplice (Solo Illustrativo):
//+------------------------------------------------------------------+
//| SimpleMA_EA.mq4 |
//| Copyright 2025, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
// Parametri di input
input int MagicNumber = 12345; // Numero magico per identificare gli ordini dell'EA
input double Lots = 0.1; // Dimensione della posizione
input int MAPeriod = 20; // Periodo della Media Mobile Semplice
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'Expert |
//+------------------------------------------------------------------+
int OnInit()
{
Print("SimpleMA_EA: Inizializzato");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funzione di de-inizializzazione dell'Expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Print("SimpleMA_EA: De-inizializzato. Motivo: ", reason);
}
//+------------------------------------------------------------------+
//| Funzione tick dell'Expert |
//+------------------------------------------------------------------+
void OnTick()
{
// Controlla se ci sono già ordini aperti da questo EA
if(OrdersTotal() > 0) return; // Se c'è un ordine, non fare nulla
// Calcola la Media Mobile Semplice
double maValue = iMA(_Symbol, _Period, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1); // Valore MA sulla candela precedente
// Ottieni i prezzi correnti
double currentAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double currentBid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
// Logica di entrata
// Entra Long se il prezzo di chiusura precedente è sopra la MA
if(iClose(_Symbol, _Period, 1) > maValue)
{
int ticket = OrderSend(_Symbol, OP_BUY, Lots, currentAsk, 3, 0, 0, "SimpleMA Buy", MagicNumber, 0, clrGreen);
if(ticket < 0)
{
Print("Errore nell'apertura dell'ordine Buy: ", GetLastError());
}
else
{
Print("Ordine Buy aperto con ticket: ", ticket);
}
}
// Entra Short se il prezzo di chiusura precedente è sotto la MA (Logica semplificata, non completa)
else if (iClose(_Symbol, _Period, 1) < maValue)
{
// Aggiungere logica per ordine Sell (OrderSend con OP_SELL)
// Print("Logica Sell non implementata in questo esempio");
}
}
//+------------------------------------------------------------------+
Nota: Questo è un esempio estremamente basilare e non include gestione del rischio, uscite, o controllo errori avanzato. Serve solo a illustrare la struttura.
Una volta scritto il codice, devi compilarlo in MetaEditor (cliccando sul pulsante "Compila" o premendo F7). Il compilatore controllerà la sintassi del codice. Se non ci sono errori, verrà generato un file eseguibile con estensione .ex4
nella cartella MQL4/Experts
della tua installazione di MetaTrader 4. Se ci sono errori, verranno mostrati nella finestra "Errori" in basso, e dovrai correggerli.
Prima di rischiare capitale reale, è fondamentale testare l'EA sui dati storici. Usa lo "Strategy Tester" di MetaTrader 4 (Visualizza -> Tester Strategie o Ctrl+R). Qui puoi:
Se i risultati del backtesting sono promettenti:
Finestra di dialogo per allegare e configurare un Expert Advisor su un grafico in MetaTrader 4.
Un passo fondamentale è configurare correttamente il tuo ambiente di lavoro. Questo video tutorial (in inglese) mostra come impostare gli strumenti necessari per iniziare a creare EA in MQL4:
Questo video fa parte di una serie che può aiutarti a familiarizzare con l'interfaccia di MetaEditor e i primi passi nella programmazione MQL4.
Ecco una tabella riassuntiva di alcune delle funzioni MQL4 più comuni utilizzate nello sviluppo di Expert Advisor:
Funzione | Descrizione |
---|---|
OnInit() |
Funzione di inizializzazione, eseguita all'avvio dell'EA. |
OnDeinit() |
Funzione di de-inizializzazione, eseguita alla rimozione dell'EA. |
OnTick() |
Funzione principale eseguita ad ogni tick di prezzo. Contiene la logica di trading. |
OrderSend() |
Invia un ordine di mercato o pendente al server di trading. |
OrderClose() |
Chiude un ordine di mercato aperto. |
OrderModify() |
Modifica parametri di un ordine aperto o pendente (es. SL, TP). |
OrderSelect() |
Seleziona un ordine dalla lista degli ordini aperti o storici per analizzarne le proprietà. |
OrdersTotal() |
Restituisce il numero totale di ordini di mercato e pendenti. |
Symbol() / _Symbol |
Restituisce il nome del simbolo del grafico corrente. |
Period() / _Period |
Restituisce il timeframe del grafico corrente. |
Ask |
Restituisce il prezzo Ask (offerta) corrente. |
Bid |
Restituisce il prezzo Bid (domanda) corrente. |
iMA() , iRSI() , etc. |
Funzioni per calcolare i valori degli indicatori tecnici standard. |
GetLastError() |
Restituisce il codice dell'ultimo errore avvenuto durante l'esecuzione di un'operazione di trading. |
Print() |
Stampa messaggi nel log dell'Expert Advisor (utile per il debug). |
Questa tabella elenca solo alcune funzioni chiave. La documentazione ufficiale MQL4 ne contiene centinaia.