Startseite Systemhandel Beitrag

MQL5 Wizard: Handelssignale mit Hammer/Hanging Man und RSI für MetaTrader 5

Anhang
317.zip (6.47 KB, Herunterladen 0 mal)

Der MQL5 Wizard ist ein praktisches Tool, das die Erstellung von fertigen Expert Advisors (EAs) ermöglicht. Diese basieren auf den Standardbibliotheksklassen, die mit dem Client-Terminal geliefert werden (siehe Erstellung von fertigen Expert Advisors im MQL5 Wizard für weitere Details). Damit kannst du deine Handelsideen schnell überprüfen, indem du deine eigene Handelssignalklasse erstellst. Die Struktur dieser Klasse sowie ein Beispiel findest du im Artikel MQL5 Wizard: Erstellung eines Moduls für Handelssignale.

Die grundlegende Idee ist einfach: Die Klasse der Handelssignale leitet sich von CExpertSignal ab. Du musst die virtuellen Methoden LongCondition() und ShortCondition() mit deinen eigenen Methoden überschreiben.

Ein interessantes Buch, das ich empfehlen kann, ist "Strategien der besten Trader" (auf Russisch), in dem viele Handelsstrategien behandelt werden. Unser Fokus liegt hier auf Umkehrkerzenmustern, die durch Stochastik, CCI, MFI und RSI Indikatoren bestätigt werden.

Am besten ist es, eine separate Klasse abzuleiten, die von CExpertSignal für die Überprüfung der Bildung von Kerzenmustern erstellt wird. Für die Bestätigung der Handelssignale, die durch Kerzenmuster generiert werden, genügt es, eine Klasse abzuleiten, die von CCandlePattern abgeleitet ist, und die notwendigen Funktionen (z. B. Bestätigung durch Indikatoren) hinzuzufügen.

Hier betrachten wir die Signale, die auf dem "Hammer/Hanging Man" Umkehrkerzenmuster basieren, das durch den CCI Indikator bestätigt wird. Das Modul für Handelssignale basiert auf der CCandlePattern Klasse und ist ein einfaches Beispiel für die Erstellung von Handelssignalen mit Kerzenmustern.

1. "Hammer" und "Hanging Man" Umkehrkerzenmuster

1.1. Hammer

Der "Hammer" ist eine Kerze mit einem kleinen Körper und einem langen unteren Schatten, die nach einem Abwärtstrend entsteht. Das "Hammer" Muster zeigt das Ende eines bärischen Trends an.

Die Farbe des Kerzenkörpers spielt dabei keine Rolle, ein bullischer Hammer deutet jedoch auf ein höheres bullisches Potenzial hin. Der Körper des "Hammer" Musters entsteht oft in der Nähe des Minimums der vorherigen Kerze. Ein längerer unterer Schatten und ein kürzerer oberer Schatten erhöhen das Potenzial des Umkehrmusters.

Fig. 1.

Fig. 1. "Hammer" Kerzenmuster

Die Erkennung des "Hammer" Musters wird in der CheckPatternHammer() Methode der CCandlePattern Klasse implementiert:

//+------------------------------------------------------------------+
//| Überprüft die Bildung des "Hammer" Kerzenmusters            |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2))
                                  && // Abwärtstrend
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // Körper im oberen Drittel
      (Close(1)<Close(2)) && (Open(1)<Open(2)))
      return(true);
//---
   return(false);
  }

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


1.2. Hanging Man

Der "Hanging Man" ist eine Kerze mit einem kleinen Körper und einem langen unteren Schatten, die nach einem Aufwärtstrend entsteht. Das "Hanging Man" Muster zeigt das Ende eines bullischen Trends an.

Die Farbe des Kerzenkörpers spielt dabei keine Rolle, eine bärische Kerze deutet jedoch auf ein höheres bärisches Potenzial hin. Der Körper des "Hanging Man" Musters entsteht oft in der Nähe des Maximums der vorherigen Kerze. Ein längerer unterer Schatten und ein kürzerer oberer Schatten erhöhen das Potenzial des Umkehrmusters.

Fig. 2.

Fig. 2. "Hanging Man" Kerzenmuster

Die Erkennung des "Hanging Man" Musters wird in der CheckPatternHangingMan() Methode der CCandlePattern Klasse implementiert:

//+------------------------------------------------------------------+
//| Überprüft die Bildung des "Hanging Man" Kerzenmusters       |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging Man
   if((MidPoint(1)>CloseAvg(2))
                                  && // Aufwärtstrend
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // Körper im oberen Drittel
      (Close(1)>Close(2)) && (Open(1)>Open(2)))
      return(true);
//---
   return(false);
  }

Die CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) Methode der CCandlePattern Klasse wird verwendet, um die Bildung des "Hanging Man" Kerzenmusters zu überprüfen.



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

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

Das Schließen einer geöffneten Position hängt von den Werten des RSI ab. Dies kann in zwei Fällen geschehen:

  1. Wenn der RSI das gegenüberliegende kritische Niveau erreicht hat (70 für Long-Position und 30 für Short-Position)
  2. Wenn das Umkehrsignal nicht bestätigt wird (wenn der RSI folgende Werte erreicht: 30 für Long-Position und 70 für Short-Position)

Fig. 3.

Fig. 3. "Harami" Muster, bestätigt durch den RSI Indikator


  • int CH_HM_RSI::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 CH_HM_RSI::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 "Hammer" Musters muss durch den RSI Indikator bestätigt werden: RSI(1)<40 (der Wert des RSI der letzten abgeschlossenen Kerze muss kleiner als 40 sein).

  2. Die Short-Position muss geschlossen werden, wenn der RSI Indikator die kritischen Werte 70 oder 30 nach oben überschreitet.

//+------------------------------------------------------------------+
//| Überprüft die Bedingungen für den Markteintritt und -austritt     |
//| 1) Markteintritt (Long-Position eröffnen, Ergebnis=80)           |
//| 2) Marktaustritt (Short-Position schließen, Ergebnis=40)         |
//+------------------------------------------------------------------+
int CH_HM_RSI::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 Long-Position
//--- Bildung des Hammer-Musters und RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (RSI(1)<40))
     result=80;
//--- Überprüfung der Bedingungen zum Schließen der Short-Position
//--- Signal-Linien-Crossover der überkauften/überverkauften Niveaus (aufwärts 30, aufwärts 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- Ergebnis zurückgeben
   return(result);
  }

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

  1. Die Bildung des "Hanging Man" Musters muss durch den RSI Indikator bestätigt werden: RSI(1)>60 (der Wert des RSI Indikators der letzten abgeschlossenen Kerze muss größer als 60 sein).

  2. Die Long-Position muss geschlossen werden, wenn der RSI Indikator die kritischen Werte 70 oder 30 nach unten überschreitet.

//+------------------------------------------------------------------+
//| Überprüft die Bedingungen für den Markteintritt und -austritt     |
//| 1) Markteintritt (Short-Position eröffnen, Ergebnis=80)          |
//| 2) Marktaustritt (Long-Position schließen, Ergebnis=40)          |
//+------------------------------------------------------------------+
int CH_HM_RSI::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 Short-Position
//--- Bildung des Hanging Man Musters und RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (RSI(1)>60))
     result=80;
//--- Überprüfung der Bedingungen zum Schließen der Long-Position
//--- Signal-Linien-Crossover der überkauften/überverkauften Niveaus (abwärts 70, abwärts 30)
   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- Ergebnis zurückgeben
   return(result);
  }


2.3. Erstellung eines Expert Advisors mit MQL5 Wizard

Die CH_HM_RSI Klasse ist nicht in den Standardbibliotheksklassen enthalten. Um sie zu verwenden, musst du die ach_hm_rsi.mqh Datei herunterladen (siehe Anhang) und sie im client_terminal_data\MQL5\Include\Expert\Signal\MySignals speichern. Dasselbe gilt für die candlepatterns.mqh Datei. Du kannst sie nach dem Neustart des MetaEditors im MQL5 Wizard verwenden.

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

Fig. 4. Erstellung eines Expert Advisors mit MQL5 Wizard

Fig. 4. Erstellung eines Expert Advisors mit MQL5 Wizard

Lass uns den Namen des Expert Advisors angeben:

Fig. 5. Allgemeine Eigenschaften des Expert Advisors

Fig. 5. Allgemeine Eigenschaften des Expert Advisors

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

Fig. 6. Signal Eigenschaften des Expert Advisors

Fig. 6. Signal Eigenschaften des Expert Advisors

In unserem Fall verwenden wir nur ein Modul für Handelssignale.

Hinzufügen des "Signale basierend auf Hammer/Hanging Man, bestätigt durch RSI" Moduls für Handelssignale:

Fig. 7. Signal Eigenschaften des Expert Advisors

Fig. 7. Signal Eigenschaften des Expert Advisors

Modul für Handelssignale hinzugefügt:

Fig. 8. Signal Eigenschaften des Expert Advisors

Fig. 8. Signal Eigenschaften des Expert Advisors

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

Fig. 9. Trailing Eigenschaften des Expert Advisors

Fig. 9. Trailing Eigenschaften des Expert Advisors

Was die Geldverwaltungs-Eigenschaften betrifft, verwenden wir "Handel mit fester Handelsgröße":

Fig. 10. Geldverwaltungs-Eigenschaften des Expert Advisors

Fig. 10. Geldverwaltungs-Eigenschaften des Expert Advisors

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

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 für den Abschluss eines Handels
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 für den Abschluss eines Handels
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 festzulegen.

Im Code der LongCondition() und ShortCondition() Methoden der Handelssignalklasse haben wir festgelegte Schwellenwerte angegeben:

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

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

Die Ergebnisse der Stimmen des Hauptmoduls werden auch bei der "Stimmen"-Durchschnittsbildung berücksichtigt. In unserem Fall haben wir: Hauptmodul + 1 Modul für Handelssignale, sodass wir dies bei der Festlegung der Schwellenwerte berücksichtigen müssen. Aufgrund dieses Faktors müssen 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, das 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 auf historischen Daten (EURUSD H1, Testzeitraum: 2010.01.01-2011.03.03, PeriodRSI=33, MA_period=2) an.

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

Fig. 11. Testergebnisse des Expert Advisors, basierend auf Hammer/Hanging Man + RSI

Fig. 11. Testergebnisse des Expert Advisors, basierend auf Hammer/Hanging Man + RSI


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

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


Verwandte Beiträge

Kommentar (0)