Home Trading Sistematico Post

MQL5 Wizard: Strategia di Trading con Dark Cloud Cover/Piercing Line e RSI

Allegato
300.zip (6.5 KB, Scarica 0 volte)

Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor pronti all'uso, basati su classi della libreria standard fornite con il terminale client (dai un'occhiata all'articolo Creare Expert Advisor con MQL5 Wizard per ulteriori dettagli). Ti permette di testare rapidamente le tue idee di trading, basta creare la 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 dei segnali di trading deriva da CExpertSignal. È necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.

Un libro interessante è "Strategie dei migliori trader" (in russo), dove si analizzano molte strategie di trading. Focusiamoci sui pattern di inversione delle candele, confermati da 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, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori).

Qui consideriamo i segnali basati sui pattern di inversione "Dark Cloud Cover/Piercing Line", confermati dall'indicatore RSI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che rappresenta un esempio semplice del suo utilizzo per la creazione di segnali di trading con i pattern delle candele.


1. Pattern di inversione "Dark Cloud Cover" e "Piercing Line"

1.1. Dark Cloud Cover

Si tratta di un pattern di inversione ribassista che si verifica alla fine di un trend rialzista. Si forma una lunga candela bianca il primo giorno e si crea un gap al rialzo il secondo giorno. Tuttavia, il secondo giorno chiude al di sotto del punto medio del primo giorno.

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

Figura 1. Pattern di candela 'Dark Cloud Cover'

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

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candela 'Dark Cloud Cover' |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (lunga candela bianca)
      (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 a nuovi massimi)
      return(true);
//---
   return(false);
  }

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


1.2. Piercing Line

Il gap al ribasso del secondo giorno perpetua il trend ribassista. Tuttavia, la chiusura del secondo giorno è al di sopra del punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un fondo. Questa azione di prezzo non è facilmente discernibile usando i grafici a barre come lo è con i grafici a candele. Maggiore è la penetrazione della chiusura del secondo giorno nel corpo del primo giorno, più probabile sarà il successo del segnale di inversione.

Fig. 2. Pattern di candela 'Piercing Line'

Fig. 2. Pattern di candela 'Piercing Line'

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

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern di candela 'Piercing Line' |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (lunga candela bianca)
      (Open(2)-Close(2)>AvgBody(1)) && // (lunga candela nera)
      (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 inferiore al precedente minimo) 
      return(true);
//---
   return(false);
  }

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


2. Segnali di trading, confermati dall'indicatore RSI

I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore RSI. Il valore di RSI deve essere inferiore/maggiore ai livelli critici (40 per posizioni lunghe e 60 per posizioni corte).

La chiusura delle posizioni aperte dipende dai valori di RSI. Si può effettuare in due casi:

  1. se RSI ha raggiunto il livello critico opposto (70 per posizioni lunghe e 30 per posizioni corte)
  2. se il segnale di inversione non è confermato (quando RSI raggiunge i seguenti livelli: 30 per posizioni lunghe e 70 per posizioni corte)

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

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


  • int CDC_PL_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
  • int CDC_PL_RSI::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 "Piercing Line" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima barra chiusa deve essere inferiore a 40).

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

//+------------------------------------------------------------------+
//| Controlla le condizioni per entrare ed uscire dal mercato         |
//| 1) Entrata nel mercato (apri posizione lunga, risultato=80)        |
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)         |
//+------------------------------------------------------------------+
int CDC_PL_RSI::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 ad ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle nuove barre
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione lunga
//--- formazione del pattern Piercing Line e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40))
     result=80;
//--- controllo delle condizioni per chiudere la posizione corta
//--- incrocio della linea di segnale dei livelli di ipercomprato/ipervenduto (verso l'alto 30, verso l'alto 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- restituisci 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 RSI: RSI(1)>60 (il valore dell'RSI dell'ultima barra chiusa deve essere maggiore di 60).

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

//+------------------------------------------------------------------+
//| Controlla le condizioni per entrare ed uscire dal mercato         |
//| 1) Entrata nel mercato (apri posizione corta, risultato=80)         |
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)        |
//+------------------------------------------------------------------+
int CDC_PL_RSI::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 ad ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle nuove barre
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione corta
//--- formazione del pattern Dark Cloud Cover e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60))
     result=80;
//--- controllo delle condizioni per chiudere la posizione lunga
//--- incrocio della linea di segnale dei livelli di ipercomprato/ipervenduto (verso il basso 70, verso il basso 30)
  if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- restituisci il risultato
   return(result);
  }


2.3. Creare un Expert Advisor utilizzando MQL5 Wizard

La classe CDC_PL_RSI non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file adc_pl_rsi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file acandlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor.

Per creare un Expert Advisor, avvia 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 di che dobbiamo selezionare i moduli dei segnali di trading utilizzati.

Fig. 6. Proprietà del segnale dell'Expert Advisor

Fig. 6. Proprietà del segnale dell'Expert Advisor

Nel nostro caso utilizziamo solo un modulo di segnali di trading.

Aggiungendo il modulo Segnali basati su Dark Cloud Cover/Piercing Line confermati da RSI:

Fig. 7. Proprietà del segnale dell'Expert Advisor

Fig. 7. Proprietà del segnale dell'Expert Advisor

Modulo di segnali di trading aggiunto:

Fig. 8. Proprietà del segnale dell'Expert Advisor

Fig. 8. Proprietà del segnale dell'Expert Advisor

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

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

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

Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume di scambio 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, 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 per aprire [0...100]
input int            Signal_ThresholdClose  =10;     // Valore soglia 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)

deve essere sostituito con:

//--- input per il segnale principale
input int            Signal_ThresholdOpen   =40;     // Valore soglia per aprire [0...100]
input int            Signal_ThresholdClose  =20;     // Valore soglia 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 l'apertura e la chiusura delle posizioni.

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

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

L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dai moduli di segnali di trading. Anche il voto del modulo principale (come contenitore, che consiste di tutti i moduli aggiunti) viene 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 fatto quando impostiamo i valori soglia. A causa di questo fatto, i 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 sui dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14).

Nella creazione dell'Expert Advisor abbiamo utilizzato un volume fisso (Trading Fixed Lot, 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 + RSI

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


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

Il codice dell'Expert Advisor, creato dal MQL5 Wizard è allegato in expert_ad_pl_rsi.mq5.


Post correlati

Commento (0)