Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Expert Advisors

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:
1691
Rating:
(30)
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

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
Die Besonderheit der Umsetzung dieser Handelssignale besteht darin, dass es zusätzlich überprüft wird, ob ein Trend vorhanden ist (mithilfe von ADX Linien). Dies ermöglicht es, falsche Signale auszusortieren und Handelsbedingungen mithilfe von Werten des aktuellen (unvollständigen Balken) zu überprüfen.


1. Eröffnen einer Long-Position

Bedingungen für das Eröffnen einer Long-Position:

  1. StateEMA(0)<0 und StateEMA(1)>0: der gleitende Durchschnitt steigt auf dem aktuellen und vorherigen Balken;
  2. StateClose(1)>0: der Schlusspreis des vollständigen Balkens liegt über dem gleitenden Durchschnitt;
  3. MainADX(0)>minimum_ADX: der ADX-Wert auf dem aktuellen Balken ist größer als das angegebene Minimum;
  4. 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:

  1. StateEMA(0)<0 и StateEMA(1)<0: der gleitende Durchschnitt sinkt auf dem aktuellen und vorherigen Balken;
  2. StateClose(1)<0: der Schlusspreis des vollständigen Balkens liegt unter dem gleitenden Durchschnitt;
  3. MainADX(0)>minimum_ADX: der ADX-Wert auf dem aktuellen Balken ist größer als das angegebene Minimum;
  4. 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 basierend auf der Kreuzung des Preises und des Gleitenden Durchschnitts im MQL5 Wizard mit der Bestätigung durch den ADX Indikator

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

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

MQL5 Wizard - Handelssignale MQL5 Wizard - Handelssignale

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

Exp5-VirtualTradePad for MetaTrader 5 v.4 Exp5-VirtualTradePad for MetaTrader 5 v.4

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

MQL5 Wizard - Handelssignale basierend auf der Kreuzung von zwei exponentiell geglätteten gleitenden Durchschnitten MQL5 Wizard - Handelssignale basierend auf der Kreuzung von zwei exponentiell geglätteten gleitenden Durchschnitten

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

MQL5 Wizard- Handelssignale basierend auf der Kreuzung der Hauptlinie und der Signallinie des MACD Indikators MQL5 Wizard- Handelssignale basierend auf der Kreuzung der Hauptlinie und der Signallinie des MACD Indikators

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