I'm trying to add an indicator, but it's not working

 

O indicador é CDC ATR Trailing Stop v2.1
#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;
   }

   //ria 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;
   }
   
   for(int i = 0; i < rates_total; i++){
      atr_trailing_stop_buffer[i] = close[i];
   }

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

Please understand that we cannot read your mind nor see your computer.

Simply stating that it is "not working" does not help, so please explain in detail what issues you are having.

On this forum you are obliged to write in English. If you prefer to communicate in your own native language, then you can also post in the Portuguese forum.

Fórum MQL5
Fórum MQL5
  • www.mql5.com
MQL5: Fórum sobre sistemas de negociação automatizados e testes de estratégia
 
Maike Oliveira:

O indicador é CDC ATR Trailing Stop v2.1

Why not use buffers? Buffers are dynamically handled arrays. Fully automated by MQL.