und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5

MQL5 Wizard - Handelssignale basierend auf der Kreuzung des Preises und gleitenden Durchschnittes mit der Bestätigung durch den ADX-Indikator - Experte für den MetaTrader 5
- Ansichten:
- 1886
- Rating:
- Veröffentlicht:
- 2016.09.02 10:50
- Aktualisiert:
- 2016.11.22 07:34
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Der Artikel Der MQL5-Assistent: Erstellen von Expert-Systemen ohne Programmierung beschreibt Schritte der automatischen Erstellung des Codes eines Expert Advisors mithilfe von MQL5 Wizard.
Hier erzählen wir über eine Trendstrategie, bei welcher der Preis den gleitenden Durchschnitt kreuzt, mit der Bestätigung durch den ADX Indikator. Diese Strategie ist im Standardpaket des Terminals enthalten und nennt sich "Signals based on price crossover with MA confirmed by ADX".
Handelssignale:
- Kauf: der Schlusspreis des vollständigen Balkens liegt über dem gleitenden Durchschnitt, dabei steigt der gleitende Durchschnitt auf dem vorherigen und dem aktuellen Balken.
- Verkauf: der Schlusspreis des vollständigen Balkens liegt unter dem gleitenden Durchschnitt, dabei sinkt der gleitende Durchschnitt auf dem vorherigen und aktuellen Balken.
- Zusätzlich wird die Aussortierung falscher Signale umgesetzt. Dabei werden die Richtung (DI+, DI-) und die Stärke eines Trends (ADX>ADXmin) analysiert.
Die Handelsstrategie wird in der Klasse CSignalADX_MA implementiert.
Abbildung 1. Handelssignale der Strategie basierend auf der Kreuzung des Preises und des gleitenden Durchschnitts mit der Bestätigung durch ADX
Handelssignale
Das Modul mit Handelssignalen nach dieser Strategie wird in der Klasse CSignalADX_MA implementiert. Die Klasse enthält mehrere geschützte (protected) Methoden, die für den Zugang zu Werten von Kursen und Indikatoren genutzt werden:
double PlusADX(int ind) // gibt den Wert der Linie DI+ auf dem angegebenen Balken zurück double MainADX(int ind) // gibt den Wert der Hauptlinie auf dem angegebenen Balken zurück double MinusADX(int ind) // gibt den Wert der Linie DI- auf dem angegebenen Balken zurück double EMA(int ind) // gibt den Wert des gleitenden Durchschnitts auf dem angegebenen Balken zurück double Close(int ind) // gibt den Schlusspreis auf dem angegebenen Balken zurück double StateADX(int ind) // gibt die Differenz zwischen den Linien DI+ und DI- zurück double StateEMA(int ind) // gibt einen positiven Wert zurück, wenn EMA steigt und einen negativen, wenn EMA sinkt double StateClose(int ind) // gibt die Differenz zwischen dem Schlusspreis und dem gleitenden Durchschnitt zurück
1. Eröffnen einer Long-Position
Bedingungen für das Eröffnen einer Long-Position:
- StateEMA(0)<0 und StateEMA(1)>0: der gleitende Durchschnitt steigt auf dem aktuellen und vorherigen Balken;
- StateClose(1)>0: der Schlusspreis des vollständigen Balkens liegt über dem gleitenden Durchschnitt;
- MainADX(0)>minimum_ADX: der ADX-Wert auf dem aktuellen Balken ist größer als das angegebene Minimum;
- StateADX(0)>0: DI+>DI- auf dem aktuellen Balken.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für das Eröffnen einer Long-Position | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- Bedingung 1: der gleitende Durchschnitt steigt auf dem aktuellen und dem vorherigen Balken bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- Bedingung 2: der Schlusspreis des vollständigen Balkens liegt über dem gleitenden Durchschnitt bool Buy_Condition_2=(StateClose(1)>0); //--- Bedingung 3: der ADX-Wert auf dem aktuellen Balken ist größer als der festgelegte Mindestwert bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: der Wert von DI+ ist größer als von DI- auf dem aktuellen Balken 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üft ob alle vier Bedingungen gleichzeitig erfüllt werden return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4); }
2. Schließen einer Long-Position
Bedingungen für das Schließen einer Long-Position:
- StateEMA(0)<0 и StateEMA(1)<0: der gleitende Durchschnitt sinkt auf dem aktuellen und vorherigen Balken;
- StateClose(1)<0: der Schlusspreis des vollständigen Balkens liegt unter dem gleitenden Durchschnitt;
- MainADX(0)>minimum_ADX: der ADX-Wert auf dem aktuellen Balken ist größer als das angegebene Minimum;
- StateADX(0)<0: DI->DI+ auf dem aktuellen Balken.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für das Schließen einer Long-Position | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseLong(double& price) { //--- Bedingung 1: der gleitende Durchschnitt sinkt auf dem aktuellen und dem vorherigen Balken Sbool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- Bedingung 2: der Schlusspreis des vollständigen Balkens liegt unter dem gleitenden Durchschnitt bool Sell_Condition_2=(StateClose(1)<0); //--- Bedingung 3: der ADX-Wert auf dem aktuellen Balken ist größer als der festgelegte Mindestwert bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: DI- ist größer als DI+ auf dem aktuellen Balken bool Sell_Condition_4=(StateADX(0)<0); //--- price=0.0; //--- überprüft ob alle vier Bedingungen gleichzeitig erfüllt werden return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4); }
3. Eröffnen einer Short-Position
Die Bedingungen für das Eröffnen einer Short-Position und das Schließen einer Long-Position sind gleich.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für das Eröffnen einer Short-Position | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- Bedingung 1: der gleitende Durchschnitt sinkt auf dem aktuellen und dem vorherigen Balken Sbool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- Bedingung 2: der Schlusspreis des vollständigen Balkens liegt unter dem gleitenden Durchschnitt bool Sell_Condition_2=(StateClose(1)<0); //--- Bedingung 3: der ADX-Wert auf dem aktuellen Balken ist größer als der festgelegte Mindestwert bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: DI- ist größer als DI+ auf dem aktuellen Balken 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üft ob alle vier Bedingungen gleichzeitig erfüllt werden return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4); }
4. Schließen einer Short-Position
Die Bedingungen für das Schließen einer Short-Position und Eröffnen einer Long-Position sind gleich.
//+------------------------------------------------------------------+ //| Überprüft die Bedingungen für das Schließen einer Short-Position | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseShort(double& price) { //--- Bedingung 1: der gleitende Durchschnitt steigt auf dem aktuellen und dem vorherigen Balken bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- Bedingung 2: der Schlusspreis des vollständigen Balkens liegt über dem gleitenden Durchschnitt bool Buy_Condition_2=(StateClose(1)>0); //--- Bedingung 3: der ADX-Wert auf dem aktuellen Balken ist größer als der festgelegte Mindestwert bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- Bedingung 4: der Wert von DI+ ist größer als von DI- auf dem aktuellen Balken bool Buy_Condition_4=(StateADX(0)>0); //--- price=0.0; //--- überprüft ob alle vier Bedingungen gleichzeitig erfüllt werden return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4); }
Erstellung eines Expert Advisors mithilfe von MQL5 Wizard
Um einen Handelsroboter nach dieser Strategie mithilfe von MQL5 Wizard zu erstellen, wählen Sie "Signals based on price crossover with MA confirmed by ADX" im zweiten Schritt aus:
Abbildung 2. Auswahl des Moduls von Signalen auf der Basis der Kreuzung des Preises und des gleitenden Durchschnitts mit der Bestätigung durch den ADX Indikator im MQL5 Wizard
Geben Sie den gewünschten Typ von Trailing Stop und Kapitalmanagement in den nächsten Schritten an. Der Code des Expert Advisors wird automatisch generiert, er muss kompiliert werden und dann können Sie mit dem Testen anfangen.
Testergebnisse
Die Ergebnisse des EAs bei einem Test unter Verwendung von historischen Daten (EURUSD H1, Zeitraum: 1.1.2010-05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).
Dieser Expert Advisor benutzt das Modul für den Handel mit einer festgelegten Lotgröße von 0.1 Lot (Trading Fixed Lot), ein Trailing Stop wurde nicht verwendet (Trailing not used).
Abbildung 3. Testergebnisse für den EA, der die Strategie auf der Basis der Kreuzung des Preises und des gleitenden Durchschnitts verwendet, mit der Bestätigung durch den ADX Indikator
Die Datei SignalADX-MA.mqh, die die Klasse CSignalADX_MA enthält, muss nach client_terminal_data\folder\MQL5\Include\Expert\Signal kopiert werden.
Der von dem MQL5 Wizard generierte Code des Expert Advisors ist angefügt als Datei: ma_crossover_adx.mq5.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/258

Handelssignale auf der Basis der gegenseitigen Lage drei exponentiell geglätteter gleitender Durchschnitte "Signals based on three EMA".

Ein System für die Ausführung einiger Routineaufgaben im manuellen Handel mit MT5. Ein-Klick-Handel.

Handelssignale basierend auf der Kreuzung von zwei exponentiellen gleitenden Durchschnitten "Signals based on crossover of two EMA".

Handelsignale auf der Basis der Kreuzung der Hauptlinie und der Signallinie des MACD Indikators "Signals based on crossover of main and signal MACD lines" (die Klasse CSignalMACD ist in der Standardbibliothek enthalten).