Home Trading Sistematico Post

MQL5 Wizard: Crea un Expert Advisor per segnali di trading basati su Morning/Evening Star e CCI

Allegato
322.zip (6.46 KB, Scarica 0 volte)

Il MQL5 Wizard è uno strumento fantastico che ti permette di generare esperti pronti all'uso, sfruttando le classi della libreria standard fornita con il terminale client. Grazie a questo, puoi testare rapidamente le tue idee di trading; tutto ciò che devi fare è 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. Poi, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati.

Esiste un libro "Strategie dei migliori traders" (in russo), che esplora molte strategie di trading. Qui ci concentreremo sui pattern di candela di inversione, confermati da Stochastic, CCI, MFI e RSI.

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

1. Pattern di candela di inversione: "Morning Star" e "Evening Star"

1.1. Morning Star

Questo pattern indica un'inversione di tendenza al ribasso ed è composto da tre candele (Fig. 1). Dopo una lunga candela nera, c'è una candela (il colore non è importante) con un corpo piccolo, che si trova al di fuori del corpo della candela nera. Il piccolo corpo indica che la forza dei tori e degli orsi è pari e il mercato è pronto per cambiare tendenza.

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

Se la seconda candela è simile a un doji, il modello prende il nome di "Morning Doji Star".

Fig. 1. Pattern di candela Morning Star e Morning Doji Star

Fig. 1. Pattern di candela "Morning Star" e "Morning Doji Star"

L'identificazione del pattern "Morning Star" è 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
      (Close(2)<Close(3)) && // chiusura della seconda candela è inferiore alla chiusura della prima
      (Open(2)<Open(3)) && // apertura della seconda candela è inferiore all'apertura della prima
      (Close(1)>MidOpenClose(3))) // chiusura dell'ultima candela è 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 candela "Morning Star" e "Morning Doji Star".


1.2. Evening Star

Questo pattern indica l'inversione di tendenza al rialzo ed è composto anch'esso da tre candele (Fig. 2). Dopo una lunga candela bianca, c'è una candela (il colore non è importante) con un corpo piccolo, che si trova al di fuori del corpo della candela bianca. Il piccolo corpo indica che la forza dei tori e degli orsi è pari e il mercato è pronto per cambiare tendenza.

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

Se la seconda candela è simile a un doji, il modello prende il nome di "Evening Doji Star".

Fig. 2. Pattern di candela Evening Star e Evening Doji Star

Fig. 2. Pattern di candela "Evening Star" e "Evening Doji Star"

Qui ci sono i metodi per identificare i pattern "Evening Star" e "Evening Doji Star":

//+------------------------------------------------------------------+
//| 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
      (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 è 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 candela "Evening Star" e "Evening Doji Star".


2. Segnali di Trading Confermati dall'Indicatore CCI

I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore CCI. Il valore del CCI deve essere superiore/inferiore ai livelli critici (-50 per posizioni lunghe e 50 per posizioni corte).

La chiusura delle posizioni aperte dipende dai valori del CCI. Può avvenire in due casi:

  • se la linea CCI ha raggiunto il livello critico opposto (80 per posizione lunga e -80 per posizione corta)
  • se il segnale inverso non è confermato (quando il CCI raggiunge i seguenti livelli: -80 per posizione lunga e 80 per posizione corta)

Fig. 3. Pattern Evening Star confermato dall'indicatore CCI

Fig. 3. Pattern "Evening Star" confermato dall'indicatore CCI


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

2.1. Aprire posizione lunga/Chiudere posizione corta

  1. La formazione del pattern "Morning Star" deve essere confermata dall'indicatore CCI: CCI(1)<-50 (il valore del CCI dell'ultima barra completata deve essere inferiore a -50).

  2. La posizione corta deve essere chiusa se l'indicatore CCI ha attraversato verso l'alto il livello critico -80 o attraversato verso il basso il livello critico 80.

//+------------------------------------------------------------------+
//| Controlla le condizioni per l'entrata e l'uscita dal mercato       |
//| 1) Entrata nel mercato (apri posizione lunga, risultato=80)      |
//| 2) Uscita dal mercato (chiudi posizione corta, risultato=40)     |
//+------------------------------------------------------------------+
int CMS_ES_CCI::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 una posizione lunga
   //--- formazione del pattern Morning Star e CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
   //--- controllo delle condizioni per chiudere la posizione corta
   //--- crossover della linea di segnale sui livelli di ipercomprato/ipersoldato (verso il basso -80, verso l'alto -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(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 CCI: CCI(1)>50 (il valore del CCI dell'ultima barra completata deve essere superiore a 50).

  2. La posizione lunga deve essere chiusa se l'indicatore CCI ha attraversato verso il basso -80 o 80.

//+------------------------------------------------------------------+
//| Controlla le condizioni per l'entrata e l'uscita dal mercato       |
//| 1) Entrata nel mercato (apri posizione corta, risultato=80)      |
//| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40)     |
//+------------------------------------------------------------------+
int CMS_ES_CCI::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 una posizione corta
   //--- formazione del pattern Evening Star e CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
   //--- controllo delle condizioni per chiudere la posizione lunga
   //--- crossover della linea di segnale sui livelli di ipercomprato/ipersoldato (verso il basso -80, verso l'alto 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
   //--- restituisci il risultato
   return(result);
}

2.3. Creazione dell'Expert Advisor utilizzando MQL5 Wizard

La classe CMS_ES_CCI non è inclusa nelle classi della Libreria Standard; per utilizzarla, è necessario scaricare il file acms_es_cci.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data_folder\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 MQL5 Wizard:

Fig. 4. Creazione dell'Expert Advisor utilizzando MQL5 Wizard

Fig. 4. Creazione dell'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, selezioniamo 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: Segnali basati su Morning/Evening Stars confermati da CCI:

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 useremo "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, useremo "Trading con volume fisso":

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

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

Premendo il pulsante "Finisci", otterremo il codice dell'Expert Advisor generato, situato in Expert_AMS_ES_CCI.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 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 di 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" dei moduli di segnali di trading. Il voto del modulo principale (come contenitore, è composto da tutti i moduli aggiunti) è anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati dei voti del modulo principale sono anche utilizzati per la media dei voti. Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tenere conto di questo fatto nella definizione dei valori soglia. Per questo motivo i valori ThresholdOpen e ThresholdClose devono essere impostati rispettivamente 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

Consideriamo il backtesting dell'Expert Advisor sui dati storici (EURUSD H1, periodo di test: 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), non utilizziamo l'algoritmo del Trailing Stop (Trailing non utilizzato).

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

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


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 dal MQL5 Wizard, è allegato in expert_ams_es_cci.mq5.


Post correlati

Commento (0)