Utilizzare MQL5 Wizard per Trading con Dark Cloud Cover e Piercing Line

Mike 2011.02.25 02:06 89 0 0
Allegato

Il MQL5 Wizard è uno strumento potente che consente di creare Expert Advisor (EA) pronti all'uso basati sulle classi della libreria standard fornite con il terminale client (puoi trovare ulteriori dettagli nell'articolo Creare Expert Advisor Pronti con MQL5 Wizard). Grazie a questo strumento, puoi 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 generale è la seguente: la classe dei segnali di trading deriva da CExpertSignal, e quindi è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi.

Esiste un libro "Strategie dei migliori trader" (in russo) in cui vengono esaminate molte strategie di trading. Noi ci concentreremo sui pattern di candlestick di inversione, confermati da Stochastic, CCI, MFI e RSI.

Il metodo migliore consiste nel creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei pattern di candlestick. Per confermare i segnali di trading generati dai pattern di candlestick, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori).

Qui ci concentreremo sui segnali basati sul pattern di candlestick di inversione "Dark Cloud Cover/Piercing Line", confermati dall'indicatore Stochastic. Il modulo di segnali di trading si basa sulla classe CCandlePattern, ed è un semplice esempio del suo utilizzo per la creazione di segnali di trading con pattern di candlestick.


1. Pattern di Inversione: "Dark Cloud Cover" e "Piercing Line"

1.1. Dark Cloud Cover

È un pattern di inversione ribassista che si verifica alla fine di un trend rialzista. Un lungo candlestick bianco si forma il primo giorno e si crea un gap al rialzo il secondo giorno. Tuttavia, il secondo giorno chiude sotto il punto medio del primo giorno.

Fig. 1. Pattern di candlestick 'Dark Cloud Cover'

Fig. 1. Pattern di candlestick "Dark Cloud Cover"

Il riconoscimento del pattern "Dark Cloud Cover" è implementato nel metodo CheckPatternDarkCloudCover() della classe CCandlePattern:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candlestick "Dark Cloud Cover" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//---Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (candlestick bianco lungo)
      (Close(1)<Close(2))            && //
       (Close(1)>Open(2)             && //(chiusura all'interno del corpo precedente)
      (MidOpenClose(2)>CloseAvg(1))  && // (trend rialzista)
      (Open(1)>High(2)))                // (apertura ad un nuovo massimo)
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candlestick "Dark Cloud Cover".


1.2. Piercing Line

Il gap al ribasso del secondo giorno perpetua il trend ribassista. Tuttavia, la chiusura del secondo giorno è sopra il punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un minimo. Questa azione di prezzo non è così evidente utilizzando i grafici a barre come lo è con i grafici a candlestick. Maggiore è la penetrazione della chiusura del secondo giorno nel corpo del primo giorno, maggiore sarà la probabilità che il segnale di inversione abbia successo.

Fig. 2. Pattern di candlestick 'Piercing Line'

Fig. 2. Pattern di candlestick "Piercing Line"

Il riconoscimento del pattern "Piercing Line" è implementato nel metodo CheckPatternPiercingLine() della classe CCandlePattern:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candlestick "Piercing Line" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//---Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (candlestick bianco lungo)
      (Open(2)-Close(2)>AvgBody(1)) && // (candlestick nero lungo)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2)            && // (chiusura all'interno del corpo precedente) 
      (MidOpenClose(2)<CloseAvg(2)) && // (trend ribassista)
      (Open(1)<Low(2)))                // (apertura sotto il minimo precedente) 
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) della classe CCandlePattern è utilizzato per controllare la formazione del pattern di candlestick "Piercing Line".


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 maggiore/minore dei livelli critici corrispondenti (30 o 70).

La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Può avvenire in 2 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)

Fig. 3. Pattern 'Dark Cloud Cover' confermato dall'indicatore Stochastic

Fig. 3. Pattern "Dark Cloud Cover", confermato dall'indicatore Stochastic


2.1. Aprire posizione lunga/Chiudere posizione corta

  1. La formazione del pattern "Piercing Line" 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) Entrata nel mercato (apri posizione lunga, risultato=80) |
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) |
//+------------------------------------------------------------------+
int CDC_PL_Stoch::LongCondition()
  {
   int result=0;
//--- idx può essere usato 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 a barre nuove
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire posizione lunga
//--- formazione del pattern di Piercing Line e linea di segnale<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (StochSignal(1)<30))
     result=80;
//--- controllo delle condizioni per chiudere posizione corta
//--- incrocio della linea di segnale nei 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;
//--- ritorna il risultato
   return(result);
  }

2.2. Aprire posizione corta/Chiudere posizione lunga

  1. La formazione del pattern "Dark Cloud Cover" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere maggiore di 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) Entrata nel mercato (apri posizione corta, risultato=80) |
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) |
//+------------------------------------------------------------------+
int CDC_PL_Stoch::ShortCondition()
  {
   int result=0;
//--- idx può essere usato 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 a barre nuove
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire posizione corta
//--- formazione del pattern di Dark Cloud Cover e linea di segnale>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (StochSignal(1)>70))
     result=80;
//--- controllo delle condizioni per chiudere posizione lunga
//--- incrocio della linea di segnale nei 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;
//--- ritorna il risultato
   return(result);
  }

2.3. Creare un Expert Advisor utilizzando MQL5 Wizard

La classe CDC_PL_Stoch non è inclusa nelle classi della libreria standard, per utilizzarla è necessario scaricare il file adc_pl_stoch.mqh (vedi allegati) e salvarlo nella cartella terminal_data_client\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file candlepatterns.mqh. Puoi usarlo in MQL5 Wizard dopo il riavvio del MetaEditor.

Per creare un Expert Advisor, avvia il MQL5 Wizard:

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

Fig. 4. Creazione di un Expert Advisor usando 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à 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 segnali Basato su Dark Cloud Cover/Piercing Line confermato da Stochastic:

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 money management dell'Expert Advisor

Fig. 9. Proprietà di money management dell'Expert Advisor

Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso":

Fig. 10. Proprietà di money management dell'Expert Advisor

Fig. 10. Proprietà di money management dell'Expert Advisor

Cliccando sul pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ADC_PL_Stoch.mq5, che sarà 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 da aprire [0...100]
input int            Signal_ThresholdClose  =10     // Valore soglia del segnale da 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)

deve essere sostituito con:

//--- input per il segnale principale
input int            Signal_ThresholdOpen   =40;     // Valore soglia del segnale da aprire [0...100]
input int            Signal_ThresholdClose  =20     // Valore soglia del segnale da 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 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. Il voto del modulo principale (come 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 vengono 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. A causa di questo fatto, le soglie di apertura e chiusura devono essere impostate 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

Esaminiamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.02.02, PeriodK=9, PeriodD=5, PeriodSlow=20, MA_period=27).

Durante la creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading con 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 Dark Cloud Cover/Piercing Line + Stochastic

Fig. 11. Risultati del test dell'Expert Advisor, basato su Dark Cloud Cover/Piercing Line + Stochastic


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

Il codice dell'Expert Advisor, creato da MQL5 Wizard, è allegato in expert_adc_pl_stoch.mq5.


Elenco
Commento 0