Guarda come scaricare robot di trading gratuitamente
Ci trovi su Twitter!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Sistemi Esperti

Procedura guidata MQL5 - Segnali di trading basati su modelli Morning Star/Evening star + stocastico - sistema esperto per MetaTrader 5

Visualizzazioni:
536
Valutazioni:
(34)
Pubblicato:
2021.11.16 10:12
\MQL5\Include\Expert\Signal\MySignals\
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

La procedura guidata MQL5 consente di creare Expert Advisor già pronti basati sulle classi della libreria Standard fornite insieme al terminale client (vedere Creazione di Expert Advisor già pronti in Procedura guidata MQL5 per i dettagli). Consente di verificare rapidamente le tue idee di trading, tutto ciò di cui hai bisogno è creare la tua classe di segnali di trading. La struttura di questa classe ed esempio può essere trovata nell'articolo MQL5 Wizard: How to Create a Module of Trading Signals .

L'idea generica è la seguente: la classe dei segnali di trading è derivata da CExpertSignal , la successiva, è necessario sovrascrivere i metodi virtuali LongCondition() e ShortCondition() con i propri metodi.

C'è un libro "Strategie dei migliori trader " (in russo), ci sono molte strategie di trading che sono considerate lì, ci concentreremo sui modelli di candele di inversione, confermati dagli oscillatori Stochastic , CCI , MFI e RSI .

Il modo migliore è creare la classe separata, derivata da CExpertSignal per il controllo della formazione di pattern di candele. Per la conferma dei segnali di trading, generati da pattern candlestick, è sufficiente scrivere la classe, derivata da CCandlePattern e aggiungere lì le caratteristiche necessarie (ad esempio, conferma da oscillatori).

Qui considereremo i segnali, basati sui modelli di candele di inversione "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star), confermati dall'indicatore stocastico . 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 a candele.


1. Modelli di candele di inversione "Morning Star" e "Evening Star"

1.1. Morning Star

Questo pattern indica l'inversione del trend ribassista, è composto da tre candele (Fig. 1). Dopo una lunga candela nera c'è una candela (il colore non è importante) con un piccolo corpo, che si trova all'esterno del corpo della candela nera. Il piccolo corpo di una candela significa che i punti di forza dei rialzisti e degli orsi sono uguali e il mercato è pronto a cambiare il trend.

La terza candela del modello è la candela rialzista, il suo corpo non è sovrapposto al corpo della seconda candela e il prezzo di chiusura si trova all'interno del corpo della prima candela (ribassista). Anche la candela risultante del modello è tracciata nella Figura 1.

Nel caso in cui la seconda candela sia una candela simile a un doji, il modello si chiama "Morning Doji Star".

Figura 1. Modelli di candele "Morning Star" e "Morning Doji Star"

Figura 1. Modelli di candele "Morning Star" e "Morning Doji Star"

L'identificazione del pattern "Morning Star" è implementata nei metodi CheckPatternMorningStar() e CheckPatternMorningDoji() della classe CCandlePattern :

//+------------------------------------------------------------------+
//| Check formation of the "Morning Star" pattern                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1))             && // bearish candle, its body greater than average candle body
      (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // second candle has small body (lower than half of the average body)
      (Close(2)<Close(3))                       && // close of the second candle is lower than close of the first 
      (Open(2)<Open(3))                         && // open of the second canlde is lower than open of the first
      (Close(1)>MidOpenClose(3)))                  // close of the last completed candle is higher than center of the first 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Check formation of the "Morning Doji Star" pattern               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji Star
   if((Open(3)-Close(3)>AvgBody(1)) && // bearish candle with body greater than average candle body 
      (AvgBody(2)<AvgBody(1)*0.1)   && // the second candle has a very small body (doji) 
      (Close(2)<Close(3))           && // close of the second candle is lower than close of the first 
      (Open(2)<Open(3))             && // open of the second candle is lower than open of the first
      (Open(1)>Close(2))            && // up gap at the last completed candle
      (Close(1)>Close(2)))             // close of the last completed candle is higher than close of the second
      return(true);
//---
   return(false);
  }

I metodi CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) della classe CCandlePattern sono usati per controllare la formazione dei pattern candlestick "Morning Star" e "Morning Doji Star".


1.2. Evening Star

Questo pattern indica l'inversione del trend rialzista, è composto da tre candele (Fig. 2). Dopo una lunga candela bianca c'è una candela (il colore non è importante) con un piccolo corpo, che si trova all'esterno del corpo della candela bianca. Il piccolo corpo di una candela significa che i punti di forza dei rialzisti e degli orsi sono uguali e il mercato è pronto a cambiare il trend.

La terza candela del modello è la candela ribassista, il suo corpo non è sovrapposto al corpo della seconda candela e il prezzo di chiusura si trova all'interno del corpo della prima candela (rialzista). Anche la candela risultante del modello è tracciata nella Figura 2.

Nel caso in cui la seconda candela sia una candela simile a una doji, il modello si chiama "Evening Doji Star".

Figura 2. Pattern di candele "Evening Star" e "Evening Doji Star"

Figura 2. Pattern di candele "Evening Star" e "Evening Doji Star"

Ecco i metodi per identificare i modelli "Evening Star" e "Evening Doji Star":

//+------------------------------------------------------------------+
//| Check formation of the "Evening Star" pattern                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))             && // bullish candle with body higher than average body 
      (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // second candle has a small body (less than half of the average)
      (Close(2)>Close(3))                       && // close of the second candle is higher than close of the first
      (Open(2)>Open(3))                         && // open of the second candle is higher than open of the first
      (Close(1)<MidOpenClose(3)))                  // close of the last completed candle is lower than center of the first 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Check formation of the "Evening Doji Star" pattern               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji Star
   if((Close(3)-Open(3)>AvgBody(1)) && // bullish candle with body higher than average 
      (AvgBody(2)<AvgBody(1)*0.1)   && // second candle has a very small body (doji) 
      (Close(2)>Close(3))           && // close of the second candle is higher than close of the first
      (Open(2)>Open(3))             && // opend of the second candle is higher than open of the first
      (Open(1)<Close(2))            && // down gap at the last completed candle
      (Close(1)<Close(2)))             // close of the last completed candle is lower than close of the second 
      return(true);
//---
   return(false);
  }

I metodi CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) della classe CCandlePattern sono usati per controllare la formazione dei pattern di candele "Evening Star" e "Evening Doji Star".


2. Segnali di trading, confermati dall'indicatore stocastico

I segnali di trading per aprire posizioni lunghe o corte devono essere confermati dall'oscillatore stocastico . La linea del segnale %D deve essere maggiore/inferiore del corrispondente livello critico (30 o 70).

La chiusura della posizione aperta dipende dai valori dell'indicatore %D. Si può fare in 2 casi:

  1. se la linea %D ha raggiunto il livello critico opposto (80 per posizione lunga e 20 per posizione corta)
  2. se il segnale inverso non è confermato (quando la linea %D raggiunge i seguenti livelli: 20 per posizione lunga e 80 per posizione corta)

Figura 3. Modello "Evening Star", confermato dall'indicatore stocastico

Figura 3. Modello "Evening Star", confermato dall'indicatore stocastico



  • int CH_HM_Stoch::LongCondition() - verifica le condizioni per aprire la posizione lunga (restituisce 80) e chiudere la posizione corta (restituisce 40);
  • int CH_HM_Stoch::ShortCondition() - controlla le condizioni per aprire la posizione corta (restituisce 80) e chiudere la posizione lunga (restituisce 40).

2.1. Aprire una posizione lunga/Chiudere una posizione corta

  1. La formazione del pattern "Morning Star" deve essere confermata dall'Indicatore Stocastico : StochSignal(1)<30 (il valore della linea di segnale dell'Indicatore Stocastico dell'ultima barra completata deve essere inferiore a 30).

  2. La posizione corta deve essere chiusa se la linea di segnale dell'indicatore stocastico ha attraversato verso l'alto i livelli 20 o 80.

//+------------------------------------------------------------------+
//| Checks conditions for entry and exit from market                 |
//| 1) Market entry (open long position, result=80)                  |
//| 2) Market exit (close short position, result=40)                 |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::LongCondition()
  {
   int result=0;
//--- idx can be used to determine Expert Advisor work mode
//--- idx=0 - in this case EA checks trade conditions at each tick
//--- idx=1 - in this case EA checks trade consition only at news bars
   int idx   =StartIndex();
//--- checking of conditions to open long position
//--- formation of Morning Star pattern and signal line<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30))
     result=80;
//--- checking of conditions to close short position
//--- signal line crossover of overbought/oversold levels (downward 20, upward 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- return result
   return(result);
  }

2.2. Aprire una posizione corta/Chiudere una posizione lunga

  1. La formazione del pattern "Evening Star" deve essere confermata dall'Indicatore Stocastico : StochSignal(1)>70 (il valore della linea di segnale dell'Indicatore Stocastico dell'ultima barra completata deve essere maggiore di 70).

  2. La posizione lunga deve essere chiusa se la linea di segnale dell'indicatore stocastico ha attraversato verso il basso i livelli 80 o 20.

//+------------------------------------------------------------------+
//| Checks conditions for entry and exit from market                 |
//| 1) Market entry (open short position, result=80)                 |
//| 2) Market exit (close long position, result=40)                  |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::ShortCondition()
  {
   int result=0;
//--- idx can be used to determine Expert Advisor work mode
//--- idx=0 - in this case EA checks trade conditions at each tick
//--- idx=1 - in this case EA checks trade consition only at news bars
   int idx   =StartIndex();
//--- checking of conditions to open short position
//--- formation of Evening Star and signal line>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70))
     result=80;
//--- checking of conditions to close long position
//--- signal line crossover of overbought/oversold levels (downward 80, upward 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- return result
   return(result);
  }


2.3. Creazione di Expert Advisor utilizzando MQL5 Wizard

La classe CMS_ES_Stoch non è inclusa nelle classi della Standard Library, per utilizzarla è necessario scaricare il file acms_es_stoch.mqh (vedi allegati) e salvarlo nella cartella client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals. Lo stesso dovrebbe essere fatto con il file candlepatterns.mqh. Puoi usarlo nella procedura guidata MQL5 dopo il riavvio del MetaEditor.

Per creare un Expert Advisor, avvia la procedura guidata MQL5 :

Fig. 4. Creazione di Expert Advisor utilizzando la procedura guidata MQL5

Fig. 4. Creazione di Expert Advisor utilizzando la procedura guidata MQL5

Specifichiamo il nome dell'Expert Advisor:

Fig. 5. Proprietà generali dell'Expert Advisor

Fig. 5. Proprietà generali dell'Expert Advisor

Dopodiché dobbiamo selezionare i moduli dei segnali di trading utilizzati.

Fig. 6. Proprietà del segnale dell'Expert Advisor

Fig. 6. Proprietà del segnale dell'Expert Advisor

Nel nostro caso utilizziamo solo un modulo di segnali di trading.

Aggiungendo il modulo " Segnali basati su Morning/Evening Stars by Stochastic " dei segnali di trading:

Fig. 7. Proprietà del segnale dell'Expert Advisor

Fig. 7. Proprietà del segnale dell'Expert Advisor

Modulo di segnali di trading aggiunto:

Fig. 8. Proprietà del segnale dell'Expert Advisor

Fig. 8. Proprietà del segnale dell'Expert Advisor

Puoi selezionare qualsiasi proprietà di trascinamento, ma utilizzeremo "Trailing Stop non utilizzato":

Fig. 9. Proprietà di trascinamento dell'Expert Advisor

Fig. 9. Proprietà di trascinamento dell'Expert Advisor

Per quanto riguarda le proprietà di gestione del capitale, utilizzeremo "Trading con volume di scambi fisso":

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

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

Premendo il pulsante "Fine", otterremo il codice dell'Expert Advisor generato, che si trova in Expert_AMS_ES_Stoch.mq5, verrà salvato in terminal_data_folder\MQL5\Experts\.

I parametri di input predefiniti dell'Expert Advisor generato:

//--- inputs for main signal
input int            Signal_ThresholdOpen   =10;     // Signal threshold value to open [0...100]
input int            Signal_ThresholdClose  =10;     // Signal threshold value to close [0...100]
input double         Signal_PriceLevel      =0.0;    // Price level to execute a deal
input double         Signal_StopLevel       =50.0;   // Stop Loss level (in points)
input double         Signal_TakeLevel       =50.0// Take Profit level (in points)

devono essere sostituiti con:

//--- inputs for main signal
input int            Signal_ThresholdOpen   =40;     // Signal threshold value to open [0...100]
input int            Signal_ThresholdClose  =20;     // Signal threshold value to close [0...100]
input double         Signal_PriceLevel      =0.0;    // Price level to execute a deal
input double         Signal_StopLevel       =0.0;    // Stop Loss level (in points)
input double         Signal_TakeLevel       =0.0;    // Take Profit level (in points)

I parametri di ingresso 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 trade signal abbiamo specificato i valori fissi della soglia:

  • Posizione aperta: 80;
  • Posizione di chiusura: 40.

L'Expert Advisor, generato dal Wizard MQL5, apre e chiude la posizione utilizzando i "voti" dei moduli dei segnali di trading. Viene utilizzato anche il voto del modulo principale (come contenitore, costituito da tutti i moduli aggiunti), ma i suoi metodi LongCondition() e ShortCondition() restituiscono sempre 0.

I risultati del voto del modulo principale vengono utilizzati anche nella media dei "voti". Nel nostro caso abbiamo: modulo principale + 1 modulo di segnali di trading, quindi dobbiamo tener conto di questo fatto quando si impostano i valori di soglia. Per questo motivo ThresholdOpen e ThresholdClose devono essere impostati come 40=(0+80)/2 e 20=(0+40)/2.

Il valore dei parametri di ingresso Signal_StopLevel e Signal_TakeLevel è impostato a 0, significa che la chiusura delle posizioni verrà eseguita solo quando le condizioni di chiusura saranno vere.


2.4. Risultati del backtest su dati storici

Consideriamo il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).

Nella creazione di Expert Advisor abbiamo utilizzato il volume fisso ( Trading Fixed Lot , 0.1), non viene utilizzato l'algoritmo Trailing Stop ( Trailing non utilizzato ).

Fig. 11. Risultati dei test dell'Expert Advisor, basati su Morning/Evening Stars + Stochastic"

Fig. 11. Risultati dei test dell'Expert Advisor, basati su Morning/Evening Stars + Stochastic"


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

Il codice dell'Expert Advisor, creato da MQL5 Wizard è allegato in expert_ams_es_stoch.mq5.


Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/301

Procedura guidata MQL5 - Segnali di trading basati su Dark Cloud Cover/Piercing Line + RSI Procedura guidata MQL5 - Segnali di trading basati su Dark Cloud Cover/Piercing Line + RSI

Vengono considerati i segnali di trading basati sul pattern di candele "Dark Cloud Cover/Piercing Line", confermato dall'indicatore Relative Strength Index (RSI). Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.

Procedura guidata MQL5 - Segnali di trading basati su Dark Cloud Cover/Piercing Line + MFI Procedura guidata MQL5 - Segnali di trading basati su Dark Cloud Cover/Piercing Line + MFI

Vengono presi in considerazione i segnali di trading basati sul pattern di candele "Dark Cloud Cover/Piercing Line", confermato dall'indicatore Market Facilitation Index (MFI). Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.

Procedura guidata MQL5 - Segnali di trading basati su Engulfing rialzista/Engulfing ribassista + CCI Procedura guidata MQL5 - Segnali di trading basati su Engulfing rialzista/Engulfing ribassista + CCI

Vengono considerati i segnali di trading basati sul pattern di candele "Bullish Engulfing/Bearish Engulfing", confermato dall'indicatore Commodity Channel Index (CCI). Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.

Procedura guidata MQL5 - Segnali di trading basati su Engulfing rialzista/Engulfing ribassista + MFI Procedura guidata MQL5 - Segnali di trading basati su Engulfing rialzista/Engulfing ribassista + MFI

Vengono presi in considerazione i segnali di trading basati sul pattern di candele "Bullish Engulfing/Bearish Engulfing", confermato dall'indicatore Market Facilitation Index (MFI). Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.