MQL5 Wizard: Strategie di Trading con Pattern Candlestick e MFI

Mike 2011.03.10 19:55 83 0 0
Allegato

Il MQL5 Wizard è uno strumento potente per creare Expert Advisor già pronti, sfruttando le classi della Libreria Standard fornite con il terminale client. Questo ti consente di testare rapidamente le tue idee di trading, basta 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 è la seguente: la classe di segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi.

Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), dove vengono considerate molte strategie di trading; qui ci concentreremo sui pattern di inversione delle candele, confermati dagli oscillatori Stochastic, CCI, MFI e RSI.

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

Qui considereremo i segnali basati sul pattern di inversione candlestick "Bullish Engulfing/Bearish Engulfing", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo di segnali di trading si basa sulla classe CCandlePattern, un esempio semplice del suo utilizzo per la creazione di segnali di trading con pattern di candele.

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

1.1. Bullish Engulfing

Il pattern "Bullish Engulfing" si forma in un trend ribassista 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, il che consente al corpo della grande candela di coprire l'intera candela del giorno precedente.

Fig. 1. Pattern candlestick

Fig. 1. Pattern "Bullish Engulfing"

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

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern "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))  &&  // trend ribassista
      (Open(1)<Close(2)))                // il prezzo di apertura della candela rialzista è inferiore al prezzo di chiusura della ribassista
      return(true);
//---
   return(false);
  }

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


1.2. Bearish Engulfing

Il pattern "Bearish Engulfing" si forma in un trend rialzista 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, il che consente al corpo della grande candela di coprire l'intera candela del giorno precedente.

Fig. 2. Pattern candlestick

Fig. 2. Pattern "Bearish Engulfing"

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

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern "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)) &&  // trend rialzista
      (Open(1)>Close(2)))               // il prezzo di apertura della candela ribassista è superiore al prezzo di chiusura della rialzista
      return(true);
//---
   return(false);
  }

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


2. Segnali di Trading, Confermati dall'Indicatore MFI

I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni lunghe) o superiore a 60 (per posizioni corte).

La chiusura delle posizioni aperte dipende dai valori dell'indicatore MFI. Può avvenire in 2 casi:

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

Fig. 3. Pattern

Fig. 3. Pattern "Bullish Engulfing", confermato dall'indicatore MFI


  • int CBE_BE_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (ritorna 80) e chiudere quella corta (ritorna 40);
  • int CBE_BE_MFI::ShortCondition() - controlla le condizioni per aprire una posizione corta (ritorna 80) e chiudere quella lunga (ritorna 40).

2.1. Aprire Posizione Lunga/Chiudere Posizione Corta

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

  2. La posizione corta deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30).

//+------------------------------------------------------------------+
//| Controlla le condizioni per entrare e uscire dal mercato|
//| 1) Entrata nel mercato (apri posizione lunga, risultato=80)|
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)|
//+------------------------------------------------------------------+
int CBE_BE_MFI::LongCondition()
  {
   int result=0;
//--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor
//--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick
//--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione lunga
//--- formazione del pattern Bullish Engulfing e MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (MFI(1)<40))
     result=80;
//--- controllo delle condizioni per chiudere posizione corta
//--- crossover della linea di segnale dei livelli di ipercomprato/ipervenduto (verso l'alto 30, verso l'alto 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- ritorna il risultato
   return(result);
  }


2.2. Aprire Posizione Corta/Chiudere Posizione Lunga

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

  2. La posizione lunga deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30).

//+------------------------------------------------------------------+
//| Controlla le condizioni per entrare e uscire dal mercato|
//| 1) Entrata nel mercato (apri posizione corta, risultato=80)|
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)|
//+------------------------------------------------------------------+
int CBE_BE_MFI::ShortCondition()
  {
   int result=0;
//--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor
//--- idx=0 - in questo caso EA controlla le condizioni di trading ad ogni tick
//--- idx=1 - in questo caso EA controlla le condizioni di trading solo alle barre di notizie
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione corta
//--- formazione del pattern Bearish Engulfing e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (MFI(1)>60))
     result=80;
//--- controllo delle condizioni per chiudere posizione lunga
//--- crossover della linea di segnale dei livelli di ipercomprato/ipervenduto (verso l'alto 70, verso il basso 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- ritorna il risultato
   return(result);
  }


2.3. Creare un Expert Advisor utilizzando MQL5 Wizard

La classe CBE_BE_MFI non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file abe_be_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.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 con MQL5 Wizard

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

Specifica 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.

Aggiungiamo il modulo Segnali basati su Bullish Engulfing/Bearish Engulfing confermati da MFI:

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 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, situato in Expert_ABE_BE_MFI.mq5, che sarà salvato nella cartella terminal_data_folder\MQL5\Experts\.

I parametri di input predefiniti dell'Expert Advisor generato:

//--- inputs per il segnale principale
input int            Signal_ThresholdOpen   =10;     // Valore soglia del segnale per aprire [0...100]
input int            Signal_ThresholdClose  =10;     // Valore soglia del 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:

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

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

  • Apri posizione: 80;
  • Chiudi 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) è anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati dei voti del modulo principale sono anche utilizzati nell'"averaging" dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fattore nella impostazione dei valori soglia. Per questo motivo, ThresholdOpen e ThresholdClose devono essere impostati come 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.16, PeriodMFI=37, MA_period=5).

Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading a Lotto Fisso, 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 + MFI

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


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

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


Elenco
Commento 0