Startseite Systemhandel Beitrag

MQL5 Wizard: Handels-signale mit Morgen- und Abendstern + CCI für MetaTrader 5

Anhang
322.zip (6.46 KB, Herunterladen 0 mal)

Der MQL5 Wizard ermöglicht es, fertige Expert Advisors zu erstellen, die auf den Klassen der Standardbibliothek basieren, die zusammen mit dem Client-Terminal geliefert werden (siehe Erstellung von fertigen Expert Advisors im MQL5 Wizard für Details). Es ermöglicht, Handelsideen schnell zu überprüfen; alles, was du tun musst, ist, deine eigene Handels-signalklasse zu erstellen. Die Struktur dieser Klasse und ein Beispiel findest du im Artikel MQL5 Wizard: So erstellst du ein Modul für Handels-signale.

Die grundlegende Idee ist folgende: Die Handels-signalklasse leitet sich von CExpertSignal ab. Danach ist es notwendig, die virtuellen Methoden LongCondition() und ShortCondition() mit deinen eigenen Methoden zu überschreiben.

Es gibt ein Buch "Strategien der besten Trader" (auf Russisch), in dem viele Handelsstrategien behandelt werden. Wir konzentrieren uns auf Umkehrkerzenmuster, die durch die Indikatoren Stochastik, CCI, MFI und RSI bestätigt werden.

Am besten ist es, eine separate Klasse zu erstellen, die von CExpertSignal abgeleitet ist, um die Bildung von Kerzenmustern zu überprüfen. Für die Bestätigung von Handelssignalen, die durch Kerzenmuster generiert werden, reicht es aus, eine Klasse zu schreiben, die von CCandlePattern abgeleitet ist und die notwendigen Merkmale (zum Beispiel Bestätigung durch Oszillatoren) hinzuzufügen.

Hier betrachten wir die Signale, die auf den Umkehr-Kerzenmustern "Morgenstern/Abendstern" (Morgen-Doji-Stern/Abend-Doji-Stern) basieren, die durch den CCI Indikator bestätigt werden. Das Modul der Handelssignale basiert auf der CCandlePattern Klasse, ein einfaches Beispiel für deren Verwendung zur Erstellung von Handelssignalen mit Kerzenmustern.

1. Morgenstern und Abendstern Umkehrkerzenmuster

1.1. Morgenstern

Dieses Muster zeigt die Umkehr eines Abwärtstrends an, es besteht aus drei Kerzen (Abb. 1). Nach einer langen schwarzen Kerze gibt es eine Kerze (die Farbe ist nicht wichtig) mit einem kleinen Körper, die außerhalb des Körpers der schwarzen Kerze liegt. Der kleine Körper einer Kerze bedeutet, dass die Kräfte der Bullen und Bären gleich sind und der Markt bereit ist, den Trend zu wechseln.

Die dritte Kerze des Musters ist die bullische Kerze, deren Körper nicht mit dem Körper der zweiten Kerze überlappt und deren Schlusskurs im Körper der ersten (bearishen) Kerze liegt. Die resultierende Kerze des Modells ist ebenfalls in Abbildung 1 dargestellt.

Im Falle, dass die zweite Kerze eine doji-ähnliche Kerze ist, wird das Modell "Morgen-Doji-Stern" genannt.

Abb. 1. Morgenstern und Morgen-Doji-Kerzenmuster

Abb. 1. Morgenstern und Morgen-Doji-Kerzenmuster

Die Identifizierung des "Morgenstern"-Musters erfolgt in den Methoden CheckPatternMorningStar() und CheckPatternMorningDoji() der CCandlePattern-Klasse:

//+------------------------------------------------------------------+
//| Überprüfen der Bildung des "Morgenstern"-Musters                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morgenstern
   if((Open(3)-Close(3)>AvgBody(1))             && // bearish candle, dessen Körper größer ist als der durchschnittliche Kerzenkörper
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // zweite Kerze hat einen kleinen Körper (weniger als die Hälfte des durchschnittlichen Körpers)
      (Close(2)<Close(3))                       && // Schlusskurs der zweiten Kerze liegt unter dem Schlusskurs der ersten 
      (Open(2)<Open(3))                         && // Eröffnung der zweiten Kerze liegt unter der Eröffnung der ersten
      (Close(1)>MidOpenClose(3)))                  // Schlusskurs der letzten abgeschlossenen Kerze liegt über der Mitte der ersten 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Überprüfen der Bildung des "Morgen-Doji-Stern"-Musters               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morgen-Doji-Stern
   if((Open(3)-Close(3)>AvgBody(1)) && // bearish candle mit Körper größer als der durchschnittliche Kerzenkörper 
      (AvgBody(2)<AvgBody(1)*0.1)   && // die zweite Kerze hat einen sehr kleinen Körper (doji) 
      (Close(2)<Close(3))           && // Schlusskurs der zweiten Kerze liegt unter dem Schlusskurs der ersten 
      (Open(2)<Open(3))             && // Eröffnung der zweiten Kerze liegt unter der Eröffnung der ersten
      (Open(1)>Close(2))             && // Aufwärtsgap bei der letzten abgeschlossenen Kerze
      (Close(1)>Close(2)))             // Schlusskurs der letzten abgeschlossenen Kerze liegt über dem Schlusskurs der zweiten
      return(true);
//---
   return(false);
  }

Die Methoden CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) und CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) der CCandlePattern-Klasse werden verwendet, um die Bildung der "Morgenstern"- und "Morgen-Doji-Stern"-Kerzenmuster zu überprüfen.


1.2. Abendstern

Dieses Muster zeigt die Umkehr eines Aufwärtstrends an, es besteht aus drei Kerzen (Abb. 2). Nach einer langen weißen Kerze gibt es eine Kerze (die Farbe ist nicht wichtig) mit einem kleinen Körper, die außerhalb des Körpers der weißen Kerze liegt. Der kleine Körper einer Kerze bedeutet, dass die Kräfte der Bullen und Bären gleich sind und der Markt bereit ist, den Trend zu wechseln.

Die dritte Kerze des Musters ist die bearische Kerze, deren Körper nicht mit dem Körper der zweiten Kerze überlappt und deren Schlusskurs im Körper der ersten (bullischen) Kerze liegt. Die resultierende Kerze des Modells ist ebenfalls in Abbildung 2 dargestellt.

Im Falle, dass die zweite Kerze eine doji-ähnliche Kerze ist, wird das Modell "Abend-Doji-Stern" genannt.

Abb. 2. Abendstern und Abend-Doji-Kerzenmuster

Abb. 2. Abendstern und Abend-Doji-Stern-Kerzenmuster

Hier sind die Methoden zur Identifizierung der "Abendstern"- und "Abend-Doji-Stern"-Muster:

//+------------------------------------------------------------------+
//| Überprüfen der Bildung des "Abendstern"-Musters                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Abendstern
   if((Close(3)-Open(3)>AvgBody(1))             && // bullische Kerze mit Körper höher als der durchschnittliche Körper 
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // zweite Kerze hat einen kleinen Körper (weniger als die Hälfte des Durchschnitts)
      (Close(2)>Close(3))                       && // Schlusskurs der zweiten Kerze liegt über dem Schlusskurs der ersten
      (Open(2)>Open(3))                         && // Eröffnung der zweiten Kerze liegt über der Eröffnung der ersten
      (Close(1)<MidOpenClose(3)))                  // Schlusskurs der letzten abgeschlossenen Kerze liegt unter der Mitte der ersten 
         return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Überprüfen der Bildung des "Abend-Doji-Stern"-Musters               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Abend-Doji-Stern
   if((Close(3)-Open(3)>AvgBody(1)) && // bullische Kerze mit Körper höher als der Durchschnitt 
      (AvgBody(2)<AvgBody(1)*0.1)   && // zweite Kerze hat einen sehr kleinen Körper (doji)
      (Close(2)>Close(3))           && // Schlusskurs der zweiten Kerze liegt über dem Schlusskurs der ersten
      (Open(2)>Open(3))             && // Eröffnung der zweiten Kerze liegt über der Eröffnung der ersten
      (Open(1)<Close(2))             && // Abwärtsgap bei der letzten abgeschlossenen Kerze
      (Close(1)<Close(2)))             // Schlusskurs der letzten abgeschlossenen Kerze liegt unter dem Schlusskurs der zweiten
         return(true);
//---
   return(false);
  }

Die Methoden CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) und CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) der CCandlePattern-Klasse werden verwendet, um die Bildung der "Abendstern"- und "Abend-Doji-Stern"-Kerzenmuster zu überprüfen.


2. Handelssignale, bestätigt durch den CCI-Indikator

Die Handelssignale zum Öffnen einer Long- oder Short-Position müssen durch den CCI Indikator bestätigt werden. Der Wert des CCI muss über/unter den kritischen Levels (-50 für Long-Position und 50 für Short-Position) liegen.

Der Schluss einer offenen Position hängt von den Werten des CCI ab. Dies kann in 2 Fällen geschehen:

  • Wenn die CCI-Linie das gegenteilige kritische Level erreicht hat (80 für Long-Position und -80 für Short-Position)
  • Wenn das umgekehrte Signal nicht bestätigt wird (wenn CCI die folgenden Levels erreicht: -80 für Long-Position und 80 für Short-Position)

Abb. 3. Das Abendstern-Muster, bestätigt durch den CCI-Indikator

Abb. 3. Das Abendstern-Muster, bestätigt durch den CCI-Indikator


  • int CMS_ES_CCI::LongCondition() - überprüft die Bedingungen zum Öffnen einer Long-Position (gibt 80 zurück) und zum Schließen der Short-Position (gibt 40 zurück);
  • int CMS_ES_CCI::ShortCondition() - überprüft die Bedingungen zum Öffnen einer Short-Position (gibt 80 zurück) und zum Schließen der Long-Position (gibt 40 zurück).

2.1. Long-Position eröffnen/Short-Position schließen

  1. Die Bildung des "Morgenstern"-Musters muss durch den CCI Indikator bestätigt werden: CCI(1)<-50 (der Wert des CCI der letzten abgeschlossenen Kerze muss weniger als -50 sein).

  2. Die Short-Position muss geschlossen werden, wenn der CCI Indikator das kritische Level -80 nach oben oder das kritische Level 80 nach unten durchkreuzt.

//+------------------------------------------------------------------+
//| Überprüft Bedingungen für den Einstieg und Ausstieg aus dem Markt                 |
//| 1) Markteintritt (Long-Position eröffnen, Ergebnis=80)                  |
//| 2) Marktausgang (Short-Position schließen, Ergebnis=40)                 |
//+------------------------------------------------------------------+
int CMS_ES_CCI::LongCondition()
  {
   int result=0;
//--- idx kann verwendet werden, um den Arbeitsmodus des Expert Advisors zu bestimmen
//--- idx=0 - in diesem Fall überprüft der EA Handelsbedingungen bei jedem Tick
//--- idx=1 - in diesem Fall überprüft der EA Handelsbedingungen nur bei Nachrichtenkerzen
   int idx   =StartIndex();
//--- Überprüfung der Bedingungen zum Öffnen einer Long-Position
//--- Bildung des Morgenstern-Musters und CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- Überprüfung der Bedingungen zum Schließen der Short-Position
//--- Signal-Linienüberkreuzung der überkauften/überverkauften Levels (abwärts -80, abwärts -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- Rückgabe des Ergebnisses
   return(result);
  }

2.2. Short-Position eröffnen/Long-Position schließen

  1. Die Bildung des "Abendstern"-Musters muss durch den CCI Indikator bestätigt werden: CCI(1)>50 (der Wert des CCI-Indikators der letzten abgeschlossenen Kerze muss größer als 50 sein).

  2. Die Long-Position muss geschlossen werden, wenn der CCI Indikator das kritische Level -80 oder 80 nach unten durchkreuzt.

//+------------------------------------------------------------------+
//| Überprüft Bedingungen für den Einstieg und Ausstieg aus dem Markt                 |
//| 1) Markteintritt (Short-Position eröffnen, Ergebnis=80)                 |
//| 2) Marktausgang (Long-Position schließen, Ergebnis=40)                  |
//+------------------------------------------------------------------+
int CMS_ES_CCI::ShortCondition()
  {
   int result=0;
//--- idx kann verwendet werden, um den Arbeitsmodus des Expert Advisors zu bestimmen
//--- idx=0 - in diesem Fall überprüft der EA Handelsbedingungen bei jedem Tick
//--- idx=1 - in diesem Fall überprüft der EA Handelsbedingungen nur bei Nachrichtenkerzen
   int idx   =StartIndex();
//--- Überprüfung der Bedingungen zum Öffnen einer Short-Position
//--- Bildung des Abendstern-Musters und CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- Überprüfung der Bedingungen zum Schließen der Long-Position
//--- Signal-Linienüberkreuzung der überkauften/überverkauften Levels (abwärts -80, abwärts 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- Rückgabe des Ergebnisses
   return(result);
  }


2.3. Erstellung eines Expert Advisors mit dem MQL5 Wizard

Die CMS_ES_CCI-Klasse ist nicht in den Klassen der Standardbibliothek enthalten. Um sie zu verwenden, ist es notwendig, die Datei acms_es_cci.mqh herunterzuladen (siehe Anhänge) und sie in den Client_Terminal_Datenordner\MQL5\Include\Expert\Signal\MySignals zu speichern. Das gleiche sollte mit der Datei candlepatterns.mqh gemacht werden. Du kannst sie im MQL5 Wizard nach dem Neustart des MetaEditors verwenden.

Um einen Expert Advisor zu erstellen, starte den MQL5 Wizard:

Abb. 4. Erstellung eines Expert Advisors mit MQL5 Wizard

Abb. 4. Erstellung eines Expert Advisors mit MQL5 Wizard

Lass uns den Namen des Expert Advisors angeben:

Abb. 5. Allgemeine Eigenschaften des Expert Advisors

Abb. 5. Allgemeine Eigenschaften des Expert Advisors

Danach müssen wir die verwendeten Module der Handelssignale auswählen.

Abb. 6. Signal Eigenschaften des Expert Advisors

Abb. 6. Signal Eigenschaften des Expert Advisors

In unserem Fall verwenden wir nur ein Modul der Handelssignale.

Hinzufügen des Moduls "Signale basierend auf Morgen-/Abendsternen, bestätigt durch CCI" der Handelssignale:

Abb. 7. Signal Eigenschaften des Expert Advisors

Abb. 7. Signal Eigenschaften des Expert Advisors

Modul der Handelssignale hinzugefügt:

Abb. 8. Signal Eigenschaften des Expert Advisors

Abb. 8. Signal Eigenschaften des Expert Advisors

Du kannst beliebige Trailing-Eigenschaften auswählen, aber wir werden "Trailing Stop nicht verwendet" anwenden:

Abb. 9. Trailing Eigenschaften des Expert Advisors

Abb. 9. Trailing Eigenschaften des Expert Advisors

Was die Geldverwaltungs-Eigenschaften betrifft, verwenden wir "Handel mit festem Handelsvolumen":

Abb. 10. Geldverwaltungs-Eigenschaften des Expert Advisors

Abb. 10. Geldverwaltungs-Eigenschaften des Expert Advisors

Durch Drücken der Taste "Fertigstellen" erhalten wir den Code des generierten Expert Advisors, der in Expert_AMS_ES_CCI.mq5 gespeichert wird und sich im terminal_data_folder\MQL5\Experts\ befindet.

Die Standard-Eingabeparameter des generierten Expert Advisors:

//--- Eingaben für das Hauptsignal
input int            Signal_ThresholdOpen   =10;     // Signal-Schwellenwert zum Öffnen [0...100]
input int            Signal_ThresholdClose  =10;     // Signal-Schwellenwert zum Schließen [0...100]
input double         Signal_PriceLevel      =0.0;    // Preisniveau zum Ausführen eines Deals
input double         Signal_StopLevel       =50.0;   // Stop-Loss-Niveau (in Punkten)
input double         Signal_TakeLevel       =50.0    // Take-Profit-Niveau (in Punkten)

muss ersetzt werden durch:

//--- Eingaben für das Hauptsignal
input int            Signal_ThresholdOpen   =40;     // Signal-Schwellenwert zum Öffnen [0...100]
input int            Signal_ThresholdClose  =20;     // Signal-Schwellenwert zum Schließen [0...100]
input double         Signal_PriceLevel      =0.0    // Preisniveau zum Ausführen eines Deals
input double         Signal_StopLevel       =0.0    // Stop-Loss-Niveau (in Punkten)
input double         Signal_TakeLevel       =0.0    // Take-Profit-Niveau (in Punkten)

Die Parameter Signal_ThresholdOpen/Signal_ThresholdClose ermöglichen es, Schwellenwerte für das Öffnen und Schließen von Positionen anzugeben.

Im Code der Methoden LongCondition() und ShortCondition() der Handelssignalklasse haben wir feste Werte für die Schwellenwerte angegeben:

  • Position öffnen: 80;
  • Position schließen: 40.

Der vom MQL5 Wizard generierte Expert Advisor öffnet und schließt Positionen mithilfe der "Stimmen" aus den Modulen der Handelssignale. Die Stimme des Hauptmoduls (als Container, es besteht aus allen hinzugefügten Modulen) wird ebenfalls verwendet, aber seine Methoden LongCondition() und ShortCondition() geben immer 0 zurück.

Die Abstimmungsergebnisse des Hauptmoduls werden auch im "Stimmen"-Durchschnitt verwendet. In unserem Fall haben wir: Hauptmodul + 1 Modul der Handelssignale, daher müssen wir diesen Faktor bei der Festlegung der Schwellenwerte berücksichtigen. Aufgrund dieser Tatsache müssen die ThresholdOpen und ThresholdClose auf 40=(0+80)/2 und 20=(0+40)/2 gesetzt werden.

Die Werte der Parameter Signal_StopLevel und Signal_TakeLevel sind auf 0 gesetzt, was bedeutet, dass das Schließen der Positionen nur erfolgt, wenn die Schließbedingungen wahr sind.


2.4. Ergebnisse der historischen Rücktests

Betrachten wir die Rücktests des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

Bei der Erstellung des Expert Advisors haben wir das feste Volumen verwendet (Fester Lot-Handel, 0.1), der Trailing Stop-Algorithmus wird nicht verwendet (Kein Trailing verwendet).

Abb. 11. Testergebnisse des Expert Advisors, basierend auf Morgen-/Abendsternen + CCI

Abb. 11. Testergebnisse des Expert Advisors, basierend auf Morgen-/Abendsternen + CCI


Die besten Eingabeparameter können mit dem Strategietester des MetaTrader 5 Client-Terminals gefunden werden.

Der Code des Expert Advisors, der mit dem MQL5 Wizard erstellt wurde, ist in expert_ams_es_cci.mq5 angehängt.


Verwandte Beiträge

Kommentar (0)