Der vorliegende Expert Advisor erlaubt es nur Long/Short-Aufträge (oder beide) auf Basis der CExpertKlasse zu eröffnen.
Es werden zwei verschiedene Dateien zur Verfügung gestellt:
LongShortExpertModified
Diese Klasse modifiziert das Verhalten der Standard CExpert Klasse, indem es nur Aufträge eines bestimmten Typs erlaubt - und zwar folgende laut enum:
enum ENUM_AVAILABLE_POSITIONS
{
LONG_POSITION,
SHORT_POSITION,
BOTH_POSITION
};
Diese Enumeration wird als Eingabeparameter für den endgültigen EA verwendet, um festzulegen, welche Art von Aufträgen erlaubt wird und wird intern verwendet, um nur die gewünschten Aufträge zu eröffnen und Auftragsumkehrungen nur dann zu verarbeiten, wenn beide Typen erlaubt sind (BOTH_POSITION enum Wert).
Um das zu erreichen, wurden die CheckOpen() und CheckReverse() Methoden 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() wurde modifiziert, sodass nur Long oder Short Positionen entsprechend dem m_positions Wert geprüft werden:
bool CLongShortExpertModified :: CheckOpen() { switch(m_positions) { case LONG_POSITION: return CheckOpenLong(); //prüfen nur neue Longpositionen case SHORT_POSITION: return CheckOpenShort(); //prüfe nur neue Shortpositionen default: return CExpert::CheckOpen(); //Standardverhalten } }
CheckReverse() wurde modifiziert um nur dann eine Positionsumkehr zu prüfen, wenn beide Positionstypen erlaubt sind:
bool CLongShortExpertModified::CheckReverse() { switch(m_positions) { case LONG_POSITION: case SHORT_POSITION: return false; // keine Umkehr erlaubt default: return CExpert::CheckReverse(); //Standardverhalten } }
LongShortExpertMACD
Diese Klasse stellt ein Beispiel für die Verwendung der vorherigen Klasse in einem spezifischen EA dar, basierend auf dem Standard ExpertMACD EA, der in der MQL5 Distribution enthalten ist.
Zuerst muss die konkrete Expert-Klasse eingebunden und der korrespondierende Eingabeparameter hinzugefügt werden. Außerdem wird der externe Expert mit der Subklasse statt dem Standard CExpert verknüpft:
#include <Expert\LongShortExpertModified.mqh> //[...] input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //short / long / beide Positionen erlaubt //[...] CLongShortExpertModified ExtExpert; //spezifisch entworfene CExpert Subklasse
Nach der Initialisierung des Expert muss der Parameter dem Eingabewert entsprechend gesetzt werden:
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- fehlgeschlagen printf(__FUNCTION__+": Fehler beim Initialisieren des Expert"); ExtExpert.Deinit(); return(-1); } // Specifischer Parameter, der steuert, welche Positionen erlaubt sind ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);
Es sind keine weiteren Änderungen notwendig. Die folgende Abbildung zeigt die Konfigurationsparameter für den Expert:

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/1896
Commentator
Der Commentator Indikator analysiert eine Gruppe von technischen Indikatoren und zeigt Informationen über den aktuellen Zustand des Marktes und Handelsempfehlungen an.
Mercado Aberto
Einfacher Indikator der anzeigt, wann der Markt geöffnet ist.
ColorDM_361
Digitales Momentum in Form von kolorierten Buchstaben.
i-PassLevCCI_v.1.3
Eine Datenstruktur mit einem Signalindikator gezeichnet auf Basis des Commodity Chanel Index Oszillator.