Optimierung des Handels mit dem Alligator-Indikator: So nutzen Sie den MQL5 Wizard

Mike 2011.01.15 03:35 20 0 0
Anhang

MQL5 Wizard ermöglicht die automatische Erstellung von Handelsrobotern (auch bekannt als Expert Advisors oder kurz EA). Dies erleichtert den Einstieg in die automatisierte Handelswelt erheblich.

Lassen Sie uns die Handelsignale betrachten, die auf dem Alligator-Indikator basieren, welcher von Bill Williams in seinem Buch "Trading Chaos" vorgestellt wurde. Die Strategie trägt den Namen „Signale basierend auf dem Alligator“ und wird automatisch im MQL5 Wizard erstellt.

Diese Strategie basiert auf drei gleitenden Durchschnitten (Lippen, Zähne und Kiefer) und verwendet Oszillatoren, die auf den Differenzen zwischen diesen Linien basieren. Die Handelssignale werden generiert, wenn die Alligator-Linien sich kreuzen und die Trendrichtung durch die Reihenfolge dieser Linien bestimmt wird. Bei einem Aufwärtstrend ist die Lippenlinie (mit der kürzesten Periode) die höchste, gefolgt von der Zähne-Linie, während die Kieferlinie die niedrigste ist. Im umgekehrten Fall gilt dies für einen Abwärtstrend.

Die Handelssignale sind:

  • Öffnen einer Long-Position: Kreuzung der Alligator-Linien und Zunahme des Abstands zwischen ihnen im Falle eines Aufwärtstrends;
  • Schließen einer Long-Position: Aufwärtskreuzung der Lippenlinie mit der Kieferlinie;
  • Öffnen einer Short-Position: Kreuzung der Alligator-Linien und Zunahme des Abstands zwischen ihnen im Falle eines Abwärtstrends;
  • Schließen einer Short-Position: Abwärtskreuzung der Lippenlinie mit der Kieferlinie;

Diese Strategie wird in der CSignalAlligator Klasse implementiert.

Handelsignale basierend auf dem Alligator-Indikator

Abbildung 1. Handelsignale basierend auf dem Alligator-Indikator


Handelsignale

Die Handelsstrategie wird in der Klasse CSignalAlligator implementiert und beinhaltet einige geschützte Methoden, um den Zugriff auf die Indikatorwerte zu vereinfachen:

double   Jaw(int ind)             // gibt den Wert der Kieferlinie des Balkens zurück
double   Teeth(int ind)           // gibt den Wert der Zähne-Linie des Balkens zurück
double   Lips(int ind)            // gibt den Wert der Lippenlinie des Balkens zurück
double   LipsTeethDiff(int ind)   // gibt die Differenz zwischen Lippen- und Zähne-Linien zurück
double   TeethJawDiff(int ind)    // gibt die Differenz zwischen Zähne- und Kieferlinien zurück
double   LipsJawDiff(int ind)    // gibt die Differenz zwischen Lippen- und Kieferlinien zurück
bool     CheckCross();           // prüft die Kreuzung der Alligator-Linien


1. Long-Position eröffnen

Die Überprüfung der Handelsbedingungen weist einige Besonderheiten auf, die durch die Verschiebung der Lippen-, Zähne- und Kieferlinien verursacht werden.

Die Bedingungen zum Öffnen einer Long-Position sind:

  • Die CheckCross-Methode wird verwendet, um die Kreuzung und die weitere Zunahme der Differenz zwischen den Linien zu bestimmen;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) und LipsTeethDiff(-1)>=LipsTeethDiff(0); Überprüfung auf Zunahme der Differenz zwischen den Lippen- und Zähne-Linien;
  • LipsTeethDiff(0)>=0.0; die Lippenlinie ist höher als die Zähne-Linie;
  • TeethJawDiff(-2) >=TeethJawDiff(-1) und TeethJawDiff(-1) >=TeethJawDiff(0); Überprüfung auf Zunahme der Differenz zwischen den Zähne- und Kieferlinien;
  • TeethJawDiff(0) >=0.0; die Zähne-Linie ist höher als die Kieferlinie.
//+------------------------------------------------------------------+
//| Überprüft die Bedingungen zum Öffnen einer Long-Position (Kauf)   |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 &&
      TeethJawDiff(-2) >=TeethJawDiff(-1)  && TeethJawDiff(-1) >=TeethJawDiff(0)  && TeethJawDiff(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


2. Long-Position schließen

Die Bedingungen zum Schließen einer Long-Position (beachten Sie die Verschiebung der Linien):

  • LipsTeethDiff(-1)<0; die Lippenlinie des nächsten Balkens (aufgrund der Verschiebung) ist niedriger als die Zähne-Linie;
  • LipsTeethDiff(0)>=0; die Lippenlinie des aktuellen Balkens ist höher/gleich der Zähne-Linie;
  • LipsTeethDiff(1)>0; die Lippenlinie des vorherigen (abgeschlossenen) Balkens ist höher als die Zähne-Linie.
//+------------------------------------------------------------------+

//| Überprüft die Bedingungen zum Schließen einer Long-Position       |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0);
  }


3. Short-Position eröffnen

Die Bedingungen zum Öffnen einer Short-Position sind:

  • Die CheckCross-Methode wird verwendet, um die Kreuzung und die weitere Zunahme der Differenz zwischen den Linien zu bestimmen;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1) und LipsTeethDiff(-1)<=LipsTeethDiff(0); Überprüfung auf Zunahme der Differenz zwischen den Lippen- und Zähne-Linien;
  • LipsTeethDiff(0)<=0.0; die Lippenlinie des aktuellen Balkens ist niedriger als die Zähne-Linie;
  • TeethJawDiff(-2)<=TeethJawDiff(-1) und TeethJawDiff(-1)<=TeethJawDiff(0); Überprüfung auf Zunahme der Differenz zwischen den Zähne- und Kieferlinien;
  • TeethJawDiff(0) <=0.0; die Zähne-Linie des aktuellen Balkens ist niedriger als die Kieferlinie;
//+------------------------------------------------------------------+
//| Überprüft die Bedingungen zum Öffnen einer Short-Position (Verkauf) |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 &&
      TeethJawDiff(-2) <=TeethJawDiff(-1)  && TeethJawDiff(-1) <=TeethJawDiff(0)  && TeethJawDiff(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


4. Short-Position schließen

Die Bedingungen zum Schließen einer Short-Position sind:

  • LipsTeethDiff(-1)>0; die Lippenlinie des nächsten Balkens (aufgrund der Verschiebung) ist höher als die Zähne-Linie;
  • LipsTeethDiff(0)<=0; die Lippenlinie des aktuellen Balkens ist niedriger/gleich der Zähne-Linie;
  • LipsTeethDiff(1)<0; die Lippenlinie des vorherigen (abgeschlossenen) Balkens ist niedriger als die Zähne-Linie.
//+------------------------------------------------------------------+

//| Überprüft die Bedingungen zum Schließen einer Short-Position      |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

Erstellung eines Expert Advisors mit MQL5 Wizard

Um einen Handelsroboter basierend auf dieser Strategie zu erstellen, wählen Sie die Signalparameter als „Signale basierend auf dem Alligator“ in der Option „Bereitgestellte Expert Advisors erstellen“ im MQL5 Wizard aus:

Wählen Sie 'Signale basierend auf dem Alligator' im MQL5 Wizard

Abbildung 2. Wählen Sie 'Signale basierend auf dem Alligator' im MQL5 Wizard

Anschließend müssen Sie den benötigten Trailing-Stop-Algorithmus und das Geld- und Risikomanagement-System angeben. Der Code des Expert Advisors wird automatisch erstellt, und Sie können ihn im Strategy Tester des MetaTrader 5-Clientterminals kompilieren und testen.


Testergebnisse

Betrachten wir das Backtesting des Expert Advisors auf historischen Daten (EURUSD H1, Testzeitraum: 01.01.2010 - 05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).

Bei der Erstellung des Expert Advisors haben wir ein festes Volumen verwendet (Trading Fixed Lot, 0.1), und der Trailing-Stop-Algorithmus wurde nicht verwendet (Trailing nicht verwendet).

Testergebnisse des Expert Advisors mit Handelssignalen basierend auf dem Alligator-Indikator

Abbildung 3. Testergebnisse des Expert Advisors mit Handelssignalen basierend auf dem Alligator-Indikator


Der Gewinn kann gesteigert werden, wenn Sie die Handelsfilterung nutzen und die Marktmerkmale je nach Zeit berücksichtigen. Die CSignalITF-Klasse ermöglicht es Ihnen, den intraday Zeitfilter hinzuzufügen. Die besten Handelszeiten können mit dem Strategy Tester des MetaTrader 5-Clientterminals gefunden werden. Ein Beispiel finden Sie in MQL5 Wizard - Handelssignale basierend auf der Kreuzung zweier EMA mit intraday Zeitfilter.


Anhänge: Die SignalAlligator.mqh mit der CSignalAlligator-Klasse muss im Terminaldatenordner unter MQL5\Include\Expert\Signal abgelegt werden.

Die expert_alligator.mq5 enthält den Code des Expert Advisors, der mit dem MQL5 Wizard erstellt wurde.

Liste
Kommentar 0