Home Trading Sistematico Post

Strategie di Trading: Segnali con l'Indicatore Alligator in MetaTrader 5

Allegato
267.zip (3.41 KB, Scarica 0 volte)

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

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

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

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

Commento (0)