Home Trading Sistematico Post

Guida all'uso del MQL5 Wizard: segnali di trading con Bullish e Bearish Harami + RSI

Allegato
313.zip (6.47 KB, Scarica 0 volte)

Il MQL5 Wizard è uno strumento potente che ti permette di creare Expert Advisor (EA) pronti all'uso, sfruttando le classi della libreria standard fornite con il terminale client. In questo post, scopriremo come utilizzarlo per generare segnali di trading basati sui pattern di candlestick Bullish Harami e Bearish Harami, confermati dall'indicatore RSI.

L'idea di base è semplice: creiamo una classe di segnali di trading derivata da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con le tue logiche.

Un libro interessante che potresti considerare è "Strategie dei migliori trader". Qui vengono analizzate diverse strategie di trading, ma noi ci concentreremo sui pattern di inversione delle candlestick, confermati da oscillatori come Stochastic, CCI, MFI e RSI.

Per confermare i segnali generati dai pattern di candlestick, puoi creare una classe separata derivata da CExpertSignal, che gestisce la formazione dei pattern. Per facilitare questa operazione, utilizzeremo la classe CCandlePattern come esempio.

1. Pattern di inversione Bullish Harami e Bearish Harami

1.1. Bullish Harami

Il pattern Bullish Harami si forma in un trend ribassista quando una grande candlestick è seguita da una più piccola, il cui corpo si trova all'interno del range verticale del corpo più grande. Questo pattern indica che il trend in discesa potrebbe invertire, suggerendo un buon momento per entrare in posizione long. La seconda candlestick apre con un gap in alto.

Più piccola è la seconda candlestick (bianca), maggiore è la probabilità di inversione.

Bullish Harami

Fig. 1. Pattern di candlestick "Bullish Harami"

Il riconoscimento del pattern "Bullish Harami" è implementato nel metodo CheckPatternBullishHarami() della classe CCandlePattern.

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candlestick "Bullish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))
     && // l'ultima candlestick completata è bullish
     ((Open(2)-Close(2)>AvgBody(1))
     && // la candlestick precedente è bearish
     ((Close(1)<Open(2))
     && // il prezzo di chiusura della candlestick bullish è inferiore al prezzo di apertura della candlestick bearish
      (Open(1)>Close(2)))
            && // il prezzo di apertura della candlestick bullish è superiore al prezzo di chiusura della candlestick bearish
      (MidPoint(2)<CloseAvg(2)))
     // down trend
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del pattern "Bullish Harami".

1.2. Bearish Harami

Il pattern Bearish Harami si forma in un trend rialzista quando una grande candlestick è seguita da una più piccola, il cui corpo è all'interno del range verticale del corpo più grande. Questo pattern suggerisce che il trend in salita potrebbe invertire, rappresentando un buon momento per entrare in posizione short. La seconda candlestick apre con un gap in basso.

Anche in questo caso, più piccola è la seconda candlestick (nera), maggiore è la probabilità di inversione.

Bearish Harami

Fig. 2. Pattern di candlestick "Bearish Harami"

Il riconoscimento del pattern "Bearish Harami" è implementato nel metodo CheckPatternBearishHarami() della classe CCandlePattern.

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candlestick "Bearish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))
     && // l'ultima candlestick completata è bearish
     ((Close(2)-Open(2)>AvgBody(1))
     && // la candlestick precedente è bullish
     ((Close(1)>Open(2))
     && // il prezzo di chiusura della candlestick bearish è superiore al prezzo di apertura della candlestick bullish
      (Open(1)<Close(2)))
            && // il prezzo di apertura della candlestick bearish è inferiore al prezzo di chiusura della candlestick bullish
      (MidPoint(2)>CloseAvg(2)))
     // up trend
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del pattern "Bearish Harami".

2. Segnali di trading confermati dall'indicatore RSI

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

La chiusura delle posizioni aperte dipende dai valori dell'RSI. Questo può accadere in due casi:

  • se l'RSI ha raggiunto il livello critico opposto (70 per posizione long e 30 per posizione short)
  • se il segnale di inversione non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per posizione long e 70 per posizione short)

Bullish Harami con RSI

Fig. 3. Pattern "Bullish Harami" confermato dall'indicatore RSI

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

2.1. Apertura di posizione long / Chiusura posizione short

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

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

//+------------------------------------------------------------------+
//| Controlla le condizioni per entrare ed uscire dal mercato |
//+------------------------------------------------------------------+
int CBH_BH_RSI::LongCondition()
  {
   int result=0;
   //--- idx può essere utilizzato per determinare la modalità di lavoro dell'EA
   int idx   =StartIndex();
   //--- controllo delle condizioni per aprire posizione long
   //--- formazione del pattern Bullish Harami e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40))
     result=80;
   //--- controllo delle condizioni per chiudere posizione short
   //--- crossover della linea di segnale dei livelli di overbought/oversold (verso l'alto 30, verso l'alto 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
   //--- restituisce il risultato
   return(result);
  }

2.2. Apertura di posizione short / Chiusura posizione long

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

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

//+------------------------------------------------------------------+
//| Controlla le condizioni per entrare ed uscire dal mercato |
//+------------------------------------------------------------------+
int CBH_BH_RSI::ShortCondition()
  {
   int result=0;
   //--- idx può essere utilizzato per determinare la modalità di lavoro dell'EA
   int idx   =StartIndex();
   //--- controllo delle condizioni per aprire posizione short
   //--- formazione del pattern Bearish Harami e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60))
     result=80;
   //--- controllo delle condizioni per chiudere posizione long
   //--- crossover della linea di segnale dei livelli di overbought/oversold (verso il basso 70, verso il basso 30)
  if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
   //--- restituisce il risultato
   return(result);
  }

2.3. Creazione dell'Expert Advisor con MQL5 Wizard

La classe CBH_BH_RSI non è inclusa nelle classi della libreria standard. Per utilizzarla, è necessario scaricare il file acml_rsi.mqh e salvarlo nel percorso client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto per il file acandlepatterns.mqh. Dopo il riavvio di MetaEditor, potrai usarli in MQL5 Wizard.

Per creare un Expert Advisor, lancia il MQL5 Wizard:

Creazione Expert Advisor

Fig. 4. Creazione dell'Expert Advisor con MQL5 Wizard

Specifica il nome dell'Expert Advisor:

Proprietà generali dell'Expert Advisor

Fig. 5. Proprietà generali dell'Expert Advisor

Dopo di che, dovrai selezionare i moduli di segnali di trading utilizzati.

Proprietà dei segnali dell'Expert Advisor

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

In questo caso utilizziamo solo un modulo di segnali di trading.

Aggiungiamo il modulo di segnali basato su Bullish Harami/Bearish Harami confermato da RSI:

Proprietà dei segnali dell'Expert Advisor

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

Modulo di segnali di trading aggiunto:

Proprietà dei segnali dell'Expert Advisor

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

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

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":

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 Expert_ABH_BH_RSI.mq5, salvato nella cartella 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 di soglia del segnale per aprire [0...100]
input int            Signal_ThresholdClose  =10;     // Valore di soglia del 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)

deve essere sostituito con:

//--- input per il segnale principale
input int            Signal_ThresholdOpen   =40;     // Valore di soglia del segnale per aprire [0...100]
input int            Signal_ThresholdClose  =20;     // Valore di soglia del 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 permettono di specificare i livelli di 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:

  • Apertura posizione: 80;
  • Chiusura posizione: 40;

L'Expert Advisor, generato da MQL5 Wizard, apre e chiude posizioni utilizzando i "voti" dei moduli di segnali di trading. Anche il voto del modulo principale (che funge da contenitore, composto da tutti i moduli aggiunti) è utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati dei voti del modulo principale sono utilizzati anche 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. Per questo motivo, le soglie di apertura e chiusura devono essere impostate 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, ciò significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere.


2.4. Risultati della backtest storica

Analizziamo la backtest dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.11, PeriodRSI=37, MA_period=7).

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

Risultati test dell'Expert Advisor

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


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

Il codice dell'Expert Advisor, creato con MQL5 Wizard, è allegato in expert_aml_rsi.mq5.


Post correlati

Commento (0)