Estou tentando adicionar um indicador, mas não está funcionando

 

O indicador é CDC ATR Trialing stop v2.1, o erro aparece na inicialização dos buffers, mais especificamente ArrayResize, o erro é "open parenthesis expected". 

Tavez seja alguma coisa simples, mas eu comecei a pouco tempo a usar essa plataforma e esses erros simples ainda não sei resolver.

#property indicator_chart_window

//--- define os parâmetros do indicador
input int atr_period = 14; // período do ATR
input double atr_multiplier = 3.0; // multiplicador do ATR
input int cdc_period = 5; // período do CDC
input double cdc_threshold = 0.5; // limite do CDC
input int atr_trailing_stop_period = 10; // período do ATR Trailing Stop

//--- declaração de variáveis
int atr_handle, cdc_handle, atr_trailing_stop_handle; // identificadores dos indicadores
double atr_buffer[], cdc_buffer[], atr_trailing_stop_buffer[]; // buffers dos indicadores

//+------------------------------------------------------------------+
//| Função de inicialização do indicador                             |
//+------------------------------------------------------------------+
int OnInit()
{
   //--- cria o indicador ATR
   atr_handle = iATR(_Symbol, _Period, atr_period);
   if(atr_handle == INVALID_HANDLE)
   {
      Print("Erro ao criar o ATR");
      return INIT_FAILED;
   }

   //--- cria o indicador CDC
   cdc_handle = iCustom(_Symbol, _Period, "CDC", cdc_period, cdc_threshold);
   if(cdc_handle == INVALID_HANDLE)
   {
      Print("Erro ao criar o CDC");
      return INIT_FAILED;
   }

   //--- cria o indicador ATR Trailing Stop
   atr_trailing_stop_handle = iCustom(_Symbol, _Period, "ATR Trailing Stop", atr_period, atr_multiplier, atr_trailing_stop_period);
   if(atr_trailing_stop_handle == INVALID_HANDLE)
   {
      Print("Erro ao criar o ATR Trailing Stop");
      return INIT_FAILED;
   }

   //--- inicializa os buffers dos indicadores
   
   ArrayResize(atr_buffer, Bars);
   ArrayResize(cdc_buffer, Bars);
   ArrayResize(atr_trailing_stop_buffer, Bars);

   //--- retorno bem-sucedido da inicialização
   return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| Função de atualização do indicador                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   //--- atualiza o ATR
   if(CopyBuffer(atr_handle, 0, 0, rates_total, atr_buffer) == 0)
   {
      Print("Erro ao atualizar o ATR");
      return INIT_FAILED;
   }

   //--- atualiza o CDC
   if(CopyBuffer(cdc_handle, 0, 0, rates_total, cdc_buffer) == 0)
   {
      Print("Erro ao atualizar o CDC");
      return INIT_FAILED;
   }

   //--- atualiza o ATR Trailing Stop
   if(CopyBuffer(atr_trailing_stop_handle, 0, 0, rates_total, atr_trailing_stop_buffer) == 0)
   {
      Print("Erro ao atualizar o ATR Trailing Stop");
      return INIT_FAILED;
   }

   //--- faça o que quiser com os buffers aqui
   
   for(int i = 0; i < rates_total; i++){
      atr_trailing_stop_buffer[i] = close[i];
   }

   //--- retorno bem-sucedido da atualização
   return rates_total;
}
 
Maike Oliveira:

O indicador é CDC ATR Trialing stop v2.1, o erro aparece na inicialização dos buffers, mais especificamente ArrayResize, o erro é "open parenthesis expected". 

Tavez seja alguma coisa simples, mas eu comecei a pouco tempo a usar essa plataforma e esses erros simples ainda não sei resolver.

Bars eh uma funcao, ali tem que ser uma variavel ou constante numerica. Se for querer chamar a funcao Bars e pegar o retorno tem que fazer como qualquer outra funcao...
 
Ricardo Rodrigues Lucca #:
Bars eh uma funcao, ali tem que ser uma variavel ou constante numerica. Se for querer chamar a funcao Bars e pegar o retorno tem que fazer como qualquer outra funcao...
Vlw pela ajuda, consegui consertar esse erro, mas agora descobri outro erro, o indicador da erro quando adiciono ele ao gráfico kkk, vou continuar os estudos e tentar fazer funcionar e se algum tiver alguma ideia de como consertar ajudaria bastante.
 
Maike Oliveira #:
Vlw pela ajuda, consegui consertar esse erro, mas agora descobri outro erro, o indicador da erro quando adiciono ele ao gráfico kkk, vou continuar os estudos e tentar fazer funcionar e se algum tiver alguma ideia de como consertar ajudaria bastante.
Sim, em teoria esses arrayresize sao meio inuteis porque voce pode declarar o numero de plots / buffers que o indicador tem e usar as funcoes SetIndexBuffer que dai o terminal do mt5 gerencia essas alocacoes pra voce. Se ja tiver feito isso, entao aquele arrayresize esta interferindo e o comportamento esperado eh desconhecido. Alem disso, nao sei como ele esta desenhando algo sem usar esse caminho pra mim voce estaria fazendo um script para alguma coleta especifica e nao um indicador.
 
Ricardo Rodrigues Lucca #:
Sim, em teoria esses arrayresize sao meio inuteis porque voce pode declarar o numero de plots / buffers que o indicador tem e usar as funcoes SetIndexBuffer que dai o terminal do mt5 gerencia essas alocacoes pra voce. Se ja tiver feito isso, entao aquele arrayresize esta interferindo e o comportamento esperado eh desconhecido. Alem disso, nao sei como ele esta desenhando algo sem usar esse caminho pra mim voce estaria fazendo um script para alguma coleta especifica e nao um indicador.
Sim, eu comecei a programar para mt5 faz pouco tempo, quero aprender a fazer indicadores e estou indo por partes e aos poucos entendendo como funciona esse tipo de codificação, acho que ja fiz uns 5 códigos diferentes para esse indicador, mas se eu tiver algum avanço ou mais duvidas vou postar aqui pedindo ajuda, vlw.