MetaTrader5
Creare Expert Advisor con MQL5 Wizard: Segnali di Trading basati su Bullish e Bearish Harami con Stochastic
Il MQL5 Wizard è uno strumento fantastico per creare Expert Advisor (EA) già pronti, sfruttando le classi della libreria standard fornite con il terminale client. Ti permette di testare le tue idee di trading in modo rapido; basta creare la tua classe di 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 principale è la seguente: la classe di segnali di trading deriva da CExpertSignal. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi.
Esiste un libro intitolato "Strategie dei migliori trader" (in russo), che analizza molte strategie di trading. Noi ci concentreremo sui modelli di candele di inversione, confermati dagli oscillatori Stochastic, CCI, MFI e RSI.
Il modo migliore è creare una classe separata, derivata da CExpertSignal, per controllare la formazione dei modelli di candele. Per confermare i segnali di trading generati dai modelli di candele, basta scrivere una classe, derivata da CCandlePattern, e aggiungere le funzionalità necessarie (ad esempio, conferma da parte degli oscillatori).
In questo articolo considereremo i segnali basati sui modelli di inversione "Bullish Harami/Bearish Harami", confermati dall'indicatore Stochastic. Il modulo di segnali di trading si basa sulla classe CCandlePattern, che è un semplice esempio del suo utilizzo per creare segnali di trading con i modelli di candele.
1. Modelli di candele 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 candela è seguita da una candela più piccola il cui corpo è collocato all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend calante (downtrend) potrebbe invertirsi, segnalando che è un buon momento per entrare in posizione long. La seconda candela apre con un gap verso l'alto.
Più piccola è la seconda candela (bianca), maggiore è la probabilità di inversione.
Fig. 1. Modello di candela "Bullish Harami"
Il riconoscimento del modello "Bullish Harami" è implementato nel metodo CheckPatternBullishHarami() della classe CCandlePattern:
//+------------------------------------------------------------------+
//| Controlla la formazione del modello di candela "Bullish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
{
//--- Bullish Harami
if((Close(1)>Open(1)) && // l'ultima barra completata è bullish (giornata bianca)
((Open(2)-Close(2)>AvgBody(1)) && // la candela precedente è ribassista, il suo corpo è maggiore della media (grande nera)
((Close(1)<Open(2)) && // il prezzo di chiusura della candela bullish è inferiore al prezzo di apertura della candela ribassista
(Open(1)>Close(2))) && // il prezzo di apertura della candela bullish è superiore al prezzo di chiusura della candela ribassista
(MidPoint(2)<CloseAvg(2))) // trend ribassista
return(true);
//---
return(false);
}
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) della classe CCandlePattern viene utilizzato per controllare la formazione del modello di candela "Bullish Harami".
1.2. Bearish Harami
Il modello di inversione Bearish Harami si forma in un trend rialzista quando una grande candela è seguita da una candela più piccola il cui corpo è collocato all'interno dell'intervallo verticale del corpo più grande. Questo modello indica che il trend crescente (uptrend) potrebbe invertirsi, segnalando che è un buon momento per entrare in posizione short. La seconda candela apre con un gap verso il basso.
Più piccola è la seconda candela (nera), maggiore è la probabilità di inversione.
Fig. 2. Modello di candela "Bearish Harami"
Il riconoscimento del modello "Bearish Harami" è implementato nel metodo CheckPatternBearishHarami() della classe CCandlePattern:
//+------------------------------------------------------------------+
//| Controlla la formazione del modello di candela "Bearish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
{
//--- Bearish Harami
if((Close(1)<Open(1)) && // l'ultima barra completata è ribassista (giornata nera)
((Close(2)-Open(2)>AvgBody(1)) && // la candela precedente è bullish, il suo corpo è maggiore della media (grande bianca)
((Close(1)>Open(2)) && // il prezzo di chiusura della candela ribassista è superiore al prezzo di apertura della candela bullish
(Open(1)<Close(2))) && // il prezzo di apertura della candela ribassista è inferiore al prezzo di chiusura della candela bullish
(MidPoint(2)>CloseAvg(2))) // up trend
return(true);
//---
return(false);
}
Il metodo CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) della classe CCandlePattern viene utilizzato per controllare la formazione del modello di candela "Bearish Harami".
2. Segnali di trading, confermati dall'indicatore Stochastic
I segnali di trading per aprire posizioni long o short devono essere confermati dall'oscillatore Stochastic. La linea %D deve essere superiore/inferiore ai relativi livelli critici (30 o 70).
La chiusura della posizione aperta dipende dai valori dell'indicatore %D. Può avvenire in 2 casi:
se la linea %D ha raggiunto il livello critico opposto (80 per posizione long e 20 per posizione short)
se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione long e 80 per posizione short)
Fig. 3. Modello di candela "Bearish Harami", confermato dall'indicatore Stochastic
Il controllo delle condizioni di trading per l'ingresso e l'uscita è implementato in due metodi:
int CBH_BH_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40);
int CBH_BH_Stoch::ShortCondition() - controlla 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 "Bullish Harami" deve essere confermata dall'indicatore Stochastic: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere inferiore a 30).
La posizione short deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha attraversato verso l'alto i livelli 20 o 80.
//+------------------------------------------------------------------+
//| Controlla le condizioni per l'ingresso e l'uscita dal mercato |
//| 1) Ingresso nel mercato (apri posizione long, risultato=80) |
//| 2) Uscita dal mercato (chiudi posizione short, risultato=40) |
//+------------------------------------------------------------------+
int CBH_BH_Stoch::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 delle notizie
int idx =StartIndex();
//--- controllo delle condizioni per aprire posizione long
//--- formazione del modello Bullish Harami e linea di segnale<30
if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))
result=80;
//--- controllo delle condizioni per chiudere posizione short
//--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 20, verso l'alto 80)
if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
((StochSignal(1)>80) && (StochSignal(2)<80))))
result=40;
//--- restituisci il risultato
return(result);
}
2.2. Aprire posizione short/Chiudere posizione long
La formazione del modello "Bearish Harami" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima barra completata deve essere superiore a 70).
La posizione long deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha attraversato verso il basso i livelli 80 o 20.
//+------------------------------------------------------------------+
//| Controlla le condizioni per l'ingresso e l'uscita dal mercato |
//| 1) Ingresso nel mercato (apri posizione short, risultato=80) |
//| 2) Uscita dal mercato (chiudi posizione long, risultato=40) |
//+------------------------------------------------------------------+
int CBH_BH_Stoch::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 delle notizie
int idx =StartIndex();
//--- controllo delle condizioni per aprire posizione short
//--- formazione del modello Bearish Harami e linea di segnale>70
if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))
result=80;
//--- controllo delle condizioni per chiudere posizione long
//--- crossover della linea di segnale dei livelli di ipercomprato/ipersoldato (verso il basso 80, verso l'alto 20)
if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
((StochSignal(1)<20) && (StochSignal(2)>20))))
result=40;
//--- restituisci il risultato
return(result);
}
2.3. Creazione di un Expert Advisor utilizzando MQL5 Wizard
La classe CBH_BH_Stoch non è inclusa nelle classi della Libreria Standard, per utilizzarla, è necessario scaricare il file acbh_bh_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\MQL5\Include\Expert\Signal\MySignals. La stessa cosa deve essere fatta con il file candlepatterns.mqh. Puoi utilizzarlo in MQL5 Wizard dopo aver riavviato il MetaEditor.
Per creare un Expert Advisor, lancia MQL5 Wizard:
Fig. 4. Creazione di un 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à del segnale dell'Expert Advisor
Nel nostro caso utilizziamo solo un modulo di segnali di trading.
Aggiungiamo il modulo Segnali basati su Bullish Harami/Bearish Harami confermati da Stochastic:
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 utilizzato":
Fig. 9. Proprietà di trailing dell'Expert Advisor
Per quanto riguarda le proprietà di gestione del denaro, utilizzeremo "Trading con volume di trading fisso":
Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor
Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si troverà in Expert_ABH_BH_Stoch.mq5, 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 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)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'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 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:
Apri posizione: 80;
Chiudi posizione: 40.
L'Expert Advisor, generato da MQL5 Wizard, apre e chiude posizioni utilizzando le "voti" dai moduli di segnali di trading. Il voto del modulo principale (come contenitore, consiste di tutti i moduli aggiunti) viene utilizzato anche, 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 delle soglie. A causa di questo fatto, le soglie ThresholdOpen e ThresholdClose 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 su 0, il che significa che la chiusura delle posizioni avverrà solo quando le condizioni di chiusura saranno vere.
2.4. Risultati del backtesting storico
Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
Nella creazione dell'Expert Advisor abbiamo utilizzato il volume fisso (Trading Fixed Lot, 0.1), non è stato utilizzato l'algoritmo Trailing Stop (Trailing not used).
Fig. 11. Risultati del test dell'Expert Advisor, basato su Bullish/Bearish Harami + Stochastic
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 da MQL5 Wizard, è allegato in expert_abh_bh_stoch.mq5.
2011.03.16