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 crossover di prezzo con media mobile, confermati da ADX - sistema esperto per MetaTrader 5

Visualizzazioni:
216
Valutazioni:
(30)
Pubblicato:
2021.11.11 16:19
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 degli Expert Advisors. Da vedere Creazione di Expert Advisors pronti in MQL5 Wizard per i dettagli.

Qui considereremo la strategia basata sull'incrocio dei prezzi con l'indicatore della media mobile, confermato dall'indicatore ADX. La strategia chiamata "Segnali basati sull'incrocio dei prezzi con la MA confermato dall'ADX" (quando si crea automaticamente l'EA in MQL5 Wizard).

Segnali di trading:

  • Comprare: il prezzo di chiusura dell'ultima barra completata è superiore alla media mobile, la media mobile aumenta nella barra attuale e nell'ultima barra completata.
  • Vendere: il prezzo di chiusura dell'ultima barra completata è inferiore alla media mobile, la media mobile diminuisce nella barra attuale e nell'ultima barra completata.
  • Per filtrare il falso segnale, controlla la potenza del trend (ADX>ADXmin) e la direzione del trend usando gli indici di movimento direzionale (DI+ e DI-).

Questa strategia è implementata nella classe CSignalADX_MA (deve essere posizionata in terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh).

Figura 1. Segnali di trading basati sull'incrocio dei prezzi con la media mobile, confermati da ADX

Figura 1. Segnali di trading basati sull'incrocio dei prezzi con la media mobile, confermati da ADX

Segnali di trading

La strategia di trading è implementata nella classe CSignalADX_MA, ha alcuni metodi protetti per semplificare l'accesso a indicatori e valori di prezzo:

double    PlusADX( int ind)      // restituisce il valore della riga DI+ della barra 
double    MainADX( int ind)      // restituisce il valore della riga principale della barra
double    MinusADX( int ind)     // restituisce il valore di DI-line della barra
double    EMA( int ind)          // restituisce il valore della media mobile della barra 
double    Close( int ind)        // restituisce il valore del prezzo di chiusura della barra 
double    StateADX( int ind)     // restituisce la differenza tra DI+ e DI - righe 
double    StateEMA( int ind)     // restituisce il valore positivo se EMA aumenta e negativo se diminuisce 
double    StateClose( int ind)   // restituisce la differenza tra il prezzo di chiusura e la media mobile
La caratteristica di questa implementazione è il controllo aggiuntivo della presenza del trend (tramite l'indicatore di movimento direzionale). Permette di filtrare i falsi segnali e controllare le condizioni di trading utilizzando i valori della barra corrente (non completata).


1. Aprire una posizione long

Condizioni per aprire una posizione long:

  1. StateEMA(0)<0 è StateEMA(1)>0: la media mobile aumenta sulla barra corrente e sull'ultima completata;
  2. StateClose(1)>0: il prezzo di chiusura dell'ultima barra completata è superiore alla media mobile;
  3. MainADX(0)>minimum_ADX: il valore ADX della barra corrente è maggiore del valore minimo specificato (per verifica presenza trend);
  4. StateADX(0)>0: DI+ è maggiore di DI- della barra corrente.
//+------------------------------------------------------------------+
//| Checks conditions to open long position (buy)                    |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condition 1: moving average increases on the current and last completed bars 
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condition 2: closing price of the last completed bar is higher than moving average 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold) 
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI+ is greater than DI- of the current bar
    bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- checking of all conditions
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. Chiudere la posizione long

Condizioni per chiudere una posizione long:

  1. StateEMA(0)<0 è StateEMA(1)<0: la media mobile diminuisce sulla barra corrente e sull'ultima completata;
  2. StateClose(1)<0: il prezzo di chiusura della barra completata è inferiore alla media mobile;
  3. MainADX(0)>minimum_ADX: il valore ADX della barra corrente è maggiore del valore minimo specificato (per verifica presenza trend);
  4. StateADX(0)<0: DI- è maggiore di DI+ della barra corrente.
//+------------------------------------------------------------------+
//| Checks conditions to close long position                         |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- condition 1: the moving average decreases on the current and last completed bars 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condition 2: closing price of the completed bar is lower than moving average 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI- is greater than DI- of the current bar
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- checking of all conditions
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


3. Aprire una posizione short

Le condizioni per aprire una posizione short sono le stesse delle condizioni di chiusura della posizione long.

//+------------------------------------------------------------------+
//| Checks conditions to open short position (sell)                  |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- condition 1: the moving average decreases on the current and last completed bars 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- condition 2: closing price of the completed bar is lower than moving average 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI- is greater than DI- of the current bar
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- checking of all conditions
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


4. Chiudere la posizione short

Le condizioni per chiudere una posizione short sono le stesse condizioni di apertura della posizione long.

//+------------------------------------------------------------------+
//| Checks conditions to close short position                        |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- condition 1: moving average increases on the current and last completed bars
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- condition 2: closing price of the last completed bar is higher than moving average 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- condition 3: the ADX value of the current bar is greater than specified minimal value (trend threshold)
    bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- condition 4: the value of DI+ is greater than DI- of the current bar
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- checking of all conditions
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

Creazione di Expert Advisor utilizzando MQL5 Wizard

Per creare un robot di trading basato sulla strategia è necessario scegliere le proprietà del segnale come " Segnali basati sul crossover di prezzo con MA confermato da ADX " nell'opzione "Creazione di Expert Advisor pronti" di MQL5 Wizard :

Figura 2. Scegli 'Segnali basati sul crossover di prezzo con MA confermato da ADX' in MQL5 Wizard

Figura 2. Scegli "Segnali basati sul crossover di prezzo con MA confermato da ADX" in MQL5 Wizard

Successivamente devi specificare l'algoritmo necessario di trailing stop e il sistema di gestione del denaro e del rischio . Il codice di Expert Advisor verrà creato automaticamente, puoi compilarlo e testarlo in Strategy Tester del terminale client MetaTrader 5.


Risultati dei test

Si consideri il backtesting dell'Expert Advisor su dati storici (EURUSD H1, periodo di test: 1.1.2010-05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).

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 ).

Figura 3. Risultati storici del backtesting dell'Expert Advisor, basati sul crossover di prezzo con MA confermato da ADX

Figura 3. Risultati storici del backtesting dell'Expert Advisor, basati sul crossover di prezzo con MA confermato da ADX


Allegati: SignalADX-MA.mqh con classe CSignalADX_MA deve essere posizionato in terminal_data_folder\MQL5\Include\Expert\Signal\.

Il ma_crossover_adx.mq5 contiene il codice dell'Expert Advisor, creato utilizzando MQL5 Wizard.


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

Procedura guidata MQL5 - Segnali di trading basati su tre medie mobili Procedura guidata MQL5 - Segnali di trading basati su tre medie mobili

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

MQL5 Wizard - Segnali di trading basati sull'incrocio dei prezzi con l'indicatore della media mobile MQL5 Wizard - Segnali di trading basati sull'incrocio dei prezzi con l'indicatore della media mobile

Si considerano i segnali di trading basati sull'incrocio dei prezzi con l'indicatore di media mobile (CSignalMA 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 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.