Il MQL5 Wizard permette di creare Expert Advisor pronti all'uso basati sulle classi della Standard Library, fornite insieme al terminale client (per maggiori dettagli, consulta Creazione di Expert Advisor in MQL5 Wizard). Questo strumento ti consente di verificare 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 Trading Signals.
L'idea generale è la seguente: la classe dei segnali di trading è derivata da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.
Esiste un libro intitolato "Strategie dei migliori trader" (in russo) che considera molte strategie di trading. Qui ci concentreremo sui modelli di candela di inversione, confermati da Stochastic, CCI, MFI e RSI.
Il modo migliore è creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei modelli di candela. Per confermare i segnali di trading generati dai modelli di candela, basta scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori).
In questo articolo considereremo i segnali basati sui modelli di candela "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star), confermati dall'indicatore MFI. Il modulo di segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con i modelli di candela.
1. Modelli di candela di inversione "Morning Star" e "Evening Star"
1.1. Morning Star
Questo modello indica l'inversione di un trend ribassista, ed è composto da tre candele (Fig. 1). Dopo una lunga candela nera, si presenta una candela (il colore non è importante) con un corpo piccolo, che si trova al di fuori del corpo della candela nera. Il corpo piccolo della candela indica che le forze dei tori e degli orsi sono uguali e che il mercato è pronto a cambiare trend.
La terza candela del modello è una 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 è mostrata anche nella Figura 1.
Nel caso in cui la seconda candela sia una candela doji, il modello viene chiamato "Morning Doji Star".

Fig. 1. Modelli di candela "Morning Star" e "Morning Doji Star"
L'identificazione del modello "Morning Star" è implementata nei metodi CheckPatternMorningStar() e CheckPatternMorningDoji() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica la formazione del modello "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 (inferiore alla metà del corpo medio) (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 completata superiore al centro della prima return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Verifica la formazione del modello "Morning Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Morning Doji Star if((Open(3)-Close(3)>AvgBody(1)) && // candela ribassista con corpo maggiore del corpo medio (AvgBody(2)<AvgBody(1)*0.1) && // la seconda candela ha un corpo molto piccolo (doji) (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 (Open(1)>Close(2)) && // gap rialzista nell'ultima candela completata (Close(1)>Close(2))) // chiusura dell'ultima candela completata superiore alla chiusura della seconda return(true); //--- return(false); }
I metodi CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) della classe CCandlePattern sono utilizzati per verificare la formazione dei modelli di candela "Morning Star" e "Morning Doji Star".
1.2. Evening Star
Questo modello indica l'inversione di un trend rialzista, ed è composto anch'esso da tre candele (Fig. 2). Dopo una lunga candela bianca, si presenta una candela (il colore non è importante) con un corpo piccolo, che si trova al di fuori del corpo della candela bianca. Il corpo piccolo della candela significa che le forze dei tori e degli orsi sono uguali e che il mercato è pronto a cambiare trend.
La terza candela del modello è una 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 è mostrata anche nella Figura 2.
Nel caso in cui la seconda candela sia una candela doji, il modello viene chiamato "Evening Doji Star".

Fig. 2. Modelli di candela "Evening Star" e "Evening Doji Star"
Ecco i metodi per identificare i modelli di "Evening Star" e "Evening Doji Star":
//+------------------------------------------------------------------+ //| Verifica la formazione del modello "Evening Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Evening Star if((Close(3)-Open(3)>AvgBody(1)) && // candela rialzista con corpo superiore al corpo medio (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la seconda candela ha un corpo piccolo (inferiore alla metà del corpo medio) (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 completata inferiore al centro della prima return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Verifica la formazione del modello "Evening Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Evening Doji Star if((Close(3)-Open(3)>AvgBody(1)) && // candela rialzista con corpo maggiore del corpo medio (AvgBody(2)<AvgBody(1)*0.1) && // la seconda candela ha un corpo molto piccolo (doji) (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 (Open(1)<Close(2)) && // gap ribassista nell'ultima candela completata (Close(1)<Close(2))) // chiusura dell'ultima candela completata inferiore alla chiusura della seconda return(true); //--- return(false); }
I metodi CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) della classe CCandlePattern sono utilizzati per verificare la formazione dei modelli di candela "Evening Star" e "Evening Doji Star".
2. Segnali di trading, confermati dall'indicatore MFI
I segnali di trading per aprire posizioni long o short devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni long) o superiore a 60 (per posizioni short).
La chiusura delle posizioni aperte dipende dai valori dell'indicatore MFI. Questo può avvenire in 2 casi:
- se l'MFI ha raggiunto il livello critico opposto (70 per posizione long e 30 per posizione short)
- se il segnale inverso non è confermato (quando l'indicatore MFI raggiunge i seguenti livelli: 30 per posizione long e 70 per posizione short)

Figura 3. Il modello 'Morning Star', confermato dall'indicatore MFI
- int CMS_ES_MFI::LongCondition() - verifica le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40);
- int CMS_ES_MFI::ShortCondition() - verifica le condizioni per aprire una posizione short (restituisce 80) e chiudere la posizione long (restituisce 40).
2.1. Aprire posizione long/Chiudere posizione short
La formazione del modello "Morning Star" deve essere confermata dall'indicatore MFI: MFi(1)<40 (il valore dell'indicatore MFI dell'ultima barra completata deve essere inferiore a 40).
La posizione short deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30).
//+------------------------------------------------------------------+ //| Verifica le condizioni per entrare e uscire dal mercato | //| 1) Entrata nel mercato (apri posizione long, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione short, risultato=40) | //+------------------------------------------------------------------+ int CMS_ES_MFI::LongCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA verifica le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA verifica le condizioni di trading solo nelle barre di notizie int idx =StartIndex(); //--- verifica delle condizioni per aprire posizione long //--- formazione del modello Morning Star e MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40)) result=80; //--- verifica delle condizioni per chiudere la posizione short //--- crossover della linea del segnale dei livelli di overbought/oversold (verso l'alto 30, verso l'alto 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- restituisci il risultato return(result); }
2.2. Aprire posizione short/Chiudere posizione long
La formazione del modello "Evening Star" deve essere confermata dall'indicatore MFI: MFI(1)>60 (il valore dell'indicatore MFI dell'ultima barra completata deve essere superiore a 60).
La posizione long deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30).
//+------------------------------------------------------------------+ //| Verifica le condizioni per entrare e uscire dal mercato | //| 1) Entrata nel mercato (apri posizione short, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione long, risultato=40) | //+------------------------------------------------------------------+ int CMS_ES_MFI::ShortCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso l'EA verifica le condizioni di trading ad ogni tick //--- idx=1 - in questo caso l'EA verifica le condizioni di trading solo nelle barre di notizie int idx =StartIndex(); //--- verifica delle condizioni per aprire posizione short //--- formazione del modello Evening Star e MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60)) result=80; //--- verifica delle condizioni per chiudere la posizione long //--- crossover della linea del segnale dei livelli di overbought/oversold (verso l'alto 70, verso il basso 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- restituisci il risultato return(result); }
2.3. Creare un Expert Advisor utilizzando MQL5 Wizard
La classe CMS_ES_MFI non è inclusa nelle classi della Standard Library; per utilizzarla, è necessario scaricare il file ams_es_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file acandlepatterns.mqh. Puoi usarli in MQL5 Wizard dopo il riavvio del MetaEditor.
Per creare un Expert Advisor, lancia MQL5 Wizard:

Fig. 4. Creazione di Expert Advisor utilizzando MQL5 Wizard
Specifichiamo il nome 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à dei segnali dell'Expert Advisor
Nel nostro caso utilizziamo solo un modulo di segnali di trading.
Aggiungendo il modulo di segnali Basato su Morning Star/Evening Star confermato da MFI:

Fig. 7. Proprietà dei segnali dell'Expert Advisor
Modulo dei segnali di trading aggiunto:

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
Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso":

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_MFI.mq5, che sarà salvato nella cartella 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 aprire e chiudere le posizioni.
Nel codice dei metodi LongCondition() e ShortCondition() della classe dei segnali di trading abbiamo specificato valori fissi per la soglia:
- Apertura posizione: 80;
- Chiusura posizione: 40.
L'Expert Advisor, generato da MQL5 Wizard, apre e chiude le posizioni utilizzando i "voti" dai moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di 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 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 valori ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2.
I valori di 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 verificate.
2.4. Risultati del backtesting della storia
Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).
Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è utilizzato (Trailing non utilizzato).

Fig. 11. Risultati dei test dell'Expert Advisor, basato su Morning/Evening Stars + MFI
I migliori set di parametri di input possono essere trovati utilizzando il Strategy Tester del terminale client MetaTrader 5.
Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_ams_es_mfi.mq5.
Post correlati
- MQL5 Wizard: Strategie di Trading con Pattern Candlestick e MFI
- MQL5 Wizard: Strategia di Trading con Pattern Candlestick e MFI
- Guida all'Utilizzo di MQL5 Wizard per i Segnali di Trading: 3 Black Crows/3 White Soldiers + MFI
- MQL5 Wizard: Segnali di Trading con Dark Cloud Cover e Piercing Line + MFI
- MQL5 Wizard: Creare Expert Advisor per Segnali di Trading con Bullish Harami, Bearish Harami e MFI