Home Trading Sistematico Post

MQL5 Wizard: Crea segnali di trading con Bullish e Bearish Engulfing + Stochastic

Allegato
305.zip (6.6 KB, Scarica 0 volte)

Il MQL5 Wizard offre la possibilità di creare Expert Advisors già pronti basati sulle classi della libreria standard fornite con il terminale cliente. Se sei interessato a verificare rapidamente le tue idee di trading, tutto quello che devi fare è creare una tua classe di segnali di trading. La struttura di questa classe e un esempio possono essere trovati nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading.

L’idea generale è semplice: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati.

Esiste un libro intitolato "Strategie dei migliori trader" (in russo), in cui vengono considerate molte strategie di trading. Qui ci concentreremo sui pattern di inversione delle candele, confermati dagli oscillatori Stochastic, CCI, MFI e RSI.

Il miglior approccio è creare una classe separata derivata da CExpertSignal per controllare la formazione di pattern di candele. Per confermare i segnali di trading generati dai pattern di candele, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori).

In questo articolo, analizzeremo i segnali basati sui pattern di inversione "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore Stochastic. Il modulo di segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con i pattern di candele.


1. Pattern di inversione "Bullish Engulfing" e "Bearish Engulfing"

1.1. Bullish Engulfing

Il pattern di inversione "Bullish Engulfing" si forma in una fase di ribasso quando una piccola candela nera è seguita da una grande candela bianca che oscura completamente ("inghiotte") la candela del giorno precedente. Le ombre (code) della piccola candela sono corte, permettendo al corpo della grande candela di coprire l'intera candela del giorno precedente.

Fig. 1. Pattern di candela 'Bullish Engulfing'

Fig. 1. Pattern di candela 'Bullish Engulfing'

Il riconoscimento del pattern "Bullish Engulfing" è implementato nel metodo CheckPatternBullishEngulfing() della classe CCandlePattern:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candela "Bullish Engulfing"    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // la candela precedente è ribassista
      (Close(1)-Open(1)>AvgBody(1))  &&  // il corpo della candela rialzista è superiore al valore medio del corpo 
      (Close(1)>Open(2))             &&  // il prezzo di chiusura della candela rialzista è superiore al prezzo di apertura della candela ribassista
      (MidOpenClose(2)<CloseAvg(2))  &  // fase di ribasso
      (Open(1)<Close(2)))                // il prezzo di apertura della candela rialzista è inferiore al prezzo di chiusura della candela ribassista
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candela "Bullish Engulfing".


1.2. Bearish Engulfing

Il pattern di inversione "Bearish Engulfing" si forma in una fase di rialzo quando una piccola candela bianca è seguita da una grande candela nera che oscura completamente ("inghiotte") la candela del giorno precedente. Le ombre (code) della piccola candela sono corte, permettendo al corpo della grande candela di coprire l'intera candela del giorno precedente.

Fig. 2. Pattern di candela 'Bearish Engulfing'

Fig. 2. Pattern di candela 'Bearish Engulfing'

Il riconoscimento del pattern "Bearish Engulfing" è implementato nel metodo CheckPatternBearishEngulfing() della classe CCandlePattern:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candela "Bearish Engulfing"   |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // la candela precedente è rialzista
      (Open(1)-Close(1)>AvgBody(1)) &&  // il corpo della candela è superiore al valore medio del corpo
      (Close(1)<Open(2))            &&  // il prezzo di chiusura della candela ribassista è inferiore al prezzo di apertura della candela rialzista
      (MidOpenClose(2)>CloseAvg(2)) &&  // fase di rialzo
      (Open(1)>Close(2)))               // il prezzo di apertura della candela ribassista è superiore al prezzo di chiusura della candela rialzista
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candela "Bearish Engulfing".


2. Segnali di trading, confermati dall'indicatore Stochastic

I segnali di trading per aprire una posizione long o short devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere maggiore/minore dei corrispondenti livelli critici (30 o 70).

La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Questo può avvenire in 2 casi:

  1. se la linea %D ha raggiunto il livello critico opposto (80 per posizione long e 20 per posizione short)
  2. se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione long e 80 per posizione short)

Fig. 3. Pattern 'Bullish Engulfing', confermato dall'indicatore Stochastic

Fig. 3. Pattern 'Bullish Engulfing', confermato dall'indicatore Stochastic


Il controllo delle condizioni di trading per l'ingresso e l'uscita è implementato in due metodi:

  • int CBE_BE_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere una posizione short (restituisce 40);
  • int CBE_BE_Stoch::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere una posizione long (restituisce 40).

2.1. Apertura posizione long/Chiusura posizione short

  1. La formazione del pattern "Bullish Engulfing" deve essere confermata dall'indicatore Stochastic: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere inferiore a 30).

  2. La posizione short deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato verso l'alto i livelli 20 o 80.

//+------------------------------------------------------------------+
//| Controlla le condizioni per l'ingresso e l'uscita dal mercato                 |
//| 1) Ingresso nel mercato (apri posizione long, risultato=80)                  |
//| 2) Uscita dal mercato (chiudi posizione short, risultato=40)                  |
//+------------------------------------------------------------------+
int CBE_BE_Stoch::LongCondition()
  {
   int result=0;
//--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor
//--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie
   int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione long
//--- formazione del pattern Bullish Engulfing e linea di segnale<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))
     result=80;
//--- controllo delle condizioni per chiudere posizione short
//--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 20, verso l'alto 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- restituisci il risultato
   return(result);
  }

2.2. Apertura posizione short/Chiusura posizione long

  1. La formazione del pattern "Bearish Engulfing" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere superiore a 70).

  2. La posizione long deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato verso il basso i livelli 80 o 20.

//+------------------------------------------------------------------+
//| Controlla le condizioni per l'ingresso e l'uscita dal mercato                 |
//| 1) Ingresso nel mercato (apri posizione short, risultato=80)                 |
//| 2) Uscita dal mercato (chiudi posizione long, risultato=40)                   |
//+------------------------------------------------------------------+
int CBE_BE_Stoch::ShortCondition()
  {
   int result=0;
//--- idx può essere utilizzato per determinare la modalità di lavoro dell'Expert Advisor
//--- idx=0 - in questo caso l'EA controlla le condizioni di trading ad ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie
   int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione short
//--- formazione del pattern Bearish Engulfing e linea di segnale>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))
     result=80;
//--- controllo delle condizioni per chiudere posizione long
//--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 80, verso l'alto 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- restituisci il risultato
   return(result);
  }


2.3. Creazione di un Expert Advisor utilizzando MQL5 Wizard

La classe CBE_BE_Stoch non è inclusa nelle classi della Libreria Standard; per utilizzarla, è necessario scaricare il file acbe_be_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. La stessa operazione deve essere eseguita con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio di MetaEditor.

Per creare un Expert Advisor, avvia il MQL5 Wizard:

Fig. 4. Creazione di un Expert Advisor utilizzando MQL5 Wizard

Fig. 4. Creazione di un Expert Advisor utilizzando MQL5 Wizard

Specifichiamo il nome dell'Expert Advisor:

Fig. 5. Proprietà generali dell'Expert Advisor

Fig. 5. Proprietà generali dell'Expert Advisor

Dopo di che dobbiamo selezionare i moduli di segnali di trading utilizzati.

Fig. 6. Proprietà dei segnali dell'Expert Advisor

Fig. 6. Proprietà dei segnali dell'Expert Advisor

Nel nostro caso utilizziamo solo un modulo di segnali di trading.

Aggiungendo il modulo di segnali basato su "Bullish Engulfing/Bearish Engulfing confermato da Stochastic":

Fig. 7. Proprietà dei segnali dell'Expert Advisor

Fig. 7. Proprietà dei segnali dell'Expert Advisor

Modulo di segnali di trading aggiunto:

Fig. 8. Proprietà dei segnali dell'Expert Advisor

Fig. 8. Proprietà dei segnali dell'Expert Advisor

Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non utilizzato":

Fig. 9. Proprietà di trailing dell'Expert Advisor

Fig. 9. Proprietà di trailing dell'Expert Advisor

Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso":

Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor

Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor

Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in terminal_data_folder\MQL5\Experts\.

I parametri di input predefiniti dell'Expert Advisor generato:

//--- input per il segnale principale
input int            Signal_ThresholdOpen   =10;     // Valore soglia segnale per aprire [0...100]
input int            Signal_ThresholdClose  =10;     // Valore soglia segnale per chiudere [0...100]
input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare
input double         Signal_StopLevel       =50.0;   // Livello di Stop Loss (in punti)
input double         Signal_TakeLevel       =50.0// Livello di Take Profit (in punti)

devono essere sostituiti con:

//--- input per il segnale principale
input int            Signal_ThresholdOpen   =40;     // Valore soglia segnale per aprire [0...100]
input int            Signal_ThresholdClose  =20;     // Valore soglia segnale per chiudere [0...100]
input double         Signal_PriceLevel      =0.0;    // Livello di prezzo per eseguire un affare
input double         Signal_StopLevel       =0.0;    // Livello di Stop Loss (in punti)
input double         Signal_TakeLevel       =0.0    // Livello di Take Profit (in punti)

I parametri di input Signal_ThresholdOpen/Signal_ThresholdClose permettono di specificare i livelli soglia per l'apertura e la chiusura delle posizioni.

Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato i valori fissi della soglia:

  • Posizione aperta: 80;
  • Posizione chiusa: 40.

L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati dei voti del modulo principale vengono anche utilizzati nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto quando impostiamo i valori delle soglie. A causa di questo fatto, ThresholdOpen e ThresholdClose devono essere impostati a 40=(0+80)/2 e 20=(0+40)/2.

I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati a 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere.


2.4. Risultati del backtesting storico

Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing non utilizzato).


Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish/Bearish Engulfing + Stochastic

Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish/Bearish Engulfing + Stochastic


Il miglior insieme di parametri di input può essere trovato utilizzando il Strategy Tester del terminale cliente MetaTrader 5.

Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_abe_be_stoch.mq5.


Post correlati

Commento (0)