MQL5 Wizard: Trading-Signale mit Morgen- und Abendstern Mustern und Stochastic

Mike 2011.03.26 01:11 47 0 0
Anhang

Der MQL5 Wizard ermöglicht es dir, fertige Expert Advisors zu erstellen, die auf den Standardbibliotheksklassen basieren, die mit dem Client-Terminal geliefert werden. Dies ist eine großartige Möglichkeit, um deine Handelsideen schnell zu überprüfen – du musst lediglich deine eigene Handelsklassensignale erstellen. Die Struktur dieser Klasse und ein Beispiel findest du im Artikel MQL5 Wizard: Wie man ein Modul für Handelssignale erstellt.

Das Grundkonzept ist folgendermaßen: Die Handelsklassensignale leiten sich von CExpertSignal ab. Anschließend musst du die Methoden LongCondition() und ShortCondition() mit deinen eigenen Methoden überschreiben.

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

Der beste Weg ist, eine separate Klasse abzuleiten, die von CExpertSignal abgeleitet ist, um die Bildung von Kerzenmustern zu überprüfen. Zur Bestätigung der Handelssignale, die durch Kerzenmuster generiert werden, reicht es aus, eine Klasse abzuleiten, die von CCandlePattern abgeleitet ist, und die erforderlichen Merkmale (z. B. Bestätigung durch Oszillatoren) hinzuzufügen.

Hier betrachten wir die Signale, die auf den Umkehrkerzenmustern "Morgenstern" und "Abendstern" basieren, die durch den Stochastic Indikator bestätigt werden. Das Modul der Handelssignale basiert auf der CCandlePattern Klasse, die ein einfaches Beispiel für ihre Verwendung zur Erstellung von Handelssignalen mit Kerzenmustern darstellt.

1. Umkehrkerzenmuster: "Morgenstern" und "Abendstern"

1.1. Morgenstern

Dieses Muster zeigt die Umkehr eines Abwärtstrends an und besteht aus drei Kerzen (Abb. 1). Nach einer langen schwarzen Kerze folgt 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 von Bullen und Bären gleich sind und der Markt bereit ist, den Trend zu ändern.

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

Falls die zweite Kerze eine Doji-ähnliche Kerze ist, wird das Modell als "Morgen Doji Stern" bezeichnet.

Abbildung 1. Morgenstern und Morgen Doji Kerzenmuster

Abbildung 1. Morgenstern und Morgen Doji Kerzenmuster

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

//+------------------------------------------------------------------+
//| Überprüft die Ausbildung des "Morgenstern"-Musterns                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morgenstern
   if((Open(3)-Close(3)>AvgBody(1))             && // bearish Kerze, deren Körper größer ist als der durchschnittliche Kerzenkörper
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // zweite Kerze hat kleinen Körper (kleiner 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 dem Zentrum der ersten
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Überprüft die Ausbildung des "Morgen Doji Stern"-Musterns          |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morgen Doji Stern
   if((Open(3)-Close(3)>AvgBody(1)) && // bearish Kerze 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 über der Eröffnung der ersten
      (Open(1)>Close(2))             && // Aufwärts-Gap 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 Ausbildung der "Morgenstern" und "Morgen Doji Stern" Kerzenmuster zu überprüfen.


1.2. Abendstern

Dieses Muster zeigt die Umkehr eines Aufwärtstrends an und besteht aus drei Kerzen (Abb. 2). Nach einer langen weißen Kerze folgt 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 von Bullen und Bären gleich sind und der Markt bereit ist, den Trend zu ändern.

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

Falls die zweite Kerze eine Doji-ähnliche Kerze ist, wird das Modell als "Abend Doji Stern" bezeichnet.

Abbildung 2. Abendstern und Abend Doji Kerzenmuster

Abbildung 2. Abendstern und Abend Doji Kerzenmuster

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

//+------------------------------------------------------------------+
//| Überprüft die Ausbildung des "Abendstern"-Musterns                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Abendstern
   if((Close(3)-Open(3)>AvgBody(1))             && // bullish 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 dem Zentrum der ersten 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Überprüft die Ausbildung des "Abend Doji Stern"-Musterns               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Abend Doji Stern
   if((Close(3)-Open(3)>AvgBody(1)) && // bullish Kerze mit Körper höher als der durchschnittliche Körper 
      (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ärts-Gap 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 Ausbildung der "Abendstern" und "Abend Doji Stern" Kerzenmuster zu überprüfen.


2. Handelssignale, die durch den Stochastic Indikator bestätigt werden

Die Handelssignale zum Öffnen einer langen oder kurzen Position müssen durch den Stochastic Oszillator bestätigt werden. Die %D-Linie muss über/unter dem entsprechenden kritischen Niveau (30 oder 70) liegen.

Das Schließen einer offenen Position hängt von den Werten des %D-Indikators ab. Dies kann in zwei Fällen erfolgen:

  1. Wenn die %D-Linie das gegenüberliegende kritische Niveau erreicht hat (80 für lange Position und 20 für kurze Position)
  2. Wenn das Umkehrsignal nicht bestätigt wird (wenn die %D-Linie die folgenden Niveaus erreicht: 20 für lange Position und 80 für kurze Position)

Abbildung 3. Abendstern-Muster, das durch den Stochastic Indikator bestätigt wird

Abbildung 3. Abendstern-Muster, das durch den Stochastic Indikator bestätigt wird



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

2.1. Lange Position öffnen/Kurze Position schließen

  1. Die Ausbildung des "Morgenstern"-Musters muss durch den Stochastic Indikator bestätigt werden: StochSignal(1)<30 (der Wert der Signalzeile des Stochastic Indikators der letzten abgeschlossenen Kerze muss kleiner als 30 sein).

  2. Die kurze Position muss geschlossen werden, wenn die Signalzeile des Stochastic Indikators die 20- oder 80-Niveaus nach oben gekreuzt hat.

//+------------------------------------------------------------------+
//| Überprüft die Bedingungen für den Markteintritt und -austritt                 |
//| 1) Markteintritt (lange Position öffnen, Ergebnis=80)                  |
//| 2) Marktaustritt (kurze Position schließen, Ergebnis=40)                   |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::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 Nachrichtenbalken
  int idx   =StartIndex();
//--- Überprüfung der Bedingungen zum Öffnen einer langen Position
//--- Ausbildung des Morgenstern-Musters und Signalzeile<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30))
     result=80;
//--- Überprüfung der Bedingungen zum Schließen der kurzen Position
//--- Signalzeilenüberkreuzung überkauft/überverkauft (nach unten 20, nach oben 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- Ergebnis zurückgeben
   return(result);
  }

2.2. Kurze Position öffnen/Lange Position schließen

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

  2. Die lange Position muss geschlossen werden, wenn die Signalzeile des Stochastic Indikators die 80- oder 20-Niveaus nach unten gekreuzt hat.

//+------------------------------------------------------------------+
//| Überprüft die Bedingungen für den Markteintritt und -austritt                 |
//| 1) Markteintritt (kurze Position öffnen, Ergebnis=80)                 |
//| 2) Marktaustritt (lange Position schließen, Ergebnis=40)                      |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::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 Nachrichtenbalken
  int idx   =StartIndex();
//--- Überprüfung der Bedingungen zum Öffnen einer kurzen Position
//--- Ausbildung des Abendstern-Musters und Signalzeile>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70))
     result=80;
//--- Überprüfung der Bedingungen zum Schließen der langen Position
//--- Signalzeilenüberkreuzung überkauft/überverkauft (nach unten 80, nach oben 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- Ergebnis zurückgeben
   return(result);
  }


2.3. Erstellung eines Expert Advisors mit MQL5 Wizard

Die Klasse CMS_ES_Stoch ist nicht in den Standardbibliotheksklassen enthalten. Um sie zu verwenden, muss die Datei acms_es_stoch.mqh heruntergeladen und im client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals gespeichert werden. Das Gleiche sollte mit der Datei candlepatterns.mqh gemacht werden. Du kannst sie nach dem Neustart des MetaEditors im MQL5 Wizard verwenden.

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

Abbildung 4. Erstellung eines Expert Advisors mit MQL5 Wizard

Abbildung 4. Erstellung eines Expert Advisors mit MQL5 Wizard

Lass uns den Namen des Expert Advisors angeben:

Abbildung 5. Allgemeine Eigenschaften des Expert Advisors

Abbildung 5. Allgemeine Eigenschaften des Expert Advisors

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

Abbildung 6. Signal-Eigenschaften des Expert Advisors

Abbildung 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 mit Stochastic" der Handelssignale:

Abbildung 7. Signal-Eigenschaften des Expert Advisors

Abbildung 7. Signal-Eigenschaften des Expert Advisors

Modul der Handelssignale hinzugefügt:

Abbildung 8. Signal-Eigenschaften des Expert Advisors

Abbildung 8. Signal-Eigenschaften des Expert Advisors

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

Abbildung 9. Trailing-Eigenschaften des Expert Advisors

Abbildung 9. Trailing-Eigenschaften des Expert Advisors

Was die Geldmanagementeigenschaften betrifft, verwenden wir "Handel mit festem Handelsvolumen":

Abbildung 10. Geldmanagementeigenschaften des Expert Advisors

Abbildung 10. Geldmanagementeigenschaften des Expert Advisors

Durch Drücken der "Fertig"-Taste erhalten wir den Code des generierten Expert Advisors, der in Expert_AMS_ES_Stoch.mq5 gespeichert wird, im terminal_data_folder\MQL5\Experts\.

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 zur Ausführung 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 zur Ausführung 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 durch MQL5 Wizard generierte Expert Advisor öffnet und schließt Positionen, indem er die "Stimmen" der Handelssignale-Module verwendet. Die Stimme des Hauptmoduls (als Container, das alle hinzugefügten Module enthält) wird ebenfalls verwendet, aber die Methoden LongCondition() und ShortCondition() geben immer 0 zurück.

Die Stimmenergebnisse des Hauptmoduls werden auch bei der "Stimmen"-Durchschnittsbildung verwendet. In unserem Fall haben wir: Hauptmodul + 1 Modul der Handelssignale, daher müssen wir diesen Aspekt bei der Festlegung der Schwellenwerte berücksichtigen. Aufgrund dieses Faktors müssen die ThresholdOpen und ThresholdClose auf 40=(0+80)/2 und 20=(0+40)/2 festgelegt 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 erfüllt sind.


2.4. Ergebnisse der historischen Rücktests

Schauen wir uns die Rücktests des Expert Advisors mit historischen Daten (EURUSD H1, Testzeitraum: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4) an.

Bei der Erstellung des Expert Advisors haben wir das feste Volumen verwendet (Feste Lot-Größe handeln, 0.1), der Trailing-Stop-Algorithmus wird nicht verwendet (Kein Trailing verwendet).

Abbildung 11. Testergebnisse des Expert Advisors, basierend auf Morgen-/Abendsternen + Stochastic

Abbildung 11. Testergebnisse des Expert Advisors, basierend auf Morgen-/Abendsternen + Stochastic


Die besten Eingabeparameter können mit dem Strategie Tester des MetaTrader 5 Clients gefunden werden.

Der Code des Expert Advisors, der vom MQL5 Wizard erstellt wurde, ist im expert_ams_es_stoch.mq5 angehängt.


Liste
Kommentar 0