Der MQL5 Wizard ermöglicht es, den Code für Expert Advisors automatisch zu erstellen. Für weitere Details siehe Fertige Expert Advisors im MQL5 Wizard erstellen.
In diesem Artikel werfen wir einen Blick auf eine Trendstrategie, die auf drei gleitenden Durchschnitten basiert. Diese Strategie nennt sich „Signale basierend auf drei EMA“. Um den Trend zu bestimmen, verwendet sie drei exponentiell geglättete gleitende Durchschnitte: FastEMA, MediumEMA und SlowEMA.
Handelsignale:
- Kaufsignal: FastEMA > MediumEMA > SlowEMA (aufwärtstrend).
- Verkaufssignal: FastEMA < MediumEMA < SlowEMA (abwärtstrend).
Diese Strategie wird in der Klasse CSignal3EMA implementiert (die Datei signal3ema.mqh muss im Verzeichnis terminal_data_folder\MQL5\Include\Expert\Signal\ abgelegt werden).

Abbildung 1. Handelssignale, basierend auf drei gleitenden Durchschnitten
Handelssignale
Die Handelsstrategie ist in der Klasse CSignal3EMA implementiert und verfügt über geschützte Methoden, um den Zugriff auf die Werte der drei gleitenden Durchschnitte (Fast, Medium, Slow) zu erleichtern:
double FastEMA(int ind) // gibt den Wert des Fast EMA der Kerze zurück double MediumEMA(int ind) // gibt den Wert des Medium EMA der Kerze zurück double SlowEMA(int ind) // gibt den Wert des Slow EMA der Kerze zurück
1. Long-Position eröffnen
Der Aufwärtstrend wird durch folgende Bedingung bestimmt: FastEMA > MediumEMA > SlowEMA:
- FastEMA(1) > MediumEMA(1): Fast EMA liegt über dem Medium EMA (letzte abgeschlossene Kerze);
- MediumEMA(2) > SlowEMA(1): Medium EMA liegt über dem Slow EMA (letzte abgeschlossene Kerze);
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen zum Eröffnen einer Long-Position (Kauf) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- 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 auf Aufwärtstrend (in der letzten abgeschlossenen Kerze): FastEMA(1) > MediumEMA(1) > SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
2. Long-Position schließen
Der Abwärtstrend wird durch folgende Bedingung bestimmt: FastEMA < MediumEMA < SlowEMA:
- FastEMA(1) < MediumEMA(1): Fast EMA liegt unter dem Medium EMA (letzte abgeschlossene Kerze);
- MediumEMA(2) < SlowEMA(1): Medium EMA liegt unter dem Slow EMA (letzte abgeschlossene Kerze);
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen zum Schließen einer Long-Position | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseLong(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- Überprüfung auf Abwärtstrend (in der letzten abgeschlossenen Kerze): FastEMA(1) < MediumEMA(1) < SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
3. Short-Position eröffnen
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen zum Eröffnen einer Short-Position (Verkauf) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- 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 auf Abwärtstrend (in der letzten abgeschlossenen Kerze): FastEMA(1) < MediumEMA(1) < SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
4. Short-Position schließen
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen zum Schließen einer Short-Position | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseShort(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- Überprüfung auf Aufwärtstrend (in der letzten abgeschlossenen Kerze): FastEMA(1) > MediumEMA(1) > SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
Du kannst das Schließen einer Short-Position verbessern: Es ist nicht notwendig, auf den Aufwärtstrend zu warten. Du kannst Short-Positionen auch schließen, wenn der Markt seitwärts läuft, was durch folgende Bedingungen bestimmt werden kann: FastEMA > MediumEMA < SlowEMA.
Erstellen eines Expert Advisors mit dem MQL5 Wizard
Um einen Handelsroboter basierend auf der Strategie zu erstellen, musst du die Signal-Eigenschaften als „Signale basierend auf drei EMA“ in der Option „Fertige Expert Advisors erstellen“ im MQL5 Wizard auswählen:

Abbildung 2. Wähle „Signale basierend auf drei EMA“ im MQL5 Wizard
Anschließend musst du den benötigten Trailing Stop-Algorithmus und das Geld- und Risikomanagement-System angeben. Der Code des Expert Advisors wird automatisch erstellt, du kannst ihn kompilieren und im Strategietester des MetaTrader 5 Client-Terminals testen.
Testergebnisse
Werfen wir einen Blick auf die Rücktests des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 01.01.2010 - 05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).
Bei der Erstellung des Expert Advisors verwendeten wir das feste Volumen (Trading Fixed Lot, 0.1). Der Trailing Stop-Algorithmus wird nicht verwendet (Trailing nicht verwendet).

Abbildung 3. Historische Rücktestergebnisse des Expert Advisors, basierend auf drei EMA
Anlagen: Die Datei Signal3EMA.mqh mit der Klasse CSignal3EMA muss im Verzeichnis terminal_data_folder\MQL5\Include\Expert\Signal abgelegt werden.
Die Datei threeema.mq5 enthält den Code des Expert Advisors, der mit dem MQL5 Wizard erstellt wurde.
Kommentar 0