Unisciti alla nostra fan page
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:
- 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
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
1. Aprire una posizione long
Condizioni per aprire una posizione long:
- StateEMA(0)<0 è StateEMA(1)>0: la media mobile aumenta sulla barra corrente e sull'ultima completata;
- StateClose(1)>0: il prezzo di chiusura dell'ultima barra completata è superiore alla media mobile;
- MainADX(0)>minimum_ADX: il valore ADX della barra corrente è maggiore del valore minimo specificato (per verifica presenza trend);
- 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:
- StateEMA(0)<0 è StateEMA(1)<0: la media mobile diminuisce sulla barra corrente e sull'ultima completata;
- StateClose(1)<0: il prezzo di chiusura della barra completata è inferiore alla media mobile;
- MainADX(0)>minimum_ADX: il valore ADX della barra corrente è maggiore del valore minimo specificato (per verifica presenza trend);
- 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
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
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
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 mobileSi 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.
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 MACDSi 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.