MQL5 Wizard ermöglicht es, den Code für Expert Advisors automatisch zu erstellen. Detaillierte Informationen findest du in Erstellung von Fertigen Expert Advisors im MQL5 Wizard.
In diesem Artikel betrachten wir eine Strategie, die auf dem Crossover von Kursen mit dem gleitenden Durchschnitt basiert und durch den ADX-Indikator bestätigt wird. Diese Strategie trägt den Namen „Signale basierend auf Kurs-Crossover mit MA und ADX-Bestätigung“ (beim automatischen Erstellen eines EAs im MQL5 Wizard).
Handelssignale:
- Kaufen: Der Schlusskurs der letzten abgeschlossenen Kerze liegt über dem gleitenden Durchschnitt, und der gleitende Durchschnitt steigt sowohl in der aktuellen als auch in der letzten abgeschlossenen Kerze.
- Verkaufen: Der Schlusskurs der letzten abgeschlossenen Kerze liegt unter dem gleitenden Durchschnitt, und der gleitende Durchschnitt fällt sowohl in der aktuellen als auch in der letzten abgeschlossenen Kerze.
- Um falsche Signale zu filtern, wird die Trendstärke (ADX > ADXmin) und die Trendrichtung mithilfe der Directional Movement Indizes (DI+ und DI-) überprüft.
Diese Strategie ist in der Klasse CSignalADX_MA implementiert (sie muss in den Ordner terminal_data_folder/MQL5/Include/Expert/Signal/SignalADX-MA.mqh eingefügt werden).

Abbildung 1. Handelssignale basierend auf Kurs-Crossover mit gleitendem Durchschnitt, bestätigt durch ADX
Handelssignale
Die Handelsstrategie ist in der Klasse CSignalADX_MA implementiert. Sie enthält einige geschützte Methoden, die den Zugriff auf Indikatoren und Kurswerte erleichtern:
double PlusADX(int ind) // gibt den Wert der DI+-Linie der Kerze zurück double MainADX(int ind) // gibt den Wert der Hauptlinie der Kerze zurück double MinusADX(int ind) // gibt den Wert der DI--Linie der Kerze zurück double EMA(int ind) // gibt den Wert des gleitenden Durchschnitts der Kerze zurück double Close(int ind) // gibt den Wert des Schlusskurses der Kerze zurück double StateADX(int ind) // gibt die Differenz zwischen den DI+- und DI--Linien zurück double StateEMA(int ind) // gibt einen positiven Wert zurück, wenn die EMA steigt, und negativ, wenn sie fällt double StateClose(int ind) // gibt die Differenz zwischen dem Schlusskurs und dem gleitenden Durchschnitt zurück
1. Lange Position eröffnen
Die Bedingungen für das Öffnen einer langen Position:
StateEMA(0) < 0undStateEMA(1) > 0: der gleitende Durchschnitt steigt in der aktuellen und der letzten abgeschlossenen Kerze;StateClose(1) > 0: der Schlusskurs der letzten abgeschlossenen Kerze liegt über dem gleitenden Durchschnitt;MainADX(0) > minimum_ADX: der ADX-Wert der aktuellen Kerze liegt über dem festgelegten Minimalwert (zur Überprüfung der Trendpräsenz);StateADX(0) > 0: Der DI+ ist größer als DI- der aktuellen Kerze.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für das Öffnen einer langen Position (Kauf) | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- Bedingung 1: gleitender Durchschnitt steigt in der aktuellen und der letzten abgeschlossenen Kerze bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- Bedingung 2: Schlusskurs der letzten abgeschlossenen Kerze liegt über dem gleitenden Durchschnitt bool Buy_Condition_2=(StateClose(1)>0); //--- Bedingung 3: der ADX-Wert der aktuellen Kerze liegt über dem festgelegten Minimalwert (Trend-Schwelle) bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: der Wert von DI+ ist größer als DI- der aktuellen Kerze 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; //--- Überprüfung aller Bedingungen return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4); }
2. Lange Position schließen
Die Bedingungen zum Schließen einer langen Position:
StateEMA(0) < 0undStateEMA(1) < 0: der gleitende Durchschnitt fällt in der aktuellen und der letzten abgeschlossenen Kerze;StateClose(1) < 0: der Schlusskurs der abgeschlossenen Kerze liegt unter dem gleitenden Durchschnitt;MainADX(0) > minimum_ADX: der ADX-Wert der aktuellen Kerze liegt über dem festgelegten Minimalwert (zur Überprüfung der Trendpräsenz);StateADX(0) < 0: Der DI- ist größer als DI+ der aktuellen Kerze.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen zum Schließen einer langen Position | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseLong(double& price) { //--- Bedingung 1: der gleitende Durchschnitt fällt in der aktuellen und der letzten abgeschlossenen Kerze bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- Bedingung 2: Schlusskurs der abgeschlossenen Kerze liegt unter dem gleitenden Durchschnitt bool Sell_Condition_2=(StateClose(1)<0); //--- Bedingung 3: der ADX-Wert der aktuellen Kerze liegt über dem festgelegten Minimalwert (Trend-Schwelle) bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: der Wert von DI- ist kleiner als DI- der aktuellen Kerze bool Sell_Condition_4=(StateADX(0)<0); //--- price=0.0; //--- Überprüfung aller Bedingungen return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4); }
3. Kurze Position eröffnen
Die Bedingungen für das Öffnen einer kurzen Position sind die gleichen wie die Bedingungen zum Schließen einer langen Position.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für das Öffnen einer kurzen Position (Verkauf)| //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- Bedingung 1: der gleitende Durchschnitt fällt in der aktuellen und der letzten abgeschlossenen Kerze bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- Bedingung 2: Schlusskurs der abgeschlossenen Kerze liegt unter dem gleitenden Durchschnitt bool Sell_Condition_2=(StateClose(1)<0); //--- Bedingung 3: der ADX-Wert der aktuellen Kerze liegt über dem festgelegten Minimalwert (Trend-Schwelle) bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: der Wert von DI- ist kleiner als DI- der aktuellen Kerze 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; //--- Überprüfung aller Bedingungen return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4); }
4. Kurze Position schließen
Die Bedingungen zum Schließen einer kurzen Position sind die gleichen wie die Bedingungen zum Öffnen einer langen Position.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen zum Schließen einer kurzen Position | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseShort(double& price) { //--- Bedingung 1: der gleitende Durchschnitt steigt in der aktuellen und der letzten abgeschlossenen Kerze bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- Bedingung 2: Schlusskurs der letzten abgeschlossenen Kerze liegt über dem gleitenden Durchschnitt bool Buy_Condition_2=(StateClose(1)>0); //--- Bedingung 3: der ADX-Wert der aktuellen Kerze liegt über dem festgelegten Minimalwert (Trend-Schwelle) bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: der Wert von DI+ ist größer als DI- der aktuellen Kerze bool Buy_Condition_4=(StateADX(0)>0); //--- price=0.0; //--- Überprüfung aller Bedingungen return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4); }
Erstellung eines Expert Advisors mit MQL5 Wizard
Um einen Handelsroboter basierend auf der Strategie zu erstellen, musst du die Signalparameter als „Signale basierend auf Kurs-Crossover mit MA bestätigt durch ADX“ in der Option „Erstellung von Fertigen Expert Advisors“ im MQL5 Wizard auswählen:

Abbildung 2. Wählen Sie "Signale basierend auf Kurs-Crossover mit MA bestätigt durch ADX" im MQL5 Wizard
Anschließend musst du den benötigten Trailing-Stop-Algorithmus sowie das Geld- und Risikomanagement-System angeben. Der Code des Expert Advisors wird automatisch erstellt, du kannst ihn kompilieren und im Strategietester der MetaTrader 5-Clientterminal testen.
Testergebnisse
Betrachten wir das Backtesting des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 01.01.2010 - 05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).
Bei der Erstellung des Expert Advisors verwendeten wir das feste Volumen (Trading Fixed Lot, 0.1), der Trailing-Stop-Algorithmus wurde nicht verwendet (Trailing nicht verwendet).

Abbildung 3. Historische Backtesting-Ergebnisse des Expert Advisors, basierend auf Kurs-Crossover mit MA und ADX-Bestätigung
Anlagen: Die SignalADX-MA.mqh mit der Klasse CSignalADX_MA muss in terminal_data_folder/MQL5/Include/Expert/Signal/ platziert werden.
Die ma_crossover_adx.mq5 enthält den Code des Expert Advisors, der mit MQL5 Wizard erstellt wurde.
Verwandte Beiträge
- Handelssignale mit MQL5 Wizard: Bullish und Bearish Harami mit CCI bestätigen
- MQL5 Wizard: Handelssignale mit 3 schwarzen Krähen/3 weißen Soldaten und Stochastik erstellen
- MQL5 Wizard: Handels-Signale mit 3 schwarzen Krähen / 3 weißen Soldaten + CCI für MetaTrader 5
- MQL5 Wizard: Handelssignale durch 3 Schwarze Krähen/3 Weiße Soldaten + RSI
- MQL5 Wizard: Handels-Signale mit 3 Schwarzen Krähen und 3 Weißen Soldaten + MFI