MQL5 Wizard offre la possibilità di creare automaticamente Expert Advisor senza necessità di programmare (scopri di più su MQL5 Wizard: Creare Expert Advisor senza Programmazione).
Oggi parliamo dei segnali di trading basati sull'indicatore Alligator, presentato da B.Williams nel suo libro "Trading Chaos". La strategia denominata "Segnali basati sull'Alligator" viene generata automaticamente nel MQL5 Wizard.
Questo sistema si basa su tre medie mobili (le linee delle Labbra, dei Denti e della Mascella) e su oscillatori calcolati attraverso le differenze tra di esse. I segnali di trading vengono generati dopo il crossover delle linee dell'Alligator, a seconda della tendenza, determinata dall'ordine di queste linee. In caso di tendenza rialzista, la linea delle Labbra (con il periodo più corto) è la più alta, seguita dalla linea dei Denti, mentre la linea della Mascella è la più bassa. Il contrario avviene in caso di tendenza ribassista.
I segnali di trading sono:
- Apri posizione long: crossover delle linee dell'Alligator e aumento della distanza tra di esse in caso di tendenza rialzista;
- Chiudi posizione long: crossover rialzista della linea delle Labbra con la linea della Mascella;
- Apri posizione short: crossover delle linee dell'Alligator e aumento della distanza tra di esse in caso di tendenza ribassista;
- Chiudi posizione short: crossover ribassista della linea delle Labbra con la linea della Mascella;
Questa strategia è implementata nella classe CSignalAlligator.

Figura 1. Segnali di trading, basati sull'indicatore Alligator
Segnali di trading
La strategia di trading è implementata in CSignalAlligator e ha alcuni metodi protetti per semplificare l'accesso ai valori degli indicatori:
double Jaw(int ind) // restituisce il valore della linea della Mascella double Teeth(int ind) // restituisce il valore della linea dei Denti double Lips(int ind) // restituisce il valore della linea delle Labbra double LipsTeethDiff(int ind) // restituisce la differenza tra le linee delle Labbra e dei Denti double TeethJawDiff(int ind) // restituisce la differenza tra le linee dei Denti e della Mascella double LipsJawDiff(int ind) // restituisce la differenza tra le linee delle Labbra e della Mascella bool CheckCross(); // usato per controllare il crossover delle linee dell'Alligator
1. Apri posizione long
Il controllo delle condizioni di trading presenta alcune caratteristiche, dovute allo spostamento delle linee delle Labbra, dei Denti e della Mascella.
Condizioni per aprire una posizione long:
- Il metodo CheckCross è utilizzato per determinare il crossover e il successivo aumento della differenza tra le linee;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) e LipsTeethDiff(-1)>=LipsTeethDiff(0); verifica dell'aumento della differenza tra le linee delle Labbra e dei Denti;
- LipsTeethDiff(0)>=0.0; la linea delle Labbra è superiore alla linea dei Denti;
- TeethJawDiff(-2) >=TeethJawDiff(-1) e TeethJawDiff(-1) >=TeethJawDiff(0); verifica dell'aumento della differenza tra le linee dei Denti e della Mascella;
- TeethJawDiff(0) >=0.0; la linea dei Denti è superiore alla linea della Mascella.
//+------------------------------------------------------------------+ //| Controlla le condizioni per aprire una posizione long (acquisto) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. Chiudi posizione long
Condizioni per chiudere una posizione long (nota lo spostamento delle linee):
- LipsTeethDiff(-1)<0; la linea delle Labbra della barra successiva (a causa dello spostamento) è inferiore alla linea dei Denti;
- LipsTeethDiff(0)>=0; la linea delle Labbra della barra corrente è superiore o uguale a quella dei Denti;
- LipsTeethDiff(1)>0; la linea delle Labbra della barra precedente (completata) è superiore alla linea dei Denti.
//+------------------------------------------------------------------+ //| Controlla le condizioni per chiudere una posizione long | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0); }
3. Apri posizione short
Condizioni per aprire una posizione short:
- Il metodo CheckCross è utilizzato per determinare il crossover e il successivo aumento della differenza tra le linee;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) e LipsTeethDiff(-1)<=LipsTeethDiff(0); verifica dell'aumento della differenza tra le linee delle Labbra e dei Denti;
- LipsTeethDiff(0)<=0.0; la linea delle Labbra della barra corrente è inferiore alla linea dei Denti;
- TeethJawDiff(-2)<=TeethJawDiff(-1) e TeethJawDiff(-1)<=TeethJawDiff(0); verifica dell'aumento della differenza tra le linee dei Denti e della Mascella;
- TeethJawDiff(0) <=0.0; la linea dei Denti della barra corrente è inferiore alla linea della Mascella;
//+------------------------------------------------------------------+ //| Controlla le condizioni per aprire una posizione short (vendita) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. Chiudi posizione short
Condizioni per chiudere una posizione short:
- LipsTeethDiff(-1)>0; la linea delle Labbra della barra successiva (a causa dello spostamento) è superiore alla linea dei Denti;
- LipsTeethDiff(0)<=0; la linea delle Labbra della barra corrente è inferiore o uguale a quella dei Denti;
- LipsTeethDiff(1)<0; la linea delle Labbra della barra precedente (completata) è inferiore alla linea dei Denti.
//+------------------------------------------------------------------+ //| Controlla le condizioni per chiudere una posizione short | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0); }
Creazione dell'Expert Advisor con MQL5 Wizard
Per creare un robot di trading basato sulla strategia, devi scegliere le proprietà del segnale come "Segnali basati sull'Alligator" nell'opzione "Creazione di Expert Advisor Pronti" di MQL5 Wizard:

Figura 2. Seleziona 'Segnali basati sull'Alligator' in MQL5 Wizard
Successivamente, dovrai specificare l'algoritmo di trailing stop e il sistema di gestione del denaro e del rischio. Il codice dell'Expert Advisor verrà creato automaticamente, potrai compilarlo e testarlo nel Strategy Tester del terminale MetaTrader 5.
Risultati dei Test
Analizziamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
Nella creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato).

Figura 3. Risultati dei Test dell'Expert Advisor con segnali di trading, basati sull'indicatore Alligator
Il profitto può essere incrementato se utilizzi la filtrazione delle operazioni e consideri le caratteristiche del mercato, a seconda del tempo. La classe CSignalITF ti permetterà di aggiungere il filtro temporale intraday. I migliori orari possono essere trovati utilizzando lo Strategy Tester del terminale MetaTrader 5. Vedi esempio in MQL5 Wizard - Segnali di Trading Basati sul Crossover di Due EMA con filtro temporale intraday.
Allegati: Il file SignalAlligator.mqh con la classe CSignalAlligator deve essere collocato nella cartella terminal_data_folder\MQL5\Include\Expert\Signal.
Il file expert_alligator.mq5 contiene il codice dell'Expert Advisor, creato con MQL5 Wizard.
Post correlati
- RRS Impulse: Il Tuo Esperto per MetaTrader 4
- Rilevare il Venerdì della Prima Settimana del Mese: La Guida per il Giorno NFP
- Utilità Market Watch Panel: il tuo alleato in MetaTrader 4
- X-liquidex: Il Miglior EA per Trading di Volatilità e Breakout su MetaTrader 4
- EA Efficiente: Come Aggiungere la Chiusura del Venerdì per Migliorare le Performance