Erro na programação

 

Bom dia, sou novo no MQL5 e estou realizando alguns testes.

Estava testando um exemplo onde há uma estratégia de compra e venda usando a média móvel.

Função é essa:

ENUM_SINAL CheckSinal()

 {

   double media_buffer[];

   CopyBuffer(handle_media, 0, 0, 2, media_buffer);

   ArraySetAsSeries(media_buffer, true);

   

   if (media_buffer[0] > media_buffer[1])

      return COMPRA;

   

   if (media_buffer[0] < media_buffer[1])

      return VENDA;

   

   return NULO;

 }


Então decidi trocar por outra estratégia.

ENUM_SINAL CheckSinal()

 {

  MqlRates mrate[];

    if(mrate[0].low <= minima_candle_atual)

          {

            minima_candle_atual = mrate[0].low;          

          }

          else

          {

            if((minima_candle_atual <= 120000) && (mrate[0].low = (120000)))

            {

               Alert("COMPRA ",minima_candle_atual);

               return COMPRA;

            }

            else{

            return VENDA;

          }


          return 0;

 }


Essa estratégia de entrada é fraca e precisa de melhorias, mas o intuito foi testar o código, sendo que fora da função ENUM ela funciona e quando coloca lá dentro ocorre um erro: OnTick critical error

A compilação ocorre sem nenhum problema.

Não consegui encontrar o que pode estar errado.

 
Nelson Aguiar:

Bom dia, sou novo no MQL5 e estou realizando alguns testes.

Estava testando um exemplo onde há uma estratégia de compra e venda usando a média móvel.

Função é essa:

ENUM_SINAL CheckSinal()

 {

   double media_buffer[];

   CopyBuffer(handle_media, 0, 0, 2, media_buffer);

   ArraySetAsSeries(media_buffer, true);

   

   if (media_buffer[0] > media_buffer[1])

      return COMPRA;

   

   if (media_buffer[0] < media_buffer[1])

      return VENDA;

   

   return NULO;

 }


Então decidi trocar por outra estratégia.

ENUM_SINAL CheckSinal()

 {

  MqlRates mrate[];

    if(mrate[0].low <= minima_candle_atual)

          {

            minima_candle_atual = mrate[0].low;          

          }

          else

          {

            if((minima_candle_atual <= 120000) && (mrate[0].low = (120000)))

            {

               Alert("COMPRA ",minima_candle_atual);

               return COMPRA;

            }

            else{

            return VENDA;

          }


          return 0;

 }


Essa estratégia de entrada é fraca e precisa de melhorias, mas o intuito foi testar o código, sendo que fora da função ENUM ela funciona e quando coloca lá dentro ocorre um erro: OnTick critical error

A compilação ocorre sem nenhum problema.

Não consegui encontrar o que pode estar errado.

Precisa usar a funcao CopyRates pra popular seu array na nova funcao, provavelmente o critical error eh um acesso ao array nao alocado que voce esta fazendo.
 
Obrigado