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 :

Commentaire 0