Home Trading Sistematico Post

Come Creare un Expert Advisor con MQL5 Wizard: Segnali di Trading Basati su Bullish e Bearish Meeting Lines + RSI

Allegato
321.zip (6.77 KB, Scarica 0 volte)

Il MQL5 Wizard è uno strumento fantastico che ti permette di creare Expert Advisor già pronti, utilizzando le classi della libreria standard fornite insieme al terminale client (per ulteriori dettagli, dai un'occhiata a Creazione di Expert Advisor in MQL5 Wizard). Questo strumento ti consente di testare rapidamente le tue idee di trading; tutto ciò che devi fare è creare una classe di segnali di trading personalizzata. 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 di base è semplice: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.

Un libro interessante è "Strategie dei Migliori Trader" (in russo), dove vengono analizzate molte strategie di trading. Qui ci concentreremo sui pattern di candlestick di inversione, 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 di candlestick. Per confermare i segnali di trading generati dai pattern di candlestick, è sufficiente scrivere una classe, derivata da CCandlePattern, e aggiungere le funzionalità necessarie (ad esempio, la conferma tramite oscillatori).

In questo articolo, analizzeremo i segnali basati sul pattern di candlestick "Bullish Meeting Lines", confermati dall'indicatore RSI (Relative Strength Index). Il modulo dei segnali di trading si basa sulla classe CCandlePattern, che è un semplice esempio di utilizzo per la creazione di segnali di trading con pattern di candlestick.

1. Pattern di Inversione "Meeting Lines"

1.1. Bullish Meeting Lines

Questo pattern è composto da due candlestick (uno ribassista e uno 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.

Fig. 1. 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)) && // lunga nera
     ((Close(1)-Open(1)>AvgBody(1)) && // lunga bianca
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))
     return(true);
//---
   return(false);
  }

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


1.2. Bearish Meeting Lines

Questo pattern è composto da due candlestick (un rialzista e un 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.

Fig. 2. 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)) && // lunga bianca
     ((Open(1)-Close(1)>AvgBody(1)) && // lunga nera
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))
     return(true);
//---
   return(false);
  }

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


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 dell'RSI deve essere inferiore/maggiore ai livelli critici (40 per una posizione lunga e 60 per una corta).

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

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

Figura 3. Pattern 'Bearish Meeting Lines', confermato dall'indicatore RSI

Fig. 3. "Bearish Meeting Lines" pattern, confermato dall'indicatore RSI


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

2.1. Apertura di una posizione lunga/Chiusura di una posizione corta

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

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

//+------------------------------------------------------------------+
//| Controlla le condizioni di ingresso e uscita dal mercato            |
//| 1) Ingresso nel mercato (apertura di posizione lunga, risultato=80) |
//| 2) Uscita dal mercato (chiusura di posizione corta, risultato=40)  |
//+------------------------------------------------------------------+
int CML_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 durante le barre di notizie
   int idx   =StartIndex();
   //--- controllo delle condizioni per aprire posizione lunga
   //--- formazione del pattern Bullish Meeting Lines e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (RSI(1)<40))
     result=80;
   //--- controllo delle condizioni per chiudere posizione corta
   //--- crossover della linea dei segnali sui livelli di overbought/oversold (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. Apertura di una posizione corta/Chiusura di una posizione lunga

  1. La formazione del pattern "Bearish Meeting Lines" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'indicatore RSI dell'ultima barra completata deve essere maggiore di 60).

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

//+------------------------------------------------------------------+
//| Controlla le condizioni di ingresso e uscita dal mercato            |
//| 1) Ingresso nel mercato (apertura di posizione corta, risultato=80) |
//| 2) Uscita dal mercato (chiusura di posizione lunga, risultato=40)  |
//+------------------------------------------------------------------+
int CML_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 durante le barre di notizie
   int idx   =StartIndex();
   //--- controllo delle condizioni per aprire posizione corta
   //--- formazione del pattern Bearish Meeting Lines e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (RSI(1)>60))
     result=80;
   //--- controllo delle condizioni per chiudere posizione lunga
   //--- crossover della linea dei segnali sui livelli di overbought/oversold (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 CML_RSI non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file acml_rsi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.mqh. Puoi utilizzarli in MQL5 Wizard dopo il riavvio di MetaEditor.

Per creare un Expert Advisor, avvia MQL5 Wizard:

Fig. 4. Creazione di Expert Advisor utilizzando MQL5 Wizard

Fig. 4. Creazione di Expert Advisor utilizzando MQL5 Wizard

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

Aggiungendo il modulo di segnali Basati su Bullish/Bearish Meeting Lines confermati da RSI:

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 useremo "Trailing Stop non usato":

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, useremo "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, 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 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)

deve essere sostituito 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 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 le posizioni utilizzando i "voti" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste in tutti i moduli aggiunti) è anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati dei voti del modulo principale vengono utilizzati anche per la media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi è necessario tenere conto di questo fattore quando si impostano i valori di soglia. A causa di questo fatto, i 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 del backtesting della storia

Analizziamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di testing: 2000.01.01-2011.03.01, PeriodRSI=11, MA_period=3).

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

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

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


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

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

Post correlati

Commento (0)