Ajuda no Erro na montagem de um Código.

 

Olá a todos,

Gostaria de compartilhar uma experiência recente com vocês sobre um erro que encontrei em meu código no MQL5.

Recentemente, estava trabalhando em um novo robô de negociação que utilizava mídias móveis como indicadores. Mais não conseguir prosseguir com o teste pois o código apresentou falha em compilar.

Embora seja um erro simples, eu gostaria de ressaltar a importância de verificar o código com cuidado para evitar esses tipos de erros. O MQL5 é uma linguagem poderosa, mas qualquer pequeno erro pode ter um grande impacto no desempenho do robô.

Por isso, sempre verifiquem cuidadosamente o código antes de colocá-lo em operação. Compartilhe essa experiência na esperança de ajudar outros desenvolvedores a evitar esses erros e melhorar o desempenho de seus robôs de negociação.

Solicito o apoio de todos em ajuda a resolver esse código simples, mais que até o momento eu não conseguir finalizar.

Obrigado por ler e bons negócios!

Segue o código:

//+------------------------------------------------------------------+

//|                                                Moving Average EA |

//|                      Baseado no código disponível em:             |

//|                      https://www.mql5.com/en/code/14640           |

//+------------------------------------------------------------------+


// Inclui bibliotecas padrão do MQL5

#include <trade\trade.mqh>

#include <Arrays\ArrayObj.mqh>


// Variáveis globais

CTrade trade;                 // Manipulador da negociação

int stoploss;                 // Stop Loss inicial

int stoploss_positivo;        // Stop Loss ajustado para breakeven

int MagicNumber = 20210330;   // Número mágico para as ordens

double lot = 0.1;             // Tamanho da posição

int fast_MA = 5;              // Período da média móvel rápida

int slow_MA = 10;             // Período da média móvel lenta


// Vetores de dados para as médias móveis

double ma_fast[];

double ma_slow[];


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

{

   //--- Inicializa a série temporal para os vetores

   ArraySetAsSeries(ma_fast, true);

   ArraySetAsSeries(ma_slow, true);


   //--- Define as médias móveis a serem utilizadas

   int fast_MA_handle = iMA(_Symbol, _Period, fast_MA, 0, MODE_SMA, PRICE_CLOSE);

   int slow_MA_handle = iMA(_Symbol, _Period, slow_MA, 0, MODE_SMA, PRICE_CLOSE);


   //--- Retorna um sinal de sucesso para a inicialização do expert

   return(INIT_SUCCEEDED);

}


//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

{  

   // Se o expert for chamado no início de uma nova barra

   if(isNewBar())

   {

      // Copia os valores das médias móveis para os vetores

      int copy_fast_MA = CopyBuffer(fast_MA_handle, 0, 0, 3, ma_fast);

      int copy_slow_MA = CopyBuffer(slow_MA_handle, 0, 0, 3, ma_slow);

    


      // Se os vetores estiverem preenchidos

     if(copy_fast_MA == 3 && copy_slow_MA == 3)

  {

     // Sinal de compra quando a média móvel rápida cruza acima da média móvel lenta

     bool buy_signal = ma_fast[1] < ma_slow[1] && ma_fast[2] > ma_slow[2];


     // Sinal de venda quando a média móvel rápida cruza abaixo da média móvel lenta

     bool sell_signal = ma_fast[1] > ma_slow[1] && ma_fast[2] < ma_slow[2];

   


     // Verifica se já há uma posição aberta

     if(PositionSelect(_Symbol))

     {

        // Se for uma posição de compra

        if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

        {

           // Ajusta o stop loss para breakeven

           if(_Bid - PositionGetDouble(POSITION_PRICE_OPEN) > stoploss_positivo)

              trade.PositionModify(PositionGetInteger(POSITION_TICK), _Symbol, 0, _Bid - stoploss_positivo * _Point, 0, 0);

        }

  

        // Se for uma posição de venda

        else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

        {

           // Ajusta o stop loss para breakeven

           if(PositionGetDouble(POSITION_PRICE_OPEN) - _Ask > stoploss_positivo)

              trade.PositionModify(PositionGetInteger(POSITION_TICK), _Symbol, 0, PositionGetDouble(POSITION_PRICE_OPEN) - stoploss_positivo * _Point, 0, 0);

        }

     }

 

     // Se não houver posição aberta

     else

     {

        // Se houver sinal de compra

        if(buy_signal)

        {

           // Entra em posição de compra

           trade.Buy(lotSize, _Symbol, 0, 0, 0, "Entrada de Compra");

        }

        // Se houver sinal de venda

        else if(sell_signal)

        {

           // Entra em posição de venda

           trade.Sell(lotSize, _Symbol, 0, 0, 0, "Entrada de Venda");

       }

     }

  }


    

    

 
elielson Coelho:

Olá a todos,

Gostaria de compartilhar uma experiência recente com vocês sobre um erro que encontrei em meu código no MQL5.

Recentemente, estava trabalhando em um novo robô de negociação que utilizava mídias móveis como indicadores. Mais não conseguir prosseguir com o teste pois o código apresentou falha em compilar.

Embora seja um erro simples, eu gostaria de ressaltar a importância de verificar o código com cuidado para evitar esses tipos de erros. O MQL5 é uma linguagem poderosa, mas qualquer pequeno erro pode ter um grande impacto no desempenho do robô.

Por isso, sempre verifiquem cuidadosamente o código antes de colocá-lo em operação. Compartilhe essa experiência na esperança de ajudar outros desenvolvedores a evitar esses erros e melhorar o desempenho de seus robôs de negociação.

Solicito o apoio de todos em ajuda a resolver esse código simples, mais que até o momento eu não conseguir finalizar.

Obrigado por ler e bons negócios!

Segue o código:

//+------------------------------------------------------------------+

//|                                                Moving Average EA |

//|                      Baseado no código disponível em:             |

//|                      https://www.mql5.com/en/code/14640&nbsp;          |

//+------------------------------------------------------------------+


// Inclui bibliotecas padrão do MQL5

#include <trade\trade.mqh>

#include <Arrays\ArrayObj.mqh>


// Variáveis globais

CTrade trade;                 // Manipulador da negociação

int stoploss;                 // Stop Loss inicial

int stoploss_positivo;        // Stop Loss ajustado para breakeven

int MagicNumber = 20210330;   // Número mágico para as ordens

double lot = 0.1;             // Tamanho da posição

int fast_MA = 5;              // Período da média móvel rápida

int slow_MA = 10;             // Período da média móvel lenta


// Vetores de dados para as médias móveis

double ma_fast[];

double ma_slow[];


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

{

   //--- Inicializa a série temporal para os vetores

   ArraySetAsSeries(ma_fast, true);

   ArraySetAsSeries(ma_slow, true);


   //--- Define as médias móveis a serem utilizadas

   int fast_MA_handle = iMA(_Symbol, _Period, fast_MA, 0, MODE_SMA, PRICE_CLOSE);

   int slow_MA_handle = iMA(_Symbol, _Period, slow_MA, 0, MODE_SMA, PRICE_CLOSE);


   //--- Retorna um sinal de sucesso para a inicialização do expert

   return(INIT_SUCCEEDED);

}


//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

{  

   // Se o expert for chamado no início de uma nova barra

   if(isNewBar())

   {

      // Copia os valores das médias móveis para os vetores

      int copy_fast_MA = CopyBuffer(fast_MA_handle, 0, 0, 3, ma_fast);

      int copy_slow_MA = CopyBuffer(slow_MA_handle, 0, 0, 3, ma_slow);

    


      // Se os vetores estiverem preenchidos

     if(copy_fast_MA == 3 && copy_slow_MA == 3)

  {

     // Sinal de compra quando a média móvel rápida cruza acima da média móvel lenta

     bool buy_signal = ma_fast[1] < ma_slow[1] && ma_fast[2] > ma_slow[2];


     // Sinal de venda quando a média móvel rápida cruza abaixo da média móvel lenta

     bool sell_signal = ma_fast[1] > ma_slow[1] && ma_fast[2] < ma_slow[2];

   


     // Verifica se já há uma posição aberta

     if(PositionSelect(_Symbol))

     {

        // Se for uma posição de compra

        if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

        {

           // Ajusta o stop loss para breakeven

           if(_Bid - PositionGetDouble(POSITION_PRICE_OPEN) > stoploss_positivo)

              trade.PositionModify(PositionGetInteger(POSITION_TICK), _Symbol, 0, _Bid - stoploss_positivo * _Point, 0, 0);

        }

  

        // Se for uma posição de venda

        else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

        {

           // Ajusta o stop loss para breakeven

           if(PositionGetDouble(POSITION_PRICE_OPEN) - _Ask > stoploss_positivo)

              trade.PositionModify(PositionGetInteger(POSITION_TICK), _Symbol, 0, PositionGetDouble(POSITION_PRICE_OPEN) - stoploss_positivo * _Point, 0, 0);

        }

     }

 

     // Se não houver posição aberta

     else

     {

        // Se houver sinal de compra

        if(buy_signal)

        {

           // Entra em posição de compra

           trade.Buy(lotSize, _Symbol, 0, 0, 0, "Entrada de Compra");

        }

        // Se houver sinal de venda

        else if(sell_signal)

        {

           // Entra em posição de venda

           trade.Sell(lotSize, _Symbol, 0, 0, 0, "Entrada de Venda");

       }

     }

  }


    

    

De mais detalhes e post na area de freelancer. Ninguem quer trabalhar de graça pra voce e não entendi que problema voce se refere inclusive.

 
Ricardo Rodrigues Lucca #:

De mais detalhes e post na area de freelancer. Ninguem quer trabalhar de graça pra voce e não entendi que problema voce se refere inclusive.

Ricardo Rodrigues Lucca


Bom dia! 

Meu caro muito obrigado pelo seu retorno, e pela sua dica no post fico muito grato.

Pois bem, o mesmo erro encontrado no meu código foi o mesmo encontrado no código que vc disponibilizou.

Segue anexo o print do erro, assim tento ser mais claro.  



Arquivos anexados:
 
elielson Coelho #:

Ricardo Rodrigues Lucca


Bom dia! 

Meu caro muito obrigado pelo seu retorno, e pela sua dica no post fico muito grato.

Pois bem, o mesmo erro encontrado no meu código foi o mesmo encontrado no código que vc disponibilizou.

Segue anexo o print do erro, assim tento ser mais claro.  



Eu nao tenho nenhum codigo disponibilizado publicamente na minha conta que lembre, o erro mencionado eh claro o suficiente para ser entendido e pelo seu codigo esta bem claro como arrumar.