Indicador de histograma não alterna as cores

 

Bom dia!

Estou aprendendo MQL5 e me deparei com um problema em meu código. Baseado neste artigo, quero simplesmente criar um indicador em modo janela, do tipo histograma, que calcula o valor da diferença entre a máxima e mínima do candle, plota esse valor calculado no histograma e que coloque a cor da barra de acordo com os valores de abertura e fechamento do candle, ou seja, azul para candle positvo, laranja para negativo e violeta para neutro.


Porém, o histograma é colocado no gráfico, mas as barras não mudam de cor.


Segue o código a baixo:

//+------------------------------------------------------------------+
//|                                         ModeloDeAprendizagem.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window // propiedade para colocar indicador em janela separada

//+------------------------------------------------------------------+
//| Características do indicador                                     |
//+------------------------------------------------------------------+
#property indicator_buffers 2 //array de dados --- property é um pré processador
#property indicator_plots 1 // plotagens gráficas

#property indicator_label1 "Histograma" //nome que aparece na janela de dados
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_style1 STYLE_SOLID
#property indicator_color1 Blue , Orange , BlueViolet
#property indicator_width1 4

//+------------------------------------------------------------------+
//| Variáveis Globais                                                |
//+------------------------------------------------------------------+
double indBuffer[], indColor[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping  
   SetIndexBuffer(0,indBuffer,INDICATOR_DATA);//direciona para onde os dados do buufer irão
   SetIndexBuffer(1,indColor,INDICATOR_COLOR_INDEX);//para usar cor no indicador, tem que adicionar um buffer, criar uma variavel do tipo [] e mapear aqui utilizando essas configurações

//quantidade de cores plotadas no gráfico
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);

//--- definir valores de cor ao indicador
   
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 0, Blue);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 1, Orange);
   PlotIndexSetInteger(0, PLOT_LINE_COLOR, 2, BlueViolet);
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
  
//--- Otimizando a mémoria de calculo do indicador

   if(prev_calculated == 0)
     {
      //--- tarefa específica a ser realizada na primeira passagem uma única vez
      for(int i=0;i<=rates_total;i++)
       {
         indBuffer[i] = (high[i] - low[i]); // esse é um exemplo de looping que será ralizado somente uma unica vez dentro do codigo, economizando assim poder de processamento do pc.
         if(open[i] < close[i])
           {
           indColor[i]=0;
           }
         else if (open[i] > close[i])
           {
           indColor[i]=1;
           }
         else
           {
            indColor[i]=2;
           }
           }
       }
   else
   
     {
     indBuffer[rates_total-1] = (high[rates_total-1] - low[rates_total-1]);//após realizar os cálculos com os candles que estão no gráfico, a medida que for surgindo novos candles, irá realizar novos cálculos somente para eles
     
     if(open[rates_total-1] < close[rates_total-1])
           {
           indColor[rates_total-1]=0;
           }
     else if (open[rates_total-1] > close[rates_total-1])
           {
           indColor[rates_total-1]=1;
           }
     else
           {
           indColor[rates_total-1]=2;
           }
     }
     
     
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

No gráfico é plotado o histograma, mas não muda de cor. Provavelmente é algo muito simples que estou deixando passar. Alguém consegue me dar uma luz?

Criando indicadores multicoloridos no MQL5
Criando indicadores multicoloridos no MQL5
  • www.mql5.com
Neste artigo, consideraremos como criar indicadores multicoloridos ou converter os existentes para multicor. O MQL5 permite representar as informações de forma conveniente. Agora, não é necessário ver uma dúzia de gráficos com indicadores e realizar análises dos níveis RSI ou estocásticos, é melhor apenas pintar as velas com cores diferentes dependendo dos valores dos indicadores.
 
Jônatas Cavalini:

Bom dia!

Estou aprendendo MQL5 e me deparei com um problema em meu código. Baseado neste artigo, quero simplesmente criar um indicador em modo janela, do tipo histograma, que calcula o valor da diferença entre a máxima e mínima do candle, plota esse valor calculado no histograma e que coloque a cor da barra de acordo com os valores de abertura e fechamento do candle, ou seja, azul para candle positvo, laranja para negativo e violeta para neutro.


Porém, o histograma é colocado no gráfico, mas as barras não mudam de cor.


Segue o código a baixo:

No gráfico é plotado o histograma, mas não muda de cor. Provavelmente é algo muito simples que estou deixando passar. Alguém consegue me dar uma luz?

#property indicator_type1 DRAW_HISTOGRAM
#property indicator_type1 DRAW_COLOR_HISTOGRAM
Razão: