Guida Pratica all'Utilizzo di MQL5 Wizard per Strategie di Trading con Stochastic

Mike 2011.03.26 01:11 86 0 0
Allegato

Il MQL5 Wizard è uno strumento fantastico che consente di creare Expert Advisor (EA) pronti all'uso, sfruttando le classi della libreria standard fornita con il terminale client. Questo strumento è ideale per testare rapidamente le tue idee di trading, 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.

L'idea di base è la seguente: la classe dei segnali di trading deriva da CExpertSignal. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati.

Ci sono diverse strategie di trading che puoi esplorare, come descritto nel libro "Strategie dei Migliori Trader" (in russo), dove vengono trattati vari pattern di inversione delle candele, confermati da indicatori come Stochastic, CCI, MFI e RSI.

La soluzione migliore è creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei pattern di candele. Per confermare i segnali di trading generati dai pattern 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 sui pattern di inversione "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star), 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 pattern di candele.


1. Pattern di inversione di candele "Morning Star" e "Evening Star"

1.1. Morning Star

Questo pattern indica l'inversione di una tendenza ribassista ed è composto da tre candele (Fig. 1). Dopo una lunga candela nera, appare una candela (il colore non è importante) con un corpo piccolo, che si trova al di fuori del corpo della candela nera. Questo corpo piccolo indica che la forza tra tori e orsi è equilibrata e che il mercato è pronto a cambiare tendenza.

La terza candela del pattern è una candela rialzista, il cui corpo non si sovrappone a quello della seconda candela, e il prezzo di chiusura si trova all'interno del corpo della prima candela (ribassista). La candela risultante del modello è rappresentata anche nella Figura 1.

Nel caso in cui la seconda candela sia simile a un doji, il modello è chiamato "Morning Doji Star".

Figura 1. Pattern di candele 'Morning Star' e 'Morning Doji Star'

Figura 1. Pattern di candele 'Morning Star' e 'Morning Doji Star'

L'identificazione del pattern "Morning Star" viene implementata nei metodi CheckPatternMorningStar() e CheckPatternMorningDoji() della classe CCandlePattern:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern "Morning Star"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1))             && // candela ribassista, il suo corpo è maggiore del corpo medio
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la seconda candela ha un corpo piccolo (inferiore alla metà del corpo medio)
      (Close(2)<Close(3))                       && // chiusura della seconda candela è inferiore alla chiusura della prima
      (Open(2)3))                     && // apertura della seconda candela è inferiore all'apertura della prima
      (Close(1)>MidOpenClose(3)))                  // chiusura dell'ultima candela completata è superiore al centro della prima
      return(true);
//---
   return(false);
  }

I metodi CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) della classe CCandlePattern vengono utilizzati per controllare la formazione dei pattern di candele "Morning Star" e "Morning Doji Star".


1.2. Evening Star

Questo pattern indica l'inversione di una tendenza rialzista ed è composto anch'esso da tre candele (Fig. 2). Dopo una lunga candela bianca, appare una candela (il colore non è importante) con un corpo piccolo, che si trova al di fuori del corpo della candela bianca. Anche in questo caso, il corpo piccolo indica un equilibrio tra tori e orsi, suggerendo un possibile cambio di tendenza.

La terza candela è ribassista, il cui corpo non si sovrappone a quello della seconda candela, e il prezzo di chiusura si trova all'interno del corpo della prima candela (rialzista). In caso di una seconda candela simile a un doji, il modello è chiamato "Evening Doji Star".

Figura 2. Pattern di candele 'Evening Star' e 'Evening Doji Star'

Figura 2. Pattern di candele 'Evening Star' e 'Evening Doji Star'

I metodi per identificare i pattern "Evening Star" e "Evening Doji Star" sono i seguenti:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern "Evening Star"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))             && // candela rialzista con corpo maggiore del corpo medio
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la seconda candela ha un corpo piccolo (inferiore alla metà del corpo medio)
      (Close(2)>Close(3))                   && // chiusura della seconda candela è superiore alla chiusura della prima
      (Open(2)>Open(3))                         && // apertura della seconda candela è superiore all'apertura della prima
      (Close(1)<MidOpenClose(3)))                  // chiusura dell'ultima candela completata è inferiore al centro della prima
      return(true);
//---
   return(false);
  }

I metodi CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) della classe CCandlePattern vengono utilizzati per controllare la formazione dei pattern di candele "Evening Star" e "Evening Doji Star".


2. Segnali di trading, confermati dall'indicatore Stochastic

I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere superiore o inferiore al livello critico corrispondente (30 o 70).

La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Può essere effettuata in due casi:

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

Figura 3. Pattern 'Evening Star' confermato dall'indicatore Stochastic

Figura 3. Pattern 'Evening Star' confermato dall'indicatore Stochastic



  • int CH_HM_Stoch::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
  • int CH_HM_Stoch::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 "Morning Star" 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 corta 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 lunga, risultato=80)             |
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)          |
//+------------------------------------------------------------------+
int CMS_ES_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 a ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre di notizie
  int idx   =StartIndex();
//--- controlla le condizioni per aprire posizione lunga
//--- formazione del pattern Morning Star e linea di segnale<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30))
     result=80;
//--- controlla le condizioni per chiudere posizione corta
//--- crossover della linea di segnale dei livelli di ipercomprato/ipervenduto (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. Aprire posizione corta / Chiudere posizione lunga

  1. La formazione del pattern "Evening Star" 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 lunga 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 corta, risultato=80)                  |
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)                      |
//+------------------------------------------------------------------+
int CMS_ES_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 a ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo durante le barre di notizie
  int idx   =StartIndex();
//--- controlla le condizioni per aprire posizione corta
//--- formazione del pattern Evening Star e linea di segnale>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70))
     result=80;
//--- controlla le condizioni per chiudere posizione lunga
//--- crossover della linea di segnale dei livelli di ipercomprato/ipervenduto (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 CMS_ES_Stoch non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file acms_es_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso vale per il file candlepatterns.mqh. Dopo aver fatto ciò, puoi utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor.

Per creare un Expert Advisor, lancia 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, dobbiamo selezionare i moduli dei 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 di trading:

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 di trade fisso":

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

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

Cliccando sul pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_AMS_ES_Stoch.mq5, che verrà salvato 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 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)

Le variabili di input Signal_ThresholdOpen/Signal_ThresholdClose permettono 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 valori fissi per le soglie:

  • Aprire posizione: 80;
  • Chiudere posizione: 40.

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

Risultati di voto 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 tener conto di questo fattore quando impostiamo i valori delle soglie. A causa di questo, ThresholdOpen e ThresholdClose devono essere impostati rispettivamente a 40=(0+80)/2 e 20=(0+40)/2.

I valori di Signal_StopLevel e Signal_TakeLevel delle variabili di input 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 della storia

Analizziamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).

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

Fig. 11. Risultati del test dell'Expert Advisor, basato su Morning/Evening Stars + Stochastic

Fig. 11. Risultati del test dell'Expert Advisor, basato su Morning/Evening Stars + Stochastic


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

Il codice dell'Expert Advisor creato con MQL5 Wizard è allegato nel file expert_ams_es_stoch.mq5.

Elenco
Commento 0