MQL5 Wizard: Strategia di Trading con Pattern Candlestick e MFI

Mike 2011.03.24 20:15 75 0 0
Allegato

Hai mai pensato a come ottimizzare le tue strategie di trading? Grazie al MQL5 Wizard, ora puoi creare Expert Advisor (EA) pronti all'uso basati sulle classi della libreria standard inclusa nel terminale cliente. Questo strumento ti permette di testare le tue idee di trading in modo rapido e semplice, basta creare la tua 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.

In breve, la classe di segnali di trading deriva da CExpertSignal. È necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati.

Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo) che analizza molte strategie di trading. Noi ci concentreremo sui pattern di inversione delle candlestick, confermati da indicatori come Stochastic, CCI, MFI e RSI.

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

In questo articolo, considereremo i segnali basati sui pattern di inversione "Bullish/Bearish Meeting Lines", confermati dall'indicatore MFI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, e qui ti mostreremo un semplice esempio di come utilizzarla per creare segnali di trading con i pattern delle candlestick.


1. Pattern di Inversione "Meeting Lines"

1.1. Bullish Meeting Lines

Il pattern è composto da due candlestick (una ribassista e una rialzista) con prezzi di chiusura uguali (o molto vicini). Il corpo delle due candlestick deve essere maggiore della lunghezza media del corpo.

Il pattern "Bullish Meeting Lines" indica l'inversione di un trend ribassista.

Pattern Bullish Meeting Lines

Fig. 1. Pattern "Bullish Meeting Lines"

Il riconoscimento del pattern "Bullish Meeting Lines" è implementato nel metodo CheckPatternBullishMeetingLines() della classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Controlla la formazione del pattern "Bullish Meeting Lines"    |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Bullish Meeting Lines
   if((Open(2)-Close(2)>AvgBody(1))
         && ((Close(1)-Open(1)>AvgBody(1))
         && (MathAbs(Close(1)-Close(2))< 0.1*AvgBody(1)))
     return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Bullish Meeting Lines".


1.2. Bearish Meeting Lines

Il pattern è composto da due candlestick (una rialzista e una ribassista) con prezzi di chiusura uguali (o molto vicini). Il corpo delle due candlestick deve essere maggiore della lunghezza media del corpo.

Il pattern "Bearish Meeting Lines" indica l'inversione di un trend rialzista.

Pattern Bearish Meeting Lines

Fig. 2. Pattern "Bearish Meeting Lines"

Il riconoscimento del pattern "Bearish Meeting Lines" è implementato nel metodo CheckPatternBearishMeetingLines() della classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Controlla la formazione del pattern "Bearish Meeting Lines"    |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- Bearish Meeting Lines
   if((Close(2)-Open(2)>AvgBody(1))
         && ((Open(1)-Close(1)>AvgBody(1))
         && (MathAbs(Close(1)-Close(2))< 0.1*AvgBody(1)))
     return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Bearish Meeting Lines".


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:

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

Pattern Bearish Meeting Lines, confermato dall'indicatore MFI

Fig. 3. Pattern "Bearish Meeting Lines", confermato dall'indicatore MFI


  • int CML_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
  • int CML_MFI::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 pattern "Bullish Meeting Lines" 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) Ingresso nel mercato (apri posizione lunga, risultato=80)     |
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)    |
//+------------------------------------------------------------------+
int CML_MFI::LongCondition()
  {
   int result=0;
//--- idx può essere utilizzato 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();
//--- controllo delle condizioni per aprire una posizione lunga
//--- formazione del pattern Bullish Meeting Lines e MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (MFI(1)<40))
     result=80;
//--- controllo delle condizioni per chiudere la 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 Meeting Lines" 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) Ingresso nel mercato (apri posizione corta, risultato=80)     |
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)    |
//+------------------------------------------------------------------+
int CML_MFI::ShortCondition()
  {
   int result=0;
//--- idx può essere utilizzato 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();
//--- controllo delle condizioni per aprire una posizione corta
//--- formazione del pattern Bearish Meeting Lines e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (MFI(1)>60))
     result=80;
//--- controllo delle condizioni per chiudere la 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 CML_MFI non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file aml_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. La stessa cosa deve essere fatta con il file acandlepatterns.mqh. Puoi utilizzare questi file in MQL5 Wizard dopo il riavvio del MetaEditor.

Per creare un Expert Advisor, avvia MQL5 Wizard:

Creazione Expert Advisor con MQL5 Wizard

Fig. 4. Creazione Expert Advisor con MQL5 Wizard

Specifichiamo il nome dell'Expert Advisor:

Proprietà generali dell'Expert Advisor

Fig. 5. Proprietà generali dell'Expert Advisor

Dopo di che, dobbiamo selezionare i moduli di segnali di trading da utilizzare.

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/Bearish Meeting Lines da MFI:

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 utilizzeremo "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 di scambio 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 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 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:

//--- input 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 soglia per aprire e chiudere le 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 le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, che consiste in 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 per la media dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fattore quando impostiamo i valori soglia. A causa di questo fattore, i valori 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 dei Backtesting Storici

Consideriamo il backtesting dell'Expert Advisor sui dati storici (EURUSD H1, periodo di test: 2000.01.01-2011.03.16, PeriodMFI=12, MA_period=4).

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

Risultati del Test dell'Expert Advisor

Fig. 11. Risultati del Test dell'Expert Advisor, basato su Bullish/Bearish Meeting Lines + MFI


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

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


Elenco
Commento 0