Long Short EA voor MetaTrader 5: Specifieke Strategieën en Instellingen

Mike 2014.07.31 20:40 13 0 0
Bijlage

Met de huidige Expert Advisor kun je kiezen om alleen long- of shortposities (of beide) te openen, gebaseerd op een uitbreiding van de CExpert klasse.

Er worden twee verschillende bestanden geleverd:

  • LongShortExpertModified.mqh: Deze klasse breidt de standaard CExpert uit door de methoden CheckOpen() en CheckReverse() aan te passen, zodat alleen de gewenste orders kunnen worden geopend;
  • LongShortExpertMACD.mq5: Deze EA is een eenvoudige aanpassing van de ingebouwde ExpertMACD.mq5 klasse, met de ontwikkelde aangepaste expert die alleen de gewenste ordertypes volgens een inputparameter toestaat. Dit bestand is toegevoegd ter verduidelijking van het gebruik van de expert.

LongShortExpertModified

Deze klasse past het gedrag van de standaard CExpert klasse aan, zodat alleen een bepaald type order kan worden geopend op basis van de volgende enum:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

Deze enum wordt gebruikt als een inputparameter voor de uiteindelijke EA om te bepalen welke typen orders zijn toegestaan. Intern wordt deze gebruikt om alleen de gewenste orders te openen en om orderomkeringen alleen te verwerken als beide positie types zijn toegestaan (BOTH_POSITION enum waarde).

Om dit te bereiken, zijn de methoden CheckOpen() en CheckReverse() herschreven:

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() is aangepast om alleen long- of shortposities te controleren op basis van de waarde van m_positions:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         // controleer alleen nieuwe longposities
      case SHORT_POSITION:
         return CheckOpenShort();        // controleer alleen nieuwe shortposities
      default:
         return CExpert::CheckOpen();    // standaardgedrag
     }
  }

CheckReverse() is aangepast om positieomkering alleen te controleren als beide positie types zijn toegestaan:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    // geen omkering is toegestaan
      default:
         return CExpert::CheckReverse(); // standaardgedrag
     }
  }

LongShortExpertMACD

Deze klasse biedt een specifiek EA-voorbeeld van het gebruik van de vorige klasse, gebaseerd op de standaard ExpertMACD EA die is opgenomen in de MQL5 distributie.

Allereerst moet de concrete Expertklasse worden opgenomen en de bijbehorende inputparameter worden toegevoegd. De externe expert wordt ook gekoppeld aan de subclass, in plaats van de standaard CExpert:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; // short / long / beide posities toegestaan
//[...]
CLongShortExpertModified ExtExpert;  // specifiek ontworpen CExpert Subclass

Na het initialiseren van de expert, moet de parameter worden ingesteld op basis van de inputwaarde:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- mislukt
      printf(__FUNCTION__+": fout bij het initialiseren van de expert");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // Specifieke parameter die controleert welke posities zijn toegestaan
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

Er zijn geen aanvullende wijzigingen nodig. De onderstaande afbeelding toont de configuratieparameters voor de expert:

Long/Short only general Expert Advisor

Lijst
Reactie 0