Colorir Candles, não consigo fazer funcionar

 

Estou tentando com o código abaixo, simplesmente colorir os candles, caso eles obedeçam as regras:


VERDE - quando o preço de abertura do candle está acima da média de 16 períodos da média móvel simples com parâmetro "low"

VERMELHO - quando o preço de abertura do candle está abaixo da média de 16 períodos da média móvel simples com parâmetro "high"


Sempre estou com erro, alguém consegue indicar o que preciso efetuar para corrigir?



#property copyright "Wilder"

#property version   "1.0"
#property indicator_chart_window

//+------------------------------------------------------------------+
//| PROPERTIES                                                       |
//+------------------------------------------------------------------+
#property indicator_buffers 7
#property indicator_plots   3

//---
#property indicator_label1  "Hilo Alta"
#property indicator_type1   DRAW_LINE
#property indicator_style1  STYLE_SOLID
#property indicator_color1  clrLimeGreen
#property indicator_width1  4

#property indicator_label2  "Hilo Baixa"
#property indicator_type2   DRAW_LINE
#property indicator_style2  STYLE_SOLID
#property indicator_color2  clrRed
#property indicator_width2  4

#property indicator_label3  "Candles"
#property indicator_type3   DRAW_COLOR_CANDLES
#property indicator_style3  STYLE_SOLID
#property indicator_color3  clrRed,clrLimeGreen
#property indicator_width3  1


//+------------------------------------------------------------------+
//| VARIÁVEIS GLOBAIS                                                |
//+------------------------------------------------------------------+
//--- buffer do indicador
double         hiloBuffer[];
double         altaBuffer[];
double         baixaBuffer[];
double         candlesColors[];
double         candlesOpenBuffer[];
double         altavalue[];
double         baixavalue[];
int            altahandle;
int            baixahandle;
input int      PeriodoMedia=16;
input ENUM_MA_METHOD      TipoMedia=MODE_SMA;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,hiloBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,altaBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,baixaBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,candlesOpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,candlesColors,INDICATOR_COLOR_INDEX);
   altahandle=iMA(_Symbol,_Period,PeriodoMedia,0,TipoMedia,PRICE_LOW);
   baixahandle=iMA(_Symbol,_Period,PeriodoMedia,0,TipoMedia,PRICE_HIGH);
   
   
//--- inicializa arrays
   ArrayInitialize(hiloBuffer,EMPTY_VALUE);
   ArrayInitialize(altaBuffer,EMPTY_VALUE);
   ArrayInitialize(baixaBuffer,EMPTY_VALUE);
//--- zera buffers
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
//---
   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;
   if(prev_calculated==0)
     {
      start=1;
        }else{
      start=prev_calculated-1;
     }
   CopyBuffer(altahandle,0,0,rates_total,hiloBuffer);
   
   for(int i=start; i<rates_total; i++)
     {
      DefineColorCandle(hiloBuffer,i,open);
     }
   return(rates_total);

  }

void DefineColorCandle(double &hiloBuffer[],double &altavalue[],double &baixavalue[],int index,const double &close[],const double &open[],const double &high[],const double &low[])
{
   DefineBuffersCandle(index,open);
   bool candleAlta=open[index]>altavalue[index];
   bool candleBaixa=open[index]<baixavalue[index];
   if(candleAlta)
     {
      candlesColors[index]=0;
        }else if(candleBaixa){
      candlesColors[index]=1;
        }
}
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DefineBuffersCandle(int index,const double &close[],const double &open[],const double &high[],const double &low[])
  {
   candlesOpenBuffer[index] = open[index];
  }
//+------------------------------------------------------------------+
 

este código faz isto, podes pegar de lá como exemplo


https://www.mql5.com/pt/code/20852

Setup Tabajara
Setup Tabajara
  • www.mql5.com
Olá amigos, trago aqui a minha implementação do Setup Tabajara criado pelo professor André Machado que nada mais é uma regra de cores aplicado a média de 20 aritmética e aos candles que ajudam os traders mais ansiosos a manterem a calma e operar melhor a tendência. As regras de cores são bem simples: Média verde e candle verde autoriza a busca...
 
wildermellotto:

Estou tentando com o código abaixo, simplesmente colorir os candles, caso eles obedeçam as regras:

VERDE - quando o preço de abertura do candle está acima da média de 16 períodos da média móvel simples com parâmetro "low"

VERMELHO - quando o preço de abertura do candle está abaixo da média de 16 períodos da média móvel simples com parâmetro "high"

Sempre estou com erro, alguém consegue indicar o que preciso efetuar para corrigir?

Por favor utilize a caixa de edição de códigos quando quiser postar trechos de código aqui no fórum MQL5 !!!

Exemplo errado:

for(int i=0;i<OrdersTotal();i++)

  {

     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);

     if (OrderMagicNumber()==MagicNumber) result++;

  }

Exemplo correto:

for(int i=0;i<OrdersTotal();i++)
  {
     OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
     if (OrderMagicNumber()==MagicNumber) result++;
  }

Abraços,
Malacarne

Razão: