MQL5 Wizard: Creare Expert Advisor con Segnali di Trading Basati su Candlestick e Stochastic

Mike 2011.03.24 02:45 75 0 0
Allegato

Il MQL5 Wizard è uno strumento potente che permette di creare Expert Advisor (EA) pronti all'uso, basati sulle classi della Libreria Standard fornita con il terminale client (puoi approfondire nel link Creare Expert Advisor in MQL5 Wizard). Questo strumento ti consente di testare rapidamente le tue idee di trading, basta 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. Dovrai 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. Qui ci concentreremo sui modelli di candlestick di inversione, confermati dall'Stochastic, CCI, MFI e RSI.

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

Qui esamineremo i segnali basati sui modelli di candlestick di "Bullish/Bearish Meeting Lines", confermati dall'indicatore Stochastic. Il modulo dei segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con modelli di candlestick.

1. Modelli di Candlestick "Meeting Lines"

1.1. Bullish Meeting Lines

Il pattern consiste in due candlestick (bearish e bullish) 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 una tendenza al ribasso.

Fig. 1. Pattern

Figura 1. Pattern "Bullish Meeting Lines"

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

//+--------------------------------------------------------------------+
//| Controlla la formazione del pattern "Bullish Meeting Lines"  |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Bullish Meeting Lines
   if((Open(2)-Close(2)>AvgBody(1))              && // long black
     ((Close(1)-Open(1))>AvgBody(1))             && // long white
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // doji close
      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.1. Bearish Meeting Lines

Il pattern consiste in due candlestick (bullish e bearish) 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 una tendenza al rialzo.

Figura 2. Pattern

Figura 2. "Bearish Meeting Lines" pattern

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))             && // long white
     ((Open(1)-Close(1))>AvgBody(1))             && // long black
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // doji close
      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 Stochastic

I segnali di trading per aprire posizioni long o short devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere maggiore/minore dei livelli critici corrispondenti (30 o 70).

La chiusura della posizione aperta dipende dai valori dell'indicatore %D. Questo può avvenire in due casi:

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

Fig. 3. Pattern

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

  • int CML_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40);
  • int CML_Stoch::ShortCondition() - controlla le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40).

2.1. Aprire Posizione Long/Chiudere Posizione Short

  1. La formazione del pattern "Bullish Meeting Lines" 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 short deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha attraversato 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 long, risultato=80)                  |
//| 2) Uscita dal mercato (chiudi posizione short, risultato=40)             |
//+------------------------------------------------------------------+
int CML_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 ad ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire posizione long
//--- formazione del pattern Bullish Meeting Lines e linea segnale<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (StochSignal(1)<30))
     result=80;
//--- controllo delle condizioni per chiudere posizione short
//--- crossover della linea 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 Short/Chiudere Posizione Long

  1. La formazione del pattern "Bearish Meeting Lines" 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 long deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha attraversato 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 short, risultato=80)                 |
//| 2) Uscita dal mercato (chiudi posizione long, risultato=40)             |
//+------------------------------------------------------------------+
int CML_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 ad ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo alle barre di notizie
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire posizione short
//--- formazione del pattern Bearish Meeting Lines e linea segnale>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (StochSignal(1)>70))
     result=80;
//--- controllo delle condizioni per chiudere posizione long
//--- crossover della linea 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. Creare un Expert Advisor utilizzando MQL5 Wizard

La classe CML_Stoch non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file acml_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio di 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 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 basati su Bullish/Bearish Meeting Lines confermati 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 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 money management, utilizzeremo "Trading con volume fisso":

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

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

Premendo il bottone "Finish", otterremo il codice dell'Expert Advisor generato, situato in Expert_AML_Stoch.mq5, che sarà salvato nella cartella terminal_data_folder\MQL5\Experts\.

I parametri di input di default dell'Expert Advisor generato sono:

//--- inputs 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:

//--- inputs 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:

  • 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. Il voto del modulo principale (come contenitore, che consiste in tutti i moduli aggiunti) viene utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati dei voti del modulo principale sono anche utilizzati nell'"averaging" 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 soglia. A causa di questo, 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

Esaminiamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2005.01.01-2010.03.16, PeriodK=6, PeriodD=3, PeriodSlow=36, MA_period=3).

Nel creare l'Expert Advisor, abbiamo utilizzato il volume fisso (Trading a 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 Bullish/Bearish Meeting Lines + Stochastic

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


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

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


Elenco
Commento 0