Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
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

MQL5 Wizard - Segnali commerciali basati sul crossover di due EMA con filtro temporale intraday - sistema esperto per MetaTrader 5

Visualizzazioni:
335
Valutazioni:
(39)
Pubblicato:
2021.11.11 16:20
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

MQL5 Wizard permette di creare automaticamente il codice di Expert Advisors. Vedi Creazione di Expert Advisors pronti in MQL5 Wizard per i dettagli.

I segnali di trading della strategia, basati su due medie mobili sono considerati in MQL5 Wizard - Trade Signals Based on Crossover of Two Exponentially Smoothed Moving Averages. Le medie mobili sono efficaci in caso di trend, in altri casi forniscono molti falsi segnali. Uno dei modi per migliorare la strategia è l'uso dei filtri temporali (per esempio, aprire nuove posizioni durante la sessione europea del FOREX).

Qui considereremo la strategia basata sul crossover di due medie mobili smussate esponenzialmente (EMA veloce e EMA lento) con filtro temporale intraday. La strategia chiamata "Signals based on crossover of two EMA with intraday time filter" (quando si crea automaticamente l'EA in MQL5 Wizard).

Segnali di trading:

  • Aprire una posizione long: il crossover della EMA veloce verso l'alto della EMA lenta e le condizioni del filtro temporale intraday non sono soddisfatte.
  • Aprire una posizione short: il crossover della EMA veloce verso il basso della EMA lenta e le condizioni del filtro temporale intraday non sono soddisfatte.

Questa strategia è implementata nella classe CSignal2EMA_ITF .

Il filtraggio dei segnali, basato su periodi di tempo specificati, è implementato nella classe CSignalITF. Come esempio del suo utilizzo, considereremo la classe CSignal2EMA_ITF (contiene l'oggetto della classe CSignalITF).

Il sistema di trading si basa su ordini pendenti, i livelli di prezzo sono calcolati in base ai valori della media mobile, vengono utilizzate le unità ATR (Average True Range).

Figura 1. Segnali di trading, basati sul crossover di due EMA con filtro temporale intraday

Figura 1. Segnali di trading, basati sul crossover di due EMA con filtro temporale intraday

Segnali di trading

La strategia di trading è implementata in CSignal2EMA_ITF, ha alcuni metodi protetti per semplificare l'accesso ai valori dell'indicatore:

 double  FastEMA(int ind)      // restituisce il valore dell'EMA veloce della barra
 double  SlowEMA(int ind)      // restituisce il valore dell'EMA lento della barra
 double  StateFastEMA(int ind) // restituisce il valore positivo/negativo se l'EMA veloce è aumentato/diminuito
 double  StateSlowEMA(int ind) // restituisce il valore positivo/negativo se l'EMA lento è aumentato/diminuito
 double  StateEMA(int ind)     // restituisce la differenza tra EMA veloce e lento
 double  ATR(int ind)          // restituisce il valore di ATR della barra


La caratteristica di questo sistema è la seguente: l'operazione di trading dipende dal parametro esterno Limit. A seconda del suo segno, ci sono diversi casi:

  1. Limit>0. Apre un operazione di trading su un ritiro del prezzo nel caso di falsa rottura della media mobile sul prezzo migliore del prezzo di mercato (gli ordini Buy Limit e Sell Limit saranno piazzati a seconda del segnale di trading)
  2. Limit<0. Entrerà nella direzione del movimento del prezzo (gli ordini Buy Stop e Sell Stop saranno piazzati a seconda del segnale di trading).
  3. Limit=0. In questo caso aprirà posizioni utilizzando i prezzi di mercato.


1. Aprire una posizione long

Controlla le condizioni per aprire una posizione lunga: se la differenza tra l'EMA veloce e l'EMA lento sull'ultima barra completata ha cambiato il suo segno da "-" a "+" (StateEMA(1)>0 && StateEMA(2)<0).

Successivamente, controlla le condizioni del filtro orario intraday chiamando il metodo CheckOpenLong() della classe CSignalITF. Se il trading è permesso, calcolerà il livello di prezzo base (il valore della media mobile) e il valore ATR range dell'ultima barra completata.

A seconda del segno del parametro di input Limit, posizionerà l'ordine di acquisto pendente. Il prezzo dell'ordine, i livelli Take Profit e Stop Loss sono calcolati rispetto al livello del prezzo base (in unità ATR). Il tempo di scadenza dell'ordine è definito (in barre) dal parametro di input Expiration.

//+------------------------------------------------------------------+
//| Checks conditions to open long position (buy)                    |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(!(StateEMA(1)>0 && StateEMA(2)<0))                    return(false);
   if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
   sl   =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp   =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
   return(true);
  }

2. Chiude posizione long

Nel nostro caso la funzione che controlla le condizioni per chiudere la posizione long restituisce sempre false, cioè si presume che la posizione long sarà chiusa da Take Profit o Stop Loss. Se necessario, potete scrivere il vostro codice con l'implementazione di questo metodo.

//+------------------------------------------------------------------+
//| Checks conditions to close long position                         |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseLong(double& price)
  {
   return(false);
  }


3. Apre posizione short

Controlla le condizioni per aprire una posizione short: se la differenza tra l'EMA veloce e l'EMA lento sull'ultima barra completata ha cambiato il suo segno da "+" a "-" (StateEMA(1)<0 && StateEMA(2)>0).

Successivamente, controlla le condizioni del filtro orario intraday chiamando il metodo CheckOpenLong() della classe CSignalITF. Se il trading è permesso, calcolerà il livello di prezzo base (il valore della media mobile) e il valore ATR range dell'ultima barra completata.

A seconda del segno del parametro di input Limit, posizionerà l'ordine di vendita pendente. Il prezzo dell'ordine, i livelli Take Profit e Stop Loss sono calcolati rispetto al livello del prezzo base (in unità ATR). Il tempo di scadenza dell'ordine è definito (in barre) dal parametro di input Expiration.

//+------------------------------------------------------------------+
//| Checks conditions to open short position (sell)                  |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(!(StateEMA(1)<0 && StateEMA(2)>0))                     return(false);
   if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   price      =m_symbol.NormalizePrice(ema+m_limit*atr);
   sl         =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp         =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
   return(true);
  }

4. Chiude posizione short

Nel nostro caso la funzione che controlla le condizioni per chiudere la posizione short restituisce sempre false, cioè si presume che la posizione sarà chiusa da Take Profit o Stop Loss. Se necessario, potete scrivere il vostro codice con l'implementazione di questo metodo.

//+------------------------------------------------------------------+
//| Checks conditions to close short position                        |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseShort(double& price)
  {
   return(false);
  }


5. Trailing Stop dell'ordine di acquisto pendente

L'Expert Advisor seguirà gli ordini pendenti a seconda del valore corrente della media mobile e dell'ATR.

Il sistema di trading posizionerà gli ordini pendenti a seconda dei segnali di trading. Se l'ordine è stato piazzato con successo, seguirà l'ordine pendente lungo la media mobile. L'ordine sarà eseguito se il prezzo di mercato raggiungerà il prezzo dell'ordine.
//+--------------------------------------------------------------------+
//| Checks conditions to modify pending buy order                      |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* order,double& price)
  {
//--- check
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
//---
   return(true);
  }


6. Trailing Stop di un ordine di vendita pendente

L'Expert Advisor seguirà gli ordini pendenti a seconda del valore corrente della media mobile e dell'ATR.

L'ordine sarà eseguito se il prezzo di mercato raggiungerà il prezzo dell'ordine.

//+--------------------------------------------------------------------+
//| Checks conditions to modify pending buy order                      |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* order,double& price)
  {
//--- check
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   price=m_symbol.NormalizePrice(ema+m_limit*atr);
//---
   return(true);
  }

Creazione di Expert Advisor con MQL5 Wizard

Per creare un robot di trading basato sulla strategia è necessario selezionare le proprietà del segnale come "Signals based on crossover of two EMA with intraday time filter" nell'opzione "Creating Ready-Made Expert Advisors" di MQL5 Wizard:

Figura 2. Seleziona "Signals based on crossover of two EMA with intraday time filter" nel MQL5 Wizard

Figura 2. Seleziona "Signals based on crossover of two EMA with intraday time filter" nel MQL5 Wizard

Successivamente dovrete specificare l'algoritmo di trailing stop necessario ed il sistema di money and risk management . Il codice di Expert Advisor sarà creato automaticamente, puoi compilarlo e testarlo in Strategy Tester del terminale MetaTrader 5.


Risultati dei test

Consideriamo il backtesting dell'Expert Advisor su dati storici (EUenSD H1, periodo di test: 1.1.2010-05.01.2011, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration=4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0).

Nella creazione di Expert Advisor abbiamo usato il lotto fisso (Trading Fixed Lot, 0.1), l'algoritmo Trailing Stop non viene usato (Trailing not used).

Figura 3. Risultati dei test dell'Expert Advisor con segnali di trading, basati sul crossover di due EMA senza l'uso del filtro ITF

Figura 3. Risultati dei test dell'Expert Advisor con segnali di trading, basati sul crossover di due EMA senza l'uso del filtro ITF

Il filtro intraday non viene utilizzato, quindi ci sono molti falsi segnali. I segnali di trading possono essere migliorati se si esegue l'analisi dei risultati delle transazioni a seconda delle ore di trading.

Nel nostro caso abbiamo trovato che l'incrocio di due EMA fornisce molti falsi segnali a partire dalle 6:00 fino alle 23:59. Possiamo specificare il filtro temporale intraday impostando i parametri del filtro.

Per esempio, possiamo specificare un filtro temporale che permette di aprire posizioni solo dalle 0:00 alle 5:59. Può essere fatto impostando il valore di BadHoursOfDay=16777152=11111111111111111111000000b. Tutte le altre ore di trading sono "cattive", quindi è meglio vietare l'apertura di nuove posizioni dalle 6:00 alla fine della giornata.

Se impostiamo il valore di BadHoursOfDay=16777152, filtreremo molti falsi segnali:

Figura 4. Risultati dei test dell'Expert Advisor con segnali di trading, basati sul crossover di due EMA con filtro temporale (BadHoursofDay=16777152)

Figura 4. Risultati dei test dell'Expert Advisor con segnali di trading, basati sul crossover di due EMA con filtro temporale (BadHoursofDay=16777152)


Il CSignalITF fornisce molte altre funzioni di filtraggio del tempo (basta specificare i minuti "buoni" e "cattivi" nell'ora, le ore nel giorno, i giorni nella settimana).

L'uso di filtri temporali permette di migliorare i segnali di trading e di prendere in considerazione le dinamiche del mercato (per esempio, le caratteristiche della sessione di trading).

Allegati: The Signal2EMA-ITF.mqh con la classe CSignal2EMA_ITF devono essere collocate nella cartella terminal_data_folder\MQL5\Include\Expert\Signal.

Il file expert_2ema_itf.mq5 contiene il codice dell'Expert Advisor, creato con MQL5 Wizard.


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

MQL5 Wizard - Segnali di trading basati sul crossover delle linee principali e di segnale dell'indicatore MACD MQL5 Wizard - Segnali di trading basati sul crossover delle linee principali e di segnale dell'indicatore MACD

Si considerano i segnali di trading basati sull'incrocio delle linee principali e di segnale dell'indicatore MACD (CSignalMACD da MQL5 Standard Library). Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.

MQL5 Wizard - Segnali di trading basati sul crossover di due medie mobili smussate esponenzialmente MQL5 Wizard - Segnali di trading basati sul crossover di due medie mobili smussate esponenzialmente

Si considerano i segnali di trading basati sull'incrocio dei prezzi di due medie mobili smussate esponenzialmente. Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.

MQL5 Wizard - Segnali di trading basati sul crossover delle linee dell'indicatore Alligator MQL5 Wizard - Segnali di trading basati sul crossover delle linee dell'indicatore Alligator

Vengono considerati i segnali di trading basati sul crossover delle linee dell'indicatore tecnico Alligator. 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 modelli di candele di inversione Procedura guidata MQL5 - Segnali di trading basati su modelli di candele di inversione

Vengono presi in considerazione i segnali di trading basati su modelli di candele di inversione. Il codice dell'Expert Advisor basato su questa strategia può essere generato automaticamente utilizzando il Wizard MQL5.