Il MQL5 Wizard è uno strumento fantastico che consente di creare Expert Advisor già pronti, sfruttando le classi fornite dalla libreria standard inclusa nel terminale client (dai un'occhiata a Creare Expert Advisor in MQL5 Wizard per maggiori dettagli). Con questo strumento, puoi testare rapidamente le tue idee di trading, basta creare una classe di segnali di trading personalizzati. 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. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi.
Esiste un libro "Strategie dei migliori trader" (in russo), che analizza molte strategie di trading, noi ci concentreremo sui pattern di candela di inversione, confermati da Stochastic, CCI, MFI e RSI oscillatori.
Il modo migliore è creare una classe separata, derivata da CExpertSignal, per verificare la formazione dei 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).
In questa guida, analizzeremo i segnali basati sul pattern di candela di inversione "Hammer/Hanging Man", confermati dall'indicatore CCI. Il modulo di segnali di trading è basato sulla classe CCandlePattern, un esempio semplice per la creazione di segnali di trading con pattern di candela.
1. Pattern di candela di inversione "Hammer" e "Hanging Man"
1.1. Hammer
Il "Hammer" è un pattern con un corpo piccolo e una lunga ombra inferiore, che si forma dopo un movimento di prezzo discendente. Il pattern "Hammer" indica la fine di un trend ribassista.
Il colore del corpo della candela non è importante, ma un hammer rialzista indica un potenziale rialzista maggiore. Il corpo del pattern "Hammer" si forma spesso vicino al minimo della candela precedente. Una lunga ombra inferiore e una corta ombra superiore portano a un potenziale più alto di inversione del pattern.

Fig. 1. Pattern di candela "Hammer"
Il riconoscimento del pattern "Hammer" è implementato nel metodo CheckPatternHammer() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candela "Hammer" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- Hammer if((MidPoint(1)<CloseAvg(2)) && // trend ribassista (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // corpo nella parte superiore 1/3 (Close(1)<Close(2)) && (Open(1)<Open(2))) // gap del corpo return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern di candela "Hammer".
1.2. Hanging Man
Il "Hanging Man" è un pattern di candela con un corpo piccolo e una lunga ombra inferiore, che si forma dopo un movimento di prezzo ascendente. Il pattern "Hanging Man" indica la fine di un trend rialzista.
Il colore del corpo della candela non è importante, ma una candela ribassista indica un potenziale ribassista maggiore. Il corpo del pattern "Hanging Man" si forma spesso vicino al massimo della candela precedente. Una lunga ombra inferiore e una corta ombra superiore portano a un potenziale più alto di inversione del pattern.

Fig. 2. Pattern di candela "Hanging Man"
Il riconoscimento del pattern "Hanging Man" è implementato nel metodo CheckPatternHangingMan() della classe CCandlePattern:
//+------------------------------------------------------------------+ //| Controlla la formazione del pattern di candela "Hanging Man" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- Hanging man if((MidPoint(1)>CloseAvg(2)) && // trend rialzista (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // corpo nella parte superiore 1/3 (Close(1)>Close(2)) && (Open(1)>Open(2))) // gap del corpo return(true); //--- return(false); }
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern di candela "Hanging Man".
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 una posizione lunga e 60 per una corta).
La chiusura delle posizioni aperte dipende dai valori dell'RSI. Questo può avvenire in due casi:
- se l'RSI ha raggiunto il livello critico opposto (70 per una posizione lunga e 30 per una corta)
- se il segnale inverso non è confermato (quando l'RSI raggiunge i seguenti livelli: 30 per una posizione lunga e 70 per una corta)

Fig. 3. Pattern "Harami", confermato dall'indicatore RSI
- int CH_HM_RSI::LongCondition() - controlla le condizioni per aprire una posizione lunga (restituisce 80) e chiudere una posizione corta (restituisce 40);
- int CH_HM_RSI::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
La formazione del pattern "Hammer" 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 CH_HM_RSI::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 nei nuovi barre int idx =StartIndex(); //--- controllo delle condizioni per aprire posizione lunga //--- formazione del pattern Hammer e RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (RSI(1)<40)) result=80; //--- controllo delle condizioni per chiudere posizione corta //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (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 "Hanging Man" deve essere confermata dall'indicatore RSI: RSI(1)>60 (il valore dell'indicatore RSI dell'ultima barra completata deve essere superiore a 60).
La posizione lunga deve essere chiusa se l'indicatore RSI ha superato 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 CH_HM_RSI::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 nei nuovi barre int idx =StartIndex(); //--- controllo delle condizioni per aprire posizione corta //--- formazione del pattern Hanging Man e RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (RSI(1)>60)) result=80; //--- controllo delle condizioni per chiudere posizione lunga //--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (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 usando MQL5 Wizard
La classe CH_HM_RSI non è inclusa nelle classi della libreria standard; per utilizzarla, è necessario scaricare il file ach_hm_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 usarlo nel MQL5 Wizard dopo aver riavviato il MetaEditor.
Per creare un Expert Advisor, lancia il MQL5 Wizard:

Fig. 4. Creare 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à dei segnali dell'Expert Advisor
Nel nostro caso, utilizziamo solo un modulo di segnali di trading.
Aggiungiamo il modulo di segnali "Segnali basati su Hammer/Hanging Man confermati da RSI":

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 di scambio fisso":

Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor
Cliccando il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_AH_HM_RSI.mq5, che verrà 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 della soglia del segnale per aprire [0...100] input int Signal_ThresholdClose =10; // Valore della 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 della soglia del segnale per aprire [0...100] input int Signal_ThresholdClose =20; // Valore della 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 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 posizioni utilizzando i "voti" dei moduli di segnali di trading. Anche il voto del modulo principale (come contenitore, che consiste in tutti i moduli aggiunti) è utilizzato, ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.
I risultati dei voti del modulo principale sono anche utilizzati nel calcolo della 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 delle soglie. A causa di questo fatto, le soglie di apertura e chiusura devono essere impostate come 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 su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.03, PeriodRSI=33, MA_period=2).
Durante la creazione dell'Expert Advisor, abbiamo utilizzato un volume fisso (Trading Fixed Lot, 0.1), l'algoritmo Trailing Stop non è stato utilizzato (Trailing non utilizzato).

Fig. 11. Risultati del testing dell'Expert Advisor, basato su Hammer/Hanging Man + RSI
Il set migliore di parametri di input può essere trovato utilizzando il Tester di Strategia del terminale client MetaTrader 5.
Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_ah_hm_rsi.mq5.
Post correlati
- RRS Impulse: Il Tuo Esperto per MetaTrader 4
- MQL5 Wizard: Creare Trading Signals con Morning/Evening Stars e MFI per MetaTrader 5
- MQL5 Wizard: Crea segnali di trading con Bullish e Bearish Engulfing + Stochastic
- MQL5 Wizard: Strategie di Trading con Pattern Candlestick e MFI
- Generazione di Expert Advisor con MQL5 Wizard: segnali di trading basati su Bullish e Bearish Engulfing + RSI