EA Long Short: Aprenda a Utilizar com CExpert no MetaTrader 5

Mike 2014.07.31 20:40 15 0 0
Anexo

Recentemente, um novo Expert Advisor (EA) foi lançado, permitindo que você escolha a abertura de posições apenas longas, curtas ou ambas, baseado na extensão da classe CExpert.

Dois arquivos diferentes estão disponíveis para você:

  • LongShortExpertModified.mqh: Esta classe amplia a classe padrão CExpert, modificando os métodos CheckOpen() e CheckReverse() para permitir apenas as ordens desejadas;
  • LongShortExpertMACD.mq5: Este EA é uma modificação simples da classe ExpertMACD.mq5, incluindo o expert modificado para permitir apenas o tipo de ordem desejado de acordo com um parâmetro de entrada, facilitando sua utilização.

LongShortExpertModified

Esta classe altera o comportamento da classe padrão CExpert, permitindo apenas um certo tipo de ordem de acordo com o seguinte enum:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

Esse enum será utilizado como parâmetro de entrada para o EA final, determinando quais tipos de ordens serão permitidos. Ele é usado internamente para abrir apenas as ordens desejadas e processar reversões de ordens somente se ambos os tipos de posição forem permitidos (valor do enum BOTH_POSITION).

Para isso, os métodos CheckOpen() e CheckReverse() foram reescritos:

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;};
  };

O método CheckOpen() foi alterado para verificar apenas posições longas ou curtas de acordo com o valor de m_positions:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         // verifica apenas novas posições longas
      case SHORT_POSITION:
         return CheckOpenShort();        // verifica apenas novas posições curtas
      default:
         return CExpert::CheckOpen();    // comportamento padrão
     }
  }

O método CheckReverse() foi modificado para checar a reversão de posição apenas se ambos os tipos de posição forem permitidos:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    // reversão não é permitida
      default:
         return CExpert::CheckReverse(); // comportamento padrão
     }
  }

LongShortExpertMACD

Esta classe fornece um exemplo específico de uso do EA anterior, baseado no EA padrão ExpertMACD incluído na distribuição do MQL5.

Primeiramente, a classe Expert concreta deve ser incluída, e o parâmetro de entrada correspondente adicionado. Além disso, o expert externo é associado à subclasse, em vez da CExpert padrão:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; // posições curtas / longas / ambas permitidas
//[...]
CLongShortExpertModified ExtExpert;  // Subclasse CExpert projetada especificamente

Após inicializar o expert, o parâmetro deve ser definido de acordo com o valor de entrada:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- falha
      printf(__FUNCTION__+": erro ao inicializar o expert");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // Parâmetro específico controlando quais posições são permitidas
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

Não são necessárias alterações adicionais. A figura abaixo mostra os parâmetros de configuração para o expert:

Long/Short only general Expert Advisor

Lista
Comentário 0