EA de Long Short: Optimiza tu Trading en MetaTrader 5

Mike 2014.07.31 20:40 15 0 0
Archivos adjuntos

El actual Asesor Experto (EA) te permite seleccionar la apertura de posiciones solo largas, cortas o ambas, basándose en una extensión de la clase CExpert.

Se proporcionan dos archivos diferentes:

  • LongShortExpertModified.mqh: Esta clase extiende la clase CExpert por defecto, modificando los métodos CheckOpen() y CheckReverse() para permitir solo las órdenes que desees abrir;
  • LongShortExpertMACD.mq5: Este EA es una modificación simple sobre la clase ExpertMACD.mq5, incluyendo el experto modificado para permitir solo el tipo de orden deseado según un parámetro de entrada, y se proporciona para aclarar el uso del experto.

LongShortExpertModified

Esta clase modifica el comportamiento de la clase CExpert, permitiendo solo un tipo específico de orden según el siguiente enum:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

Este enum se utilizará como parámetro de entrada para el EA final, determinando qué tipo de órdenes se permitirán, y se usa internamente para abrir solo las órdenes deseadas y procesar las inversiones de órdenes solo si se permiten ambos tipos de posición (valor enum BOTH_POSITION).

Para ello, se reescriben los métodos CheckOpen() y CheckReverse():

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() se modifica para verificar solo posiciones largas o cortas según el valor de m_positions:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         //verificar solo nuevas posiciones largas
      case SHORT_POSITION:
         return CheckOpenShort();        //verificar solo nuevas posiciones cortas
      default:
         return CExpert::CheckOpen();    //comportamiento por defecto
     }
  }

CheckReverse() se modifica para comprobar la reversión de la posición solo si se permiten ambos tipos de posición:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false                    // no se permite la reversión
      default:
         return CExpert::CheckReverse(); //comportamiento por defecto
     }
  }

LongShortExpertMACD

Esta clase proporciona un ejemplo específico de uso del EA anterior, basado en el EA ExpertMACD por defecto incluido en la distribución de MQL5.

Primero, se debe incluir la clase Expert concreta y agregar el parámetro de entrada correspondiente. Además, el experto externo se asocia con la subclase, en lugar de con el CExpert por defecto:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //se permiten posiciones cortas/largas/ambas
//[...]
CLongShortExpertModified ExtExpert;  //subclase CExpert diseñada específicamente

Después de inicializar el experto, el parámetro debe establecerse según el valor de entrada:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- error
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // Parámetro específico que controla qué posiciones están permitidas
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

No se requieren cambios adicionales. La siguiente figura muestra los parámetros de configuración para el experto:

Asesor Experto Long/Short

Lista
Comentarios 0