Long-Short EA für MetaTrader 5: Flexibles Trading mit CExpert

Mike 2014.07.31 20:40 18 0 0
Anhang

Der aktuelle Expert Advisor ermöglicht es dir, ausschließlich Long- oder Short-Positionen (oder beide) zu eröffnen, basierend auf einer Erweiterung der CExpert-Klasse.

Es werden zwei verschiedene Dateien bereitgestellt:

  • LongShortExpertModified.mqh: Diese Klasse erweitert die Standard-CExpert und modifiziert die CheckOpen() und CheckReverse() Methoden, um nur die gewünschten Aufträge zuzulassen;
  • LongShortExpertMACD.mq5: Dieser EA ist eine einfache Modifikation der eingebetteten ExpertMACD.mq5-Klasse und enthält den entwickelten modifizierten Expert, um nur den gewünschten Auftragstyp gemäß einem Eingabeparameter zuzulassen. Dies dient zur Veranschaulichung der Nutzung des Experts.

LongShortExpertModified

Diese Klasse ändert das Verhalten der Standard-CExpert-Klasse, sodass nur ein bestimmter Auftragstyp gemäß folgendem Enum erlaubt ist:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

Dieses Enum wird als Eingabeparameter für den endgültigen EA verwendet, um zu bestimmen, welche Auftragstypen erlaubt sind, und wird intern genutzt, um nur die gewünschten Aufträge zu eröffnen und Auftragsumkehrungen nur zu verarbeiten, wenn beide Positionstypen erlaubt sind (BOTH_POSITION Enum-Wert).

Um dies zu erreichen, werden die Methoden CheckOpen() und CheckReverse() umgeschrieben:

class CLongShortExpertModified : public CExpert
  {
protected:
   ENUM_AVAILABLE_POSITIONS m_positions;
public:
                     CLongShortExpertModified(void);
                    ~CLongShortExpertModified(void);
   virtual bool      CheckOpen(void);
   virtual bool      CheckReverse(void);
   void SetAvailablePositions(ENUM_AVAILABLE_POSITIONS newValue){m_positions=newValue;};
  };

CheckOpen() ist so modifiziert, dass es nur Long- oder Short-Positionen gemäß dem Wert von m_positions überprüft:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         //nur neue Long-Positionen überprüfen
      case SHORT_POSITION:
         return CheckOpenShort();        //nur neue Short-Positionen überprüfen
      default:
         return CExpert::CheckOpen();    //Standardverhalten
     }
  }

CheckReverse() wird modifiziert, um die Positionsumkehr nur zu überprüfen, wenn beide Positionstypen erlaubt sind:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    // keine Umkehrung erlaubt
      default:
         return CExpert::CheckReverse(); //Standardverhalten
     }
  }

LongShortExpertMACD

Diese Klasse bietet ein spezifisches Beispiel für die Nutzung der vorherigen Klasse, basierend auf dem standardmäßigen ExpertMACD EA, der in der MQL5-Verteilung enthalten ist.

Zunächst muss die konkrete Expert-Klasse eingebunden und der entsprechende Eingabeparameter hinzugefügt werden. Der externe Expert wird mit der Unterklasse verknüpft, anstelle des Standard-CExpert:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //Short / Long / beide Positionen erlaubt
//[...]
CLongShortExpertModified ExtExpert;  //spezifisch gestaltete CExpert-Unterklasse

Nach der Initialisierung des Experts muss der Parameter gemäß dem Eingabewert gesetzt werden:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- fehlgeschlagen
      printf(__FUNCTION__+": Fehler bei der Initialisierung des Experts");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // Spezifischer Parameter, der steuert, welche Positionen erlaubt sind
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

Es sind keine weiteren Änderungen erforderlich. Die folgende Abbildung zeigt die Konfigurationsparameter für den Expert:

Long/Short only general Expert Advisor

Liste
Kommentar 0