Indicador que colore candle com bug

 

Boa noite,

Fiz um indicador que localiza e pinta os inside bar. É o meu primeiro. Entretanto parece haver algum bug nele, pois eventualmente quando eu troco de timeframe ele bug e colore todos os candles. Já revirei o código e não consegui achar o erro. Será que alguém consegue por gentileza me ajudar?


//+------------------------------------------------------------------+
//|                                                   inside bar.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Otávio Konmin Clemente"
#property version   "1.00"
#property indicator_chart_window 
#property indicator_buffers 5 
#property indicator_plots   1 
//--- plot candles
#property indicator_label1  "candles"
#property indicator_type1   DRAW_COLOR_CANDLES 
#property indicator_color1  clrYellow, 

//--- indicator buffers
double         candlesOpenBuffer[];
double         candlesHighBuffer[];
double         candlesLowBuffer[];
double         candlesCloseBuffer[];
double         candlesColors[];
//+------------------------------------------------------------------+
//|                      |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
// SetIndexBuffer - Vincula a array ao buffer e indica seu tipo
   SetIndexBuffer(0,candlesOpenBuffer,INDICATOR_DATA); //
   SetIndexBuffer(1,candlesHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,candlesLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,candlesCloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,candlesColors,INDICATOR_COLOR_INDEX);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                               |
//+------------------------------------------------------------------+
// OnCalculate - É chamada em indicadores quando ocorre o evento Calculate para processar alterações nos dados de preço.
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;
   if(prev_calculated==0)
     {
      start=1;
     }
   else
     {
      start=prev_calculated-1;
     }

   for(int i=start; i<rates_total; i++)
     {
      DefineColorCandle(i,close,open,high,low);
     }
   return(rates_total);

  }

//+------------------------------------------------------------------+
//|Colors
//|0 = Amarelo
//+------------------------------------------------------------------+
void DefineColorCandle(int index,const double &close[],const double &open[],const double &high[],const double &low[])
  {
   DefineBuffersCandle(index,close,open,high,low);
   if(high[index] > high[index+1] && low[index] < low[index+1])
     {
      candlesColors[index+1]=0;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DefineBuffersCandle(int index,const double &close[],const double &open[],const double &high[],const double &low[])
  {
   candlesOpenBuffer[index] = open[index];
   candlesHighBuffer[index] = high[index];
   candlesLowBuffer[index] = low[index];
   candlesCloseBuffer[index] = close[index];
 }
//+------------------------------------------------------------------+
 
Boa tarde, tudo bem?
Cada, eu preciso deu ma função igual a sua. Porém não sei programa. rsrs.
Sabe se essa regra sua da para pintar o candle com base no hilo?
 

Boa tarde.

Não. Ele não pinta com base no hilo, até pq não foi esse o intuito quando ele foi feito.

Se não sabe programar tem duas opções: você pode aprender ou contratar um freela.

Para contratar um freela o mql5 dispõe dessa ferramenta: https://www.mql5.com/pt/job

Caso queira aprender como programar um indicador, sugiro começar por esse artigo https://www.mql5.com/pt/articles/10

E se tiver alguma dúvida técnica poste no Fórum que as pessoas costumam ajudar. No mais, fico a disposição.

Ainda não achei o bug, vou pegar uma outra base de código e começar o zero. Mas se alguém souber o problema por favor me avise. 
Aplicativos de negociação para o MetaTrader 5 por encomenda
Aplicativos de negociação para o MetaTrader 5 por encomenda
  • www.mql5.com
Olá! Necessito de um indicador que me diga quando atingir uma determinada sequência de velas de mesma cor (único input a ser inserido pelo usuário). Exemplo: Se o usuário escolher n = 5, depois de 5 velas de mesma cor ele deve inserir uma seta em cima dessa última vela que atinge a sequência pré determinada. Essa seta deve ter uma cor contrária...
 

Não seria assim para pegar o inside Bar?


//+------------------------------------------------------------------+
//|                                                insideBars.mq5    |
//|                                                                  |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_width1  1
#property indicator_style1  STYLE_SOLID
#property indicator_label1  "Open;High;Low;Close"
//                                                
#property indicator_color1 clrGray,clrYellow,

double op[];
double hg[];
double lw[];
double cl[];
double cor[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,op,INDICATOR_DATA);
   SetIndexBuffer(1,hg,INDICATOR_DATA);
   SetIndexBuffer(2,lw,INDICATOR_DATA);
   SetIndexBuffer(3,cl,INDICATOR_DATA);
   SetIndexBuffer(4,cor,INDICATOR_COLOR_INDEX);
   
   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 &TickVolume[],
               const long &Volume[],
               const int &Spread[])
  {
    int i = 0;
    if(prev_calculated == 0) i = 1;
    else i = prev_calculated-1;
    while(i < rates_total){
            
        op[i] = Open[i];
        hg[i] = High[i];
        lw[i] = Low[i];
        cl[i] = Close[i];

        if(op[i-1]>cl[i-1] && //Segunda barra é de baixa
            cl[i]>op[i] && //Primeira barra é de alta
            hg[i-1]>hg[i] &&  //Máxima da segunda barra excede a Máxima da primeira
            op[i-1]>cl[i] && //Abertura da segunda barra excede o Fechamento da primeira barra
            lw[i-1]<lw[i])      //Mínima da segunda barra e menor do que a Mínima da primeira barra
        {
            cor[i] = 1;
        }
        else{
            cor[i] = 0;
        }

        i++;
    }
   return(rates_total-1);
  }
//+------------------------------------------------------------------+


Peguei o cálculo deste exemplo, talvez tenha que ajustar algo.

https://www.mql5.com/pt/articles/1771

Ação do Preço: Automatizando a Estratégia de Negociação "Inside Bar"
Ação do Preço: Automatizando a Estratégia de Negociação "Inside Bar"
  • www.mql5.com
Todos os traders de Forex se deparam com a Ação do Preço em algum ponto. Esta não é uma mera técnica de análise gráfica, mas todo um sistema para definir a possível orientação do movimento do preço no futuro. Neste artigo vamos olhar para o padrão "Inside Bar" em detalhes e desenvolver um EA para o rastreamento e realizaçao de operações de...
 
prsc:

Não seria assim para pegar o inside Bar?


Peguei o cálculo deste exemplo, talvez tenha que ajustar algo.

https://www.mql5.com/pt/articles/1771

Rodei aqui e funcionou! Eu estava procurando esse indicador!

Valeu!

Razão: