Il MQL5 Wizard è uno strumento potentissimo che ti permette di creare Expert Advisor già pronti, basati sulle classi della Libreria Standard fornita con il terminale client (puoi trovare i dettagli su Creazione di Expert Advisor Pronti in MQL5 Wizard). Questa funzionalità ti consente di testare rapidamente le tue idee di trading, creando 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 da indicatori come 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).
In questo articolo ci concentreremo sui segnali basati sui modelli di candlestick di inversione "Bullish Harami / Bearish Harami", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo di segnali di trading è basato sulla classe CCandlePattern, un semplice esempio del suo utilizzo per creare segnali di trading con modelli di candlestick.
1. Modelli di Candlestick di Inversione: "Bullish Harami" e "Bearish Harami"
1.1. Bullish Harami
Il modello di inversione Bullish Harami si forma in un trend ribassista quando una grande candlestick è seguita da una candlestick più piccola il cui corpo è all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend ribassista potrebbe essere in fase di inversione, segnalando che è un buon momento per entrare in posizione lunga. La seconda candlestick si apre con un gap rialzista.

Fig. 1. Modello di candlestick 'Bullish Harami'
La riconoscibilità del modello "Bullish Harami" è implementata nel metodo CheckPatternBullishHarami() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && // l'ultima candlestick completata è bullish (candlestick bianca) ((Open(2)-Close(2)>AvgBody(1)) && // la candlestick precedente è bearish, il suo corpo è maggiore rispetto alla media (long black) ((Close(1)<Open(2)) && // il prezzo di chiusura della candlestick bullish è inferiore al prezzo di apertura della candlestick bearish (Open(1)>Close(2))) && // il prezzo di apertura della candlestick bullish è superiore al prezzo di chiusura della candlestick bearish (MidPoint(2)<CloseAvg(2))) // trend ribassista return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del modello "Bullish Harami".
1.2. Bearish Harami
Il modello di inversione Bearish Harami si forma in un trend rialzista quando una grande candlestick è seguita da una candlestick più piccola il cui corpo è all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend rialzista potrebbe essere in fase di inversione, segnalando che è un buon momento per entrare in posizione corta. La seconda candlestick si apre con un gap ribassista.
Più piccola è la seconda (candlestick nera), maggiore è la probabilità di inversione.

Fig. 2. Modello di candlestick 'Bearish Harami'
La riconoscibilità del modello "Bearish Harami" è implementata nel metodo CheckPatternBearishHarami() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- Bearish Harami if((Close(1)<Open(1)) && // l'ultima candlestick completata è bearish (candlestick nera) ((Close(2)-Open(2)>AvgBody(1)) && // la candlestick precedente è bullish, il suo corpo è maggiore rispetto alla media (long white) ((Close(1)>Open(2)) && // il prezzo di chiusura della candlestick bearish è superiore al prezzo di apertura della candlestick bullish (Open(1)<Close(2))) && // il prezzo di apertura della candlestick bearish è inferiore al prezzo di chiusura della candlestick bullish (MidPoint(2)>CloseAvg(2))) // trend rialzista return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern è utilizzato per controllare la formazione del modello "Bearish Harami".
2. Segnali di Trading Confermati dall'Indicatore MFI
I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore MFI. Il valore dell'indicatore MFI deve essere inferiore a 40 (per posizioni lunghe) o superiore a 60 (per posizioni corte).
La chiusura della posizione aperta dipende dai valori dell'indicatore MFI. Può avvenire in 2 casi:
- se l'MFI ha raggiunto il livello critico opposto (70 per posizioni lunghe e 30 per posizioni corte)
- se il segnale di inversione non è confermato (quando l'indicatore MFI raggiunge i seguenti livelli: 30 per posizioni lunghe e 70 per posizioni corte)

Fig. 3. Modello 'Bullish Harami', confermato dall'indicatore MFI
- int CBH_BH_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
- int CBH_BH_MFI::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
La formazione del modello "Bullish Harami" deve essere confermata dall'indicatore MFI: MFi(1)<40 (il valore dell'indicatore MFI dell'ultima candlestick completata deve essere inferiore a 40).
La posizione corta deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30).
//+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_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 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 la posizione lunga //--- formazione del modello Bullish Harami e MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40)) result=80; //--- controllo delle condizioni per chiudere la posizione corta //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (rialzista 30, rialzista 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- ritorna il risultato return(result); }
2.2. Aprire Posizione Corta / Chiudere Posizione Lunga
La formazione del modello "Bearish Harami" deve essere confermata dall'indicatore MFI: MFI(1)>60 (il valore dell'indicatore MFI dell'ultima candlestick completata deve essere superiore a 60).
La posizione lunga deve essere chiusa se l'indicatore MFI ha superato i livelli critici (70 o 30).
//+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Entrata nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CBH_BH_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 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 la posizione corta //--- formazione del modello Bearish Harami e MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60)) result=80; //--- controllo delle condizioni per chiudere la posizione lunga //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (rialzista 70, ribassista 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- ritorna il risultato return(result); }
2.3. Creare Expert Advisor utilizzando MQL5 Wizard
La classe CBH_BH_MFI non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file abh_bh_mfi.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. Potrai utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor.
Per creare un Expert Advisor, avvia il MQL5 Wizard:

Fig. 4. Creazione Expert Advisor con 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.
Aggiungiamo il modulo di segnali: Segnali basati su Bullish Harami / Bearish Harami confermati da MFI

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

Fig. 8. Proprietà dei segnali dell'Expert Advisor
Puoi selezionare qualsiasi proprietà di trailing, ma noi utilizzeremo "Trailing Stop non usato":

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
Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_ABH_BH_MFI.mq5, che verrà salvato nella cartella terminal_data_folder\MQL5\Experts\.
I parametri di input predefiniti dell'Expert Advisor generato sono:
//--- 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'operazione 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:
//--- 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'operazione 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 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 di tutti i moduli aggiunti) viene 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 dobbiamo tenere conto di questo fattore quando impostiamo i valori soglia. Questo significa che i 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 verificate.
2.4. Risultati del Backtesting Storico
Consideriamo un backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=11).
Per la creazione dell'Expert Advisor abbiamo utilizzato un 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 Harami / Bearish Harami + MFI
Il miglior set di parametri di input può essere trovato utilizzando il Strategy Tester del terminale client MetaTrader 5.
Il codice dell'Expert Advisor, creato dal MQL5 Wizard è allegato in expert_abh_bh_mfi.mq5.
Post correlati
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- 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