EA Long/Short : Optimisez vos Trades avec CExpert sur MetaTrader 5

Mike 2014.07.31 20:40 17 0 0
Pièce jointe

Découvrez notre nouvel Expert Advisor (EA) qui vous permet d'ouvrir uniquement des positions longues ou courtes (ou les deux) en se basant sur l'extension de la classe CExpert.

Deux fichiers distincts sont fournis :

  • LongShortExpertModified.mqh : Cette classe étend la classe CExpert par défaut, en modifiant les méthodes CheckOpen() et CheckReverse() pour n'ouvrir que les ordres souhaités.
  • LongShortExpertMACD.mq5 : Cet EA est une simple modification de la classe ExpertMACD.mq5 intégrée, incluant l'expert modifié développé pour ne permettre que le type d'ordre désiré selon un paramètre d'entrée, afin de clarifier l'utilisation de l'expert.

LongShortExpertModified

Cette classe modifie le comportement de la classe CExpert par défaut, permettant uniquement un certain type d'ordre selon l'énumération suivante :

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

Cette énumération sera utilisée comme paramètre d'entrée pour l'EA final requis afin de déterminer quel type d'ordres sera autorisé. Elle est utilisée en interne pour n'ouvrir que les ordres désirés et pour traiter les renversements d'ordres uniquement si les deux types de position sont autorisés (valeur ENUM_AVAILABLE_POSITIONS : BOTH_POSITION).

Pour ce faire, les méthodes CheckOpen() et CheckReverse() sont réécrites :

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() est modifié pour vérifier uniquement les positions longues ou courtes selon la valeur de m_positions :

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         // vérifier uniquement les nouvelles positions longues
      case SHORT_POSITION:
         return CheckOpenShort();        // vérifier uniquement les nouvelles positions courtes
      default:
         return CExpert::CheckOpen();    // comportement par défaut
     }
  }

CheckReverse() est modifié pour vérifier le renversement de position uniquement si les deux types de position sont autorisés :

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    // aucun renversement n'est autorisé
      default:
         return CExpert::CheckReverse(); // comportement par défaut
     }
  }

LongShortExpertMACD

Cette classe fournit un exemple spécifique d'EA basé sur l'utilisation de la classe précédente, s'appuyant sur l'EA ExpertMACD par défaut inclus dans la distribution MQL5.

Tout d'abord, la classe Expert concrète doit être incluse, et le paramètre d'entrée correspondant ajouté. De plus, l'expert externe est associé à la sous-classe, au lieu de la CExpert par défaut :

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; // positions courtes / longues / les deux autorisées
//[...]
CLongShortExpertModified ExtExpert;  // sous-classe CExpert spécifiquement conçue

Après avoir initialisé l'expert, le paramètre doit être défini selon la valeur d'entrée :

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- échec
      printf(__FUNCTION__+": erreur lors de l'initialisation de l'expert");
      ExtExpert.Deinit();
      return(-1);
     }
     
    // Paramètre spécifique contrôlant les positions autorisées
    ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

Aucune modification supplémentaire n'est requise. La figure suivante montre les paramètres de configuration pour l'expert :

Expert Advisor général Long/Short

Liste
Commentaire 0