MQL5 Wizard: Handelssignale mit Bullish/Bearish Engulfing und Stochastic für MetaTrader 5

Mike 2011.03.10 19:54 20 0 0
Anhang

Der MQL5 Wizard ermöglicht es, fertige Expert Advisors (EAs) basierend auf den Klassen der Standardbibliothek zu erstellen, die mit dem Client-Terminal geliefert werden (siehe auch Fertige Expert Advisors im MQL5 Wizard erstellen für weitere Details). Mit diesem Tool kannst du deine Handelsideen schnell überprüfen, indem du deine eigene Handelssignalklasse erstellst. Die Struktur dieser Klasse und ein Beispiel findest du im Artikel MQL5 Wizard: So erstellst du ein Modul für Handelssignale.

Das Grundkonzept ist folgendes: Die Klasse der Handelssignale leitet sich von CExpertSignal ab. Danach musst du die virtuellen 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 konzentrieren uns hier auf Umkehrkerzenmuster, die durch den Stochastic, CCI, MFI und RSI Oszillatoren bestätigt werden.

Am besten erstellst du eine separate Klasse, die von CExpertSignal abgeleitet ist, um die Bildung von Kerzenmustern zu überprüfen. Um die Handelssignale, die durch Kerzenmuster generiert werden, zu bestätigen, genügt es, die Klasse, die von CCandlePattern erbt, zu schreiben und die erforderlichen Funktionen (z. B. Bestätigung durch Oszillatoren) hinzuzufügen.

Hier betrachten wir die Signale, die auf dem Umkehrkerzenmuster "Bullish Engulfing/Bearish Engulfing" basieren, das durch den Stochastic Indikator bestätigt wird. Das Modul der Handelssignale basiert auf der CCandlePattern Klasse und dient als einfaches Beispiel für die Erstellung von Handelssignalen mit Kerzenmustern.


1. "Bullish Engulfing" und "Bearish Engulfing" Umkehrkerzenmuster

1.1. Bullish Engulfing

Das "Bullish Engulfing" Umkehrmuster bildet sich in einem Abwärtstrend, wenn eine kleine schwarze Kerze von einer großen weißen Kerze gefolgt wird, die die Kerze des vorherigen Tages vollständig umgibt. Die Schatten (Schwänze) der kleinen Kerze sind kurz, sodass der Körper der großen Kerze die gesamte Kerze des vorherigen Tages abdecken kann.

Abbildung 1. Bullish Engulfing Kerzenmuster

Abbildung 1. Bullish Engulfing Kerzenmuster

Die Erkennung des "Bullish Engulfing" Musters ist im CheckPatternBullishEngulfing() Methoden der CCandlePattern Klasse implementiert:

//+------------------------------------------------------------------+
//| Überprüft die Bildung des "Bullish Engulfing" Kerzenmusters      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // vorherige Kerze ist bearish
      (Close(1)-Open(1)>AvgBody(1))  &&  // Körper der bullischen Kerze ist größer als der Durchschnittswert des Körpers 
      (Close(1)>Open(2))             &&  // Schlusskurs der bullischen Kerze ist höher als der Eröffnungskurs der bearishen Kerze
      (MidOpenClose(2)<CloseAvg(2))  &&  // Abwärtstrend
      (Open(1)<Close(2)))                // Eröffnungspreis der bullischen Kerze ist niedriger als Schlusskurs der bearishen
      return(true);
//---
   return(false);
  }

Die CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) Methode der CCandlePattern Klasse wird verwendet, um die Bildung des "Bullish Engulfing" Kerzenmusters zu überprüfen.


1.2. Bearish Engulfing

Das "Bearish Engulfing" Umkehrmuster bildet sich in einem Aufwärtstrend, wenn eine kleine weiße Kerze von einer großen schwarzen Kerze gefolgt wird, die die Kerze des vorherigen Tages vollständig umgibt. Die Schatten (Schwänze) der kleinen Kerze sind kurz, was es der großen Kerze ermöglicht, die gesamte Kerze des vorherigen Tages abzudecken.

Abbildung 2. Bearish Engulfing Kerzenmuster

Abbildung 2. Bearish Engulfing Kerzenmuster

Die Erkennung des "Bearish Engulfing" Musters ist im CheckPatternBearishEngulfing() Methoden der CCandlePattern Klasse implementiert:

//+------------------------------------------------------------------+
//| Überprüft die Bildung des "Bearish Engulfing" Kerzenmusters      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // vorherige Kerze ist bullish
      (Open(1)-Close(1)>AvgBody(1)) &&  // Körper der Kerze ist höher als der Durchschnittswert des Körpers
      (Close(1)<Open(2))            &&  // Schlusskurs der bearishen Kerze ist niedriger als der Eröffnungspreis der bullischen Kerze
      (MidOpenClose(2)>CloseAvg(2)) &&  // Aufwärtstrend
      (Open(1)>Close(2)))               // Eröffnungspreis der bearishen Kerze ist höher als Schlusskurs der bullischen Kerze
      return(true);
//---
   return(false);
  }

Die CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) Methode der CCandlePattern Klasse wird verwendet, um die Bildung des "Bearish Engulfing" Kerzenmusters zu überprüfen.


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

Die Handelssignale für das Öffnen von Long- oder Short-Positionen müssen durch den Stochastic Oszillator bestätigt werden. Die %D-Linie muss höher/niedriger als die entsprechenden kritischen Werte (30 oder 70) sein.

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 (80 für Long-Positionen und 20 für Short-Positionen) erreicht hat;
  2. wenn das Umkehrsignal nicht bestätigt wird (wenn die %D-Linie folgende Niveaus erreicht: 20 für Long-Positionen und 80 für Short-Positionen).

Abbildung 3. Bullish Engulfing Muster, bestätigt durch den Stochastic Indikator

Abbildung 3. Bullish Engulfing Muster, bestätigt durch den Stochastic Indikator


Die Überprüfung der Handelsbedingungen für den Einstieg und Ausstieg wird in zwei Methoden implementiert:

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

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

  1. Die Bildung des "Bullish Engulfing" Musters muss durch den Stochastic Indikator bestätigt werden: StochSignal(1)<30 (der Wert der Signallinie des Stochastic Indikators der letzten abgeschlossenen Kerze muss kleiner als 30 sein).

  2. Die Short-Position muss geschlossen werden, wenn die Signallinie des Stochastic Indikators die 20 oder 80 Niveaus nach oben überschreitet.

//+------------------------------------------------------------------+
//| Überprüft die Bedingungen für den Eintritt und Austritt aus dem Markt                 |
//| 1) Markteintritt (Long-Position öffnen, Ergebnis=80)                  |
//| 2) Marktaustritt (Short-Position schließen, Ergebnis=40)                  |
//+------------------------------------------------------------------+
int CBE_BE_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 die Handelsbedingungen bei jedem Tick
//--- idx=1 - in diesem Fall überprüft der EA die Handelsbedingungen nur an Nachrichtenbalken
  int idx   =StartIndex();
//--- Überprüfung der Bedingungen für das Öffnen einer Long-Position
//--- Bildung des Bullish Engulfing Musters und Signallinie<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))
     result=80;
//--- Überprüfung der Bedingungen für das Schließen der Short-Position
//--- Signallinienüberkreuzung der überkauften/überverkauften Niveaus (abwärts 20, aufwärts 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- Rückgabe des Ergebnisses
   return(result);
  }

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

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

  2. Die Long-Position muss geschlossen werden, wenn die Signallinie des Stochastic Indikators die 80 oder 20 Niveaus nach unten überschreitet.

//+------------------------------------------------------------------+
//| Überprüft die Bedingungen für den Eintritt und Austritt aus dem Markt                 |
//| 1) Markteintritt (Short-Position öffnen, Ergebnis=80)                 |
//| 2) Marktaustritt (Long-Position schließen, Ergebnis=40)                   |
//+------------------------------------------------------------------+
int CBE_BE_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 die Handelsbedingungen bei jedem Tick
//--- idx=1 - in diesem Fall überprüft der EA die Handelsbedingungen nur an Nachrichtenbalken
  int idx   =StartIndex();
//--- Überprüfung der Bedingungen für das Öffnen einer Short-Position
//--- Bildung des Bearish Engulfing Musters und Signallinie>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))
     result=80;
//--- Überprüfung der Bedingungen für das Schließen der Long-Position
//--- Signallinienüberkreuzung der überkauften/überverkauften Niveaus (abwärts 80, aufwärts 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- Rückgabe des Ergebnisses
   return(result);
  }


2.3. Erstellung eines Expert Advisors mit dem MQL5 Wizard

Die CBE_BE_Stoch Klasse ist nicht in den Standardbibliotheksklassen enthalten. Um sie zu verwenden, musst du die acbe_be_stoch.mqh Datei herunterladen (siehe Anhänge) und sie im client_terminal_data\MQL5\Include\Expert\Signal\MySignals speichern. Das Gleiche gilt für die candlepatterns.mqh Datei. Du kannst sie nach einem 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

Gib den Namen des Expert Advisors an:

Abbildung 5. Allgemeine Eigenschaften des Expert Advisors

Abbildung 5. Allgemeine Eigenschaften des Expert Advisors

Danach musst du die Module der verwendeten 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 für Handelssignale.

Hinzufügen des "Signale basierend auf Bullish Engulfing/Bearish Engulfing, bestätigt durch Stochastic" Moduls für 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" auswählen:

Abbildung 9. Trailing Eigenschaften des Expert Advisors

Abbildung 9. Trailing Eigenschaften des Expert Advisors

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

Abbildung 10. Geldmanagement Eigenschaften des Expert Advisors

Abbildung 10. Geldmanagement Eigenschaften des Expert Advisors

Durch Drücken der "Fertig"-Taste erhalten wir den Code des generierten Expert Advisors, der in Expert_ABE_BE_Stoch.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 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 die Festlegung von Schwellenwerten für das Öffnen und Schließen von Positionen.

Im Code der LongCondition() und ShortCondition() Methoden der Handelssignalklasse haben wir die festen Werte der Schwellenwerte festgelegt:

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

Der Expert Advisor, der vom MQL5 Wizard generiert wurde, öffnet und schließt Positionen mithilfe der "Stimmen" der Handelssignal-Module. Die Stimme des Hauptmoduls (als Container, das alle hinzugefügten Module enthält) wird ebenfalls verwendet, aber die Methoden LongCondition() und ShortCondition() des Hauptmoduls geben immer 0 zurück.

Die Ergebnisse der Stimmen des Hauptmoduls werden auch bei der "Stimmen"-Durchschnittsbildung verwendet. In unserem Fall haben wir: Hauptmodul + 1 Modul für Handelssignale, also müssen wir diesen Fakt 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 Eingabeparameter 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 des Backtestings

Lass uns das Backtesting des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5) betrachten.

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


Abbildung 11. Testergebnisse des Expert Advisors, basierend auf Bullish/Bearish Engulfing + Stochastic

Abbildung 11. Testergebnisse des Expert Advisors, basierend auf Bullish/Bearish Engulfing + Stochastic


Die besten Eingabeparameter können mithilfe des Strategy Testers des MetaTrader 5 Client-Terminals gefunden werden.

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


Liste
Kommentar 0