Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor (EA) già pronti basati sulle classi della libreria standard inclusa nel terminale client. Ti permette di testare rapidamente le tue idee di trading, basta creare una classe per i tuoi segnali di trading. Puoi trovare la struttura di questa classe e un esempio 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. Dovrai sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati.
Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), che esplora molte strategie di trading. Qui ci concentreremo sui modelli di candlestick di inversione, confermati da 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 considereremo i segnali basati su modelli di candlestick di inversione "Dark Cloud Cover" e "Piercing Line", confermati dall'indicatore Market Facilitation Index (MFI). Il modulo dei segnali di trading si basa sulla classe CCandlePattern, che rappresenta un semplice esempio del suo utilizzo per la creazione di segnali di trading con modelli di candlestick.
1. Modelli di candlestick di inversione "Dark Cloud Cover" e "Piercing Line"
1.1. Dark Cloud Cover
Il "Dark Cloud Cover" è un modello di inversione ribassista che si verifica alla fine di un trend rialzista. Si forma una lunga candela bianca nel primo giorno e si crea un gap al rialzo nel secondo giorno. Tuttavia, il secondo giorno chiude sotto il punto medio del primo giorno.

Fig. 1. Modello di candlestick "Dark Cloud Cover"
Il riconoscimento del modello "Dark Cloud Cover" è implementato nel metodo CheckPatternDarkCloudCover() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Dark Cloud Cover" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- Dark Cloud Cover if((Close(2)-Open(2)>AvgBody(1)) && // (lunga candela bianca) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (chiude all'interno del corpo precedente) (MidOpenClose(2)>CloseAvg(1)) && // (trend rialzista) (Open(1)>High(2))) // (apre a un nuovo massimo) return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) della classe CCandlePattern è utilizzato per controllare la formazione del modello di candlestick "Dark Cloud Cover".
1.2. Piercing Line
Il gap al ribasso nel secondo giorno mantiene il trend ribassista. Tuttavia, la chiusura del secondo giorno avviene sopra il punto medio del corpo del primo giorno. Questo suggerisce ai ribassisti che potrebbe formarsi un minimo. Questa azione di prezzo è molto meno riconoscibile con i grafici a barre rispetto a quanto lo sia con i grafici a candlestick. Maggiore è la penetrazione della chiusura nel corpo del primo giorno, maggiore sarà la probabilità che il segnale di inversione abbia successo.

Fig. 2. Modello di candlestick "Piercing Line"
Il riconoscimento del modello "Piercing Line" è implementato nel metodo CheckPatternPiercingLine() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del modello di candlestick "Piercing Line" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- Piercing Line if((Close(1)-Open(1)>AvgBody(1)) && // (lunga candela bianca) (Open(2)-Close(2)>AvgBody(1)) && // (lunga candela nera) (Close(1)>Close(2)) && // (Close(1)<Open(2)) && // (chiude all'interno del corpo precedente) (MidOpenClose(2)<CloseAvg(2)) && // (trend ribassista) (Open(1)<Low(2))) // (apre sotto il minimo precedente) return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) della classe CCandlePattern è utilizzato per controllare la formazione del modello di candlestick "Piercing Line".
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 delle posizioni aperte dipende dai valori dell'indicatore MFI. Può avvenire in due 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 "Dark Cloud Cover" confermato dall'indicatore MFI
- int CDC_PL_MFI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
- int CDC_PL_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 "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 corta deve essere chiusa se l'indicatore MFI ha attraversato verso l'alto i livelli critici (70 o 30).
//+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //| 1) Ingresso nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_MFI::LongCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo a barre di notizie int idx =StartIndex(); //--- controllo delle condizioni per aprire una posizione lunga //--- formazione del modello Piercing Line e MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1)<40)) result=80; //--- controllo delle condizioni per chiudere la posizione corta //--- crossover della linea di segnale sui 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 corta/Chiudere posizione lunga
La formazione del modello "Dark Cloud Cover" 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 lunga deve essere chiusa se l'indicatore MFI ha attraversato verso l'alto i livelli critici (70 o 30).
//+------------------------------------------------------------------+ //| Controlla le condizioni per entrare ed uscire dal mercato | //| 1) Ingresso nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CDC_PL_MFI::ShortCondition() { int result=0; //--- idx può essere usato per determinare la modalità di lavoro dell'Expert Advisor //--- idx=0 - in questo caso EA controlla le condizioni di trading a ogni tick //--- idx=1 - in questo caso EA controlla le condizioni di trading solo a barre di notizie int idx =StartIndex(); //--- controllo delle condizioni per aprire una posizione corta //--- formazione del modello Dark Cloud Cover e MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1)>60)) result=80; //--- controllo delle condizioni per chiudere la posizione lunga //--- crossover della linea di segnale sui 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 Expert Advisor usando MQL5 Wizard
La classe CDC_PL_MFI non è inclusa nelle classi della libreria standard; per utilizzarla, è necessario scaricare il file adc_pl_mfi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file acandlepatterns.mqh. Puoi usarlo in MQL5 Wizard dopo il riavvio del MetaEditor.
Per creare un Expert Advisor, avvia MQL5 Wizard:

Fig. 4. Creazione di Expert Advisor usando MQL5 Wizard
Specifichiamo il nome 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
Nel nostro caso utilizziamo solo un modulo di segnali di trading.
Aggiungiamo il modulo di segnali Basato su Dark Cloud Cover/Piercing Line confermato 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 utilizzeremo "Trailing Stop non utilizzato":

Fig. 9. Proprietà di trailing dell'Expert Advisor
Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume fisso":

Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor
Cliccando sul pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in Expert_ADC_PL_MFI.mq5, 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 di soglia del segnale per aprire [0...100] input int Signal_ThresholdClose =10 // Valore di 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:
//--- input per il segnale principale input int Signal_ThresholdOpen =40; // Valore di soglia del segnale per aprire [0...100] input int Signal_ThresholdClose =20 // Valore di 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 di soglia per aprire e chiudere 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 dal MQL5 Wizard apre e chiude le posizioni utilizzando i "voti" dai moduli di segnali di trading. Anche il voto del modulo principale (come contenitore, 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 nell'"averaging" 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 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 su 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno veritiere.
2.4. Risultati del backtesting storico
Esaminiamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=11).
Per la creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo Trailing Stop non è utilizzato (Trailing non utilizzato).

Fig. 11. Risultati del test dell'Expert Advisor basato su Dark Cloud Cover/Piercing Line + MFI
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 dal MQL5 Wizard, è allegato nel file expert_adc_pl_mfi.mq5.
Post correlati
- Dematus: Il Sistema di Trading per MetaTrader 5
- 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