Home Trading Sistematico Post

Generazione di Expert Advisor con MQL5 Wizard: segnali di trading basati su Bullish e Bearish Engulfing + RSI

Allegato
308.zip (6.49 KB, Scarica 0 volte)

Il MQL5 Wizard è uno strumento fantastico che permette di creare Expert Advisor pronti all'uso, basati sulle classi della libreria standard fornite con il terminale client. Grazie a questo strumento, puoi testare rapidamente le tue idee di trading, basta creare la tua propria classe di segnali di trading. Puoi trovare la struttura di questa classe e un esempio 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. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.

Un libro interessante che consiglio è "Strategie dei migliori trader" (in russo), dove vengono trattate molte strategie di trading. Qui ci concentreremo sui modelli di candele di inversione, confermati da oscillatori come Stochastic, CCI, MFI e RSI.

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

In questo articolo, ci concentreremo sui segnali basati sul modello di candele di inversione "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore RSI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che offre un semplice esempio di utilizzo per la creazione di segnali di trading con modelli di candele.


1. Bullish Engulfing e Bearish Engulfing

1.1. Bullish Engulfing

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

Fig. 1. Modello di candela Bullish Engulfing

Fig. 1. Modello di candela "Bullish Engulfing"

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

//+------------------------------------------------------------------+
//| Controlla la formazione del modello 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 alla media 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 downtrend
      (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 viene utilizzato per verificare la formazione del modello di candela "Bullish Engulfing".


1.2. Bearish Engulfing

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

Fig. 2. Modello di candela Bearish Engulfing

Fig. 2. Modello di candela "Bearish Engulfing"

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

//+------------------------------------------------------------------+
//| Controlla la formazione del modello 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 alla media 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 uptrend
      (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 viene utilizzato per verificare la formazione del modello di candela "Bearish Engulfing".


2. Segnali di trading, confermati dall'indicatore RSI

I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore RSI. Il valore dell'RSI deve essere inferiore o superiore ai livelli critici (40 per una posizione lunga e 60 per una posizione corta).

La chiusura delle posizioni aperte dipende dai valori dell'RSI. Ciò può avvenire in 2 casi:

  1. se l'RSI ha raggiunto il livello critico opposto (70 per una posizione lunga e 30 per una posizione corta)
  2. se il segnale inverso non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per una posizione lunga e 70 per una posizione corta)

Fig. 3. Modello Bullish Engulfing, confermato dall'indicatore RSI

Fig. 3. Modello "Bullish Engulfing", confermato dall'indicatore RSI


  • int CBE_BE_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
  • int CBE_BE_RSI::ShortCondition() - controlla le condizioni per aprire una posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40).

2.1. Aprire posizione lunga / Chiudere posizione corta

  1. La formazione del modello "Bullish Engulfing" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima barra completata deve essere inferiore a 40).

  2. La posizione corta deve essere chiusa se l'indicatore RSI ha superato in alto i livelli critici 70 o 30.

//+------------------------------------------------------------------+
//| Controlla le condizioni per l'entrata e l'uscita dal mercato       |
//| 1) Entrata nel mercato (apri posizione lunga, risultato=80)       |
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)     |
//+------------------------------------------------------------------+
int CBE_BE_RSI::LongCondition()
  {
   int result=0;
//--- idx può essere usato per determinare la modalità di lavoro dell'EA
//--- 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 durante le barre di notizie
   int idx   =StartIndex();
//--- controllando le condizioni per aprire una posizione lunga
//--- formazione del modello Bullish Engulfing e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40))
     result=80;
//--- controllando le condizioni per chiudere posizione corta
//--- crossover della linea segnale dei livelli di ipercomprato/ipersoldato (verso l'alto 30, verso l'alto 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- restituisci il risultato
   return(result);
  }

2.2. Aprire posizione corta / Chiudere posizione lunga

  1. La formazione del modello "Bearish Engulfing" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'indicatore RSI dell'ultima barra completata deve essere superiore a 60).

  2. La posizione lunga deve essere chiusa se l'indicatore RSI ha superato verso il basso i livelli critici 70 o 30.

//+------------------------------------------------------------------+
//| Controlla le condizioni per l'entrata e l'uscita dal mercato       |
//| 1) Entrata nel mercato (apri posizione corta, risultato=80)       |
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)     |
//+------------------------------------------------------------------+
int CBE_BE_RSI::ShortCondition()
  {
   int result=0;
//--- idx può essere usato per determinare la modalità di lavoro dell'EA
//--- 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 durante le barre di notizie
   int idx   =StartIndex();
//--- controllando le condizioni per aprire una posizione corta
//--- formazione del modello Bearish Engulfing e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60))
     result=80;
//--- controllando le condizioni per chiudere posizione lunga
//--- crossover della linea segnale dei livelli di ipercomprato/ipersoldato (verso il basso 70, verso il basso 30)
   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- restituisci il risultato
   return(result);
  }


2.3. Creare un Expert Advisor utilizzando MQL5 Wizard

La classe CBE_BE_RSI non è inclusa nelle classi della libreria standard, per utilizzarla è necessario scaricare il file acml_rsi.mqh (vedi allegati) e salvarlo nella cartella terminal_client_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.mqh. Puoi utilizzare questi file in MQL5 Wizard dopo aver riavviato MetaEditor.

Per creare un Expert Advisor, avvia MQL5 Wizard:

Fig. 4. Creazione di Expert Advisor con MQL5 Wizard

Fig. 4. Creazione di Expert Advisor con 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à del segnale dell'Expert Advisor

Fig. 6. Proprietà del segnale dell'Expert Advisor

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

Aggiungiamo il modulo di segnali di trading: Segnali basati su Bullish Engulfing/Bearish Engulfing confermati da RSI:

Fig. 7. Proprietà del segnale dell'Expert Advisor

Fig. 7. Proprietà del segnale dell'Expert Advisor

Modulo di segnali di trading aggiunto:

Fig. 8. Proprietà del segnale dell'Expert Advisor

Fig. 8. Proprietà del segnale dell'Expert Advisor

Puoi selezionare qualsiasi proprietà di trailing, ma 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 di scambio 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, situato in Expert_ABE_BE_RSI.mq5, che sarà salvato in terminal_data_folder\MQL5\Experts\.

I parametri di input predefiniti dell'Expert Advisor generato sono:

//--- 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'operazione
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'operazione
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 consentono 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 valori fissi per le soglie:

  • Aprire posizione: 80;
  • Chiudere posizione: 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 utilizzati anche per la media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fattore nella definizione dei valori delle soglie. A causa di questo, le ThresholdOpen e ThresholdClose devono essere impostate rispettivamente a 40=(0+80)/2 e 20=(0+40)/2.

I valori dei parametri di input Signal_StopLevel e Signal_TakeLevel sono impostati su 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, PeriodRSI=11, MA_period=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).

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

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


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

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


Post correlati

Commento (0)