Home Trading Sistematico Post

MQL5 Wizard: Crea Signal Trading con Hammer e Hanging Man + Stochastic per MetaTrader 5

Allegato
314.zip (6.58 KB, Scarica 0 volte)

Il MQL5 Wizard offre la possibilità di creare Expert Advisor predefiniti basati sulle classi della libreria standard fornite con il terminale cliente. Questo strumento è fantastico per testare rapidamente le tue idee di trading; tutto ciò che serve è creare la tua classe di segnali di trading. 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. Successivamente, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i tuoi metodi personalizzati.

Esiste un libro intitolato "Strategie dei Migliori Trader" (in russo), in cui vengono esaminate numerose strategie di trading. Qui ci concentreremo sui pattern 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 di pattern di candlestick. Per confermare i segnali di trading generati dai pattern 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 sul pattern di candlestick di inversione "Hammer/Hanging Man", confermati dall'indicatore Stochastic. Il modulo dei segnali di trading si basa sulla classe CCandlePattern, un semplice esempio del suo utilizzo per la creazione di segnali di trading con pattern di candlestick.


1. Pattern di Candlestick di Inversione "Hammer" e "Hanging Man"

1.1. Hammer

Il "Hammer" è un candlestick con un corpo piccolo e una lunga ombra inferiore, formato dopo un movimento di prezzo al ribasso. Il pattern "Hammer" indica la fine di un trend ribassista.

Il colore del corpo del candlestick 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 breve ombra superiore portano a un maggiore potenziale del pattern di inversione.

Fig. 1. Pattern di candlestick 'Hammer'

Fig. 1. Pattern di candlestick 'Hammer'

Il riconoscimento del pattern "Hammer" è implementato nel metodo CheckPatternHammer() della classe CCandlePattern:

//+------------------------------------------------------------------+
//| Controlla la formazione del pattern "Hammer" candlestick                  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)2))                                 && // down trend
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) && // corpo nella parte superiore 1/3
      (Close(1)2)) && (Open(1)2)))                    // gap corpo
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Hammer".


1.2. Hanging Man

Il "Hanging Man" è un candlestick con un corpo piccolo e una lunga ombra inferiore, formato dopo un movimento di prezzo al rialzo. Il pattern "Hanging Man" indica la fine di un trend rialzista.

Il colore del corpo del candlestick 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 breve ombra superiore portano a un maggiore potenziale del pattern di inversione.

Fig. 2. Pattern di candlestick 'Hanging Man'

Fig. 2. Pattern di candlestick 'Hanging Man'

Il riconoscimento del pattern "Hanging Man" è implementato nel metodo CheckPatternHangingMan() della classe CCandlePattern:

//+------------------------------------------------------------------+

//| Controlla la formazione del pattern "Hanging Man" candlestick            |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging man
   if((MidPoint(1)>CloseAvg(2))                                && // up trend
      (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 corpo
      return(true);
//---
   return(false);
  }

Il metodo CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) della classe CCandlePattern viene utilizzato per controllare la formazione del pattern "Hanging Man".


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 maggiore/minore dei livelli critici corrispondenti (30 o 70).

La chiusura delle posizioni aperte dipende dai valori dell'indicatore %D. Può essere effettuata in due casi:

  1. se la linea %D ha raggiunto il livello critico opposto (80 per posizione long e 20 per posizione short)
  2. 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. Pattern 'Hammer', confermato dall'indicatore Stochastic

Fig. 3. Pattern 'Hammer', confermato dall'indicatore Stochastic


  • int CH_HM_Stoch::LongCondition() - controlla le condizioni per aprire una posizione long (restituisce 80) e chiudere la posizione short (restituisce 40);
  • int CH_HM_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

  1. La formazione del pattern "Hammer" deve essere confermata dall'indicatore Stochastic: StochSignal(1)<30 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima candela completata deve essere inferiore a 30).

  2. La posizione short deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato 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 CH_HM_Stoch::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 a ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo a barre di notizie
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione long
//--- formazione del pattern Hammer e linea di segnale<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (StochSignal(1)<30))
     result=80;
//--- controllo delle condizioni per chiudere la posizione short
//--- crossover della linea di segnale nei livelli di overbought/oversold (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

  1. La formazione del pattern "Hanging Man" deve essere confermata dall'indicatore Stochastic: StochSignal(1)>70 (il valore della linea di segnale dell'indicatore Stochastic dell'ultima candela completata deve essere superiore a 70).

  2. La posizione long deve essere chiusa se la linea di segnale dell'indicatore Stochastic ha incrociato 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 CH_HM_Stoch::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 a ogni tick
//--- idx=1 - in questo caso l'EA controlla le condizioni di trading solo a barre di notizie
  int idx   =StartIndex();
//--- controllo delle condizioni per aprire una posizione short
//--- formazione del pattern Hanging Man e linea di segnale>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (StochSignal(1)>>70))
     result=80;
//--- controllo delle condizioni per chiudere la posizione long
//--- crossover della linea di segnale nei livelli di overbought/oversold (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. Creare Expert Advisor utilizzando MQL5 Wizard

La classe CH_HM_Stoch non è inclusa nelle classi della Libreria Standard, per utilizzarla è necessario scaricare il file ach_hm_stoch.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 aver riavviato il MetaEditor.

Per creare un Expert Advisor lancia MQL5 Wizard:

Fig. 4. Creazione Expert Advisor utilizzando MQL5 Wizard

Fig. 4. Creazione Expert Advisor utilizzando MQL5 Wizard

Specifichiamo il nome dell'Expert Advisor:

Fig. 5. Proprietà generali 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

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 Stochastic:

Fig. 7. Proprietà dei segnali dell'Expert Advisor

Fig. 7. Proprietà dei segnali dell'Expert Advisor

Modulo di segnali di trading aggiunto:

Fig. 8. Proprietà dei segnali dell'Expert Advisor

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

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

Fig. 10. Proprietà di gestione del denaro dell'Expert Advisor

Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, situato in Expert_AH_HM_Stoch.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 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)

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 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 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:

  • 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. Il voto del modulo principale (come contenitore, è composto da 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 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 vere.


2.4. Risultati del backtesting storico

Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di testing: 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), l'algoritmo Trailing Stop non è utilizzato (Trailing non utilizzato).


Fig. 11. Risultati di testing dell'Expert Advisor, basato su Hammer/Hanging Man + Stochastic

Fig. 11. Risultati di testing dell'Expert Advisor, basato su Hammer/Hanging Man + Stochastic


Il miglior set di parametri di input può essere trovato utilizzando il Tester di strategie del terminale client MetaTrader 5.

Il codice dell'Expert Advisor, creato dal MQL5 Wizard, è allegato in expert_ah_hm_stoch.mq5.

Post correlati

Commento (0)