Il MQL5 Wizard è un ottimo strumento che ti permette di generare Expert Advisor pronti all'uso, basati sulle classi della libreria standard fornita con il terminale client. Se vuoi dare un'occhiata a come creare un Expert Advisor, puoi consultare l'articolo Creare Expert Advisor Pronti con MQL5 Wizard per tutti i dettagli.
Con MQL5 Wizard, 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 sono disponibili nell'articolo MQL5 Wizard: Come Creare un Modulo di Segnali di Trading.
L'idea generale è questa: la classe dei segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.
Un libro interessante che consiglio è "Strategie dei Migliori Trader" (in russo), dove vengono trattate molte strategie di trading. Qui ci concentreremo sui pattern di inversione delle candele, confermati da oscillatori come Stochastic, CCI, MFI e RSI.
Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei pattern delle candele. Per confermare i segnali di trading generati dai pattern delle candele, è sufficiente scrivere una classe derivata da CCandlePattern e aggiungere le funzionalità necessarie (ad esempio, conferma tramite oscillatori).
Adesso vediamo i segnali basati sul pattern di inversione "3 Corvi Neri/3 Soldati Bianchi", confermato dall'indicatore Relative Strength Index (RSI). Il modulo di segnali di trading è basato sulla classe CCandlePattern, che offre un esempio semplice per la creazione di segnali di trading con i pattern delle candele.
1. Pattern di inversione "3 Corvi Neri" e "3 Soldati Bianchi"
1.1. 3 Corvi Neri
Un pattern di candele ribassista utilizzato per prevedere l'inversione dell'attuale trend rialzista. Questo pattern è composto da tre candele consecutive con corpo lungo che hanno chiuso più in basso rispetto al giorno precedente, con ogni apertura che avviene all'interno del corpo della candela precedente.

Fig. 1. Pattern di candele '3 Corvi Neri'
Il riconoscimento del pattern "3 Corvi Neri" è implementato nel metodo CheckPatternThreeBlackCrows della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candele "3 Corvi Neri" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { //--- 3 Corvi Neri if((Open(3)-Close(3)>AvgBody(1)) && // (long black) (Open(2)-Close(2)>AvgBody(1)) && (Open(1)-Close(1)>AvgBody(1)) && (MidPoint(2)<MidPoint(3)) && // (midpoint più bassi) (MidPoint(1)<MidPoint(2))) return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) della classe CCandlePattern è utilizzato per verificare la formazione del pattern di candele "3 Corvi Neri".
1.2. Pattern di candele 3 Soldati Bianchi
Un pattern di candele rialzista usato per prevedere l'inversione dell'attuale trend ribassista. Questo pattern è composto da tre candele consecutive con corpo lungo che hanno chiuso più in alto rispetto al giorno precedente, con ogni apertura che avviene all'interno del corpo della candela precedente.
Il pattern è valido fintanto che la candela del secondo giorno si apre nella metà superiore dell'intervallo del primo giorno. Entro la fine del secondo giorno, deve chiudere vicino al suo massimo, lasciando un'ombra superiore molto piccola o addirittura inesistente. Lo stesso pattern viene quindi ripetuto il terzo giorno.

Fig. 2. Pattern di candele '3 Soldati Bianchi'
Qui c'è il metodo per il riconoscimento del pattern "3 Soldati Bianchi":
//+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candele "3 Soldati Bianchi" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { //--- 3 Soldati Bianchi if((Close(3)-Open(3)>AvgBody(1)) && // lungo bianco (Close(2)-Open(2)>AvgBody(1)) && (Close(1)-Open(1)>AvgBody(1)) && (MidPoint(2)>MidPoint(3)) && // midpoints più alti (MidPoint(1)>MidPoint(2))) return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) della classe CCandlePattern è utilizzato per verificare la formazione del pattern di candele "3 Soldati Bianchi".
2. Segnali di trading, confermati dall'indicatore RSI
I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'indicatore RSI. Il valore dell'RSI deve essere inferiore/maggiore ai livelli critici (40 per posizione lunga e 60 per posizione corta).
La chiusura delle posizioni aperte dipende dai valori dell'RSI. Può avvenire in 2 casi:
- se l'RSI ha raggiunto il livello critico opposto (70 per posizione lunga e 30 per posizione corta)
- se il segnale inverso non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per posizione lunga e 70 per posizione corta)

Fig. 3. Pattern '3 Corvi Neri', confermato dall'indicatore Stochastic
- int CML_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
- int CML_RSI::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 pattern "3 Soldati Bianchi" deve essere confermata dall'indicatore RSI: RSI(1)<40 (il valore dell'RSI dell'ultima barra completata deve essere inferiore a 40).
-
La posizione corta deve essere chiusa se l'indicatore RSI ha superato verso l'alto i livelli critici 70 o 30.
//+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Ingresso nel mercato (apri posizione lunga, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione corta, risultato=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::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 durante le barre di notizie int idx =StartIndex(); //--- controllo delle condizioni per aprire una posizione lunga //--- formazione del pattern 3 Soldati Bianchi e RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (RSI(1)<40)) result=80; //--- controllo delle condizioni per chiudere posizione corta //--- crossover della linea di segnale sopra/sotto i livelli di ipercomprato/iper-venduto (verso l'alto 30, verso l'alto 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- restituisci il risultato return(result); }
2.2. Aprire posizione corta/Chiudere posizione lunga
-
La formazione del pattern "3 Corvi Neri" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'RSI dell'ultima barra completata deve essere maggiore di 60).
-
La posizione lunga deve essere chiusa se l'indicatore RSI ha incrociato verso il basso i livelli critici 70 o 30.
//+------------------------------------------------------------------+ //| Controlla le condizioni per l'ingresso e l'uscita dal mercato | //| 1) Ingresso nel mercato (apri posizione corta, risultato=80) | //| 2) Uscita dal mercato (chiudi posizione lunga, risultato=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::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 durante le barre di notizie int idx =StartIndex(); //--- controllo delle condizioni per aprire posizione corta //--- formazione del pattern 3 Corvi Neri e RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (RSI(1)>60)) result=80; //--- controllo delle condizioni per chiudere posizione lunga //--- crossover della linea di segnale sotto/sopra i livelli di ipercomprato/iper-venduto (verso il basso 70, verso il basso 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- restituisci il risultato return(result); }
2.3. Creare un Expert Advisor utilizzando MQL5 Wizard
La classe CML_RSI non è inclusa nelle classi della Libreria Standard; per utilizzarla, è necessario scaricare il file acml_rsi.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo stesso deve essere fatto con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo il riavvio del MetaEditor.
Per creare un Expert Advisor, avvia il MQL5 Wizard:

Fig. 4. Creazione dell'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 dei segnali di trading utilizzati.

Fig. 6. Proprietà del segnale dell'Expert Advisor
Nel nostro caso utilizziamo solo un modulo di segnali di trading.
Aggiungiamo il modulo di Segnali basati su 3 Corvi Neri/3 Soldati Bianchi:

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

Fig. 8. Proprietà del segnale dell'Expert Advisor
Puoi selezionare qualsiasi proprietà di trailing, ma 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_ABC_WS_RSI.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'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 permettono 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:
- Apri posizione: 80;
- Chiudi posizione: 40.
L'Expert Advisor, generato dal MQL5 Wizard, apre e chiude le posizioni usando i "voti" dai moduli di segnali di trading. Il voto del modulo principale (che funge da contenitore, consiste di tutti i moduli aggiunti) viene anch'esso utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.
I risultati dei voti del modulo principale vengono 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 quando impostiamo i valori soglia. A causa di questo fatto, le soglie di apertura e chiusura devono essere impostate 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 storico
Vediamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.02.02, PeriodRSI=37, MA_period=51).
Durante la creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), l'algoritmo di Trailing Stop non è stato utilizzato (Trailing not used).

Fig. 11. Risultati del test dell'Expert Advisor, basato su 3 Corvi Neri/3 Soldati Bianchi + RSI
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_abc_ws_rsi.mq5.
Post correlati
- Dematus: Il Sistema di Trading per MetaTrader 5
- Rilevare il Venerdì della Prima Settimana del Mese: La Guida per il Giorno NFP
- EA Efficiente: Come Aggiungere la Chiusura del Venerdì per Migliorare le Performance
- MQL5 Wizard: Crea EA per Segnali di Trading con 3 Corvi Neri/3 Soldati Bianchi e Stocastico
- Guida all'Utilizzo del MQL5 Wizard: Trading con Pattern di Candele e Indice CCI