MQL5 Wizard è uno strumento che ti permette di generare automaticamente il codice per i tuoi Expert Advisor. Per maggiori dettagli, puoi consultare l'articolo su Creazione di Expert Advisor Pronti in MQL5 Wizard.
Oggi parliamo di una strategia di trend che si basa su tre medie mobili. Questa strategia si chiama "Segnali basati su tre EMA". Per determinare il trend, utilizziamo tre medie mobili esponenziali: FastEMA, MediumEMA e SlowEMA.
Segnali di Trading:
- Segnale di acquisto: FastEMA > MediumEMA > SlowEMA (trend rialzista).
- Segnale di vendita: FastEMA < MediumEMA < SlowEMA (trend ribassista).
Questa strategia è implementata nella classe CSignal3EMA (il file signal3ema.mqh deve essere posizionato in terminal_data_folder\MQL5\Include\Expert\Signal\Signal3EMA.mqh).

Figura 1. Segnali di Trading basati su tre medie mobili
Dettagli sui Segnali di Trading
La strategia di trading è implementata nella classe CSignal3EMA, che dispone di alcuni metodi protetti per semplificare l'accesso ai valori delle tre medie mobili (Fast, Medium, Slow):
double FastEMA(int ind) // restituisce il valore della Fast EMA della barra double MediumEMA(int ind) // restituisce il valore della Medium EMA della barra double SlowEMA(int ind) // restituisce il valore della Slow EMA della barra
1. Apertura di una posizione long
Il trend rialzista è determinato dalla seguente condizione: FastEMA > MediumEMA > SlowEMA:
- FastEMA(1) > MediumEMA(1): la Fast EMA è superiore alla Medium EMA (ultima barra completata);
- MediumEMA(2) > SlowEMA(1): la Medium EMA è superiore alla Slow EMA (ultima barra completata);
//+------------------------------------------------------------------+ //| Controlla le condizioni per aprire una posizione long (buy) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Ask()-m_stop_loss*m_adjusted_point; tp =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- controlla il trend rialzista (sull'ultima barra completata): FastEMA(1)>MediumEMA(1)>SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
2. Chiusura della posizione long
Il trend ribassista è determinato dalla seguente condizione: FastEMA < MediumEMA < SlowEMA:
- FastEMA(1) < MediumEMA(1): la Fast EMA è inferiore alla Medium EMA (ultima barra completata);
- MediumEMA(2) < SlowEMA(1): la Medium EMA è inferiore alla Slow EMA (ultima barra completata);
//+------------------------------------------------------------------+ //| Controlla le condizioni per chiudere una posizione long | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseLong(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- controlla il trend ribassista (sull'ultima barra completata): FastEMA(1)<MediumEMA(1)<SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
3. Apertura di una posizione short
//+------------------------------------------------------------------+ //| Controlla le condizioni per aprire una posizione short (sell) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Bid()+m_stop_loss*m_adjusted_point; tp =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- controlla il trend ribassista (sull'ultima barra completata): FastEMA(1)<MediumEMA(1)<SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
4. Chiusura della posizione short
//+------------------------------------------------------------------+ //| Controlla le condizioni per chiudere una posizione short | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseShort(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- controlla il trend rialzista (sull'ultima barra completata): FastEMA(1)>MediumEMA(1)>SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
Puoi migliorare la chiusura della posizione short: non è necessario attendere il trend rialzista, puoi chiudere le posizioni short anche quando il trend è piatto, il che può essere determinato dalle seguenti condizioni: FastEMA > MediumEMA < SlowEMA.
Creazione dell'Expert Advisor utilizzando MQL5 Wizard
Per creare un robot di trading basato sulla strategia, devi selezionare le proprietà del segnale come "Segnali basati su tre EMA" nell'opzione "Creazione di Expert Advisor Pronti" di MQL5 Wizard:

Figura 2. Scegli "Segnali basati su tre EMA" in MQL5 Wizard
Poi dovrai specificare l'algoritmo di trailing stop e il sistema di gestione del denaro e del rischio necessari. Il codice dell'Expert Advisor verrà creato automaticamente, potrai compilarlo e testarlo nel Tester di Strategia del terminale MetaTrader 5.
Risultati dei Test
Esaminiamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 1.1.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).
Per la creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading a Lotto Fisso, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato).

Figura 3. Risultati storici del backtesting dell'Expert Advisor, basato su tre EMA
Allegati: Il file Signal3EMA.mqh con la classe CSignal3EMA deve essere posizionato in terminal_data_folder\MQL5\Include\Expert\Signal.
Il file threeema.mq5 contiene il codice dell'Expert Advisor, creato utilizzando MQL5 Wizard.
Commento 0