Problemas com indicador em histograma

 

Olá, Pessoal!

Sou novo no MQL5.


Estava escrevendo um código para um indicador em histograma que defina os volumes de cada candle. Algumas vezes que coloco para rodar, ele funciona perfeitamente.

Outras vezes ele apresenta somente uma barra no histograma conforme imagem em anexo. Abaixo segue o código que escrevi.

//+------------------------------------------------------------------+
//|                                             HistogramaVolume.mq5 |
//|                                         Copyright 2020, Patrick. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Patrick."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot buy
#property indicator_label1  "buy"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot sell
#property indicator_label2  "sell"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         buyBuffer[];
double         sellBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,buyBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,sellBuffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
   int start = 0;
   
   if (prev_calculated != 0) start = prev_calculated-1;
   
   for(int index=start; index<rates_total;index++){
      if(open[index]<close[index]) buyBuffer[index] = volume[index];
      else sellBuffer[index] = volume[index];
   }
   
   
   Print("Rates : ",rates_total," PrevsCalculated : ", prev_calculated);
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
Todos os dias no mostruário do Mercado MQL5 são publicados dezenas de novos aplicativos para automação do trading. Selecione - entre os mais de 10 000 produtos - o aplicativo apropriado e livre-se de tarefas desnecessárias. Venda seus programas para negociação algorítmica em nosso mercado, isto é, na maior loja de aplicativos para traders! One...
Arquivos anexados:
 

Jamais esqueça de zerar os elementos não utilizados...

   for(int index=start; index<rates_total;index++){
      if (open[index]<close[index]) {
          buyBuffer[index] = volume[index];
          sellBuffer[index] = EMPTY_VALUE;
      } else {
          sellBuffer[index] = volume[index];
          buyBuffer[index] = EMPTY_VALUE;
      }
   }

;)

Razão: