Array of range

 

Pessoal,


Estou tentando montar um indicador simples. A ideia é fazer algumas verificações nos candles anterires, no entanto esta gerando o erro ARRAY OUT OF RANGE.

O código segue abaixo. Agradeço se alguém puder mostrar o erro.


#property indicator_chart_window

#property indicator_buffers 1

#property indicator_plots   1

//--- Plotagem de Setas

#property indicator_label1  "Compra"

#property indicator_type1   DRAW_ARROW

#property indicator_color1  clrGreen

#property indicator_width1  2


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int OnInit()

  {

   return(INIT_SUCCEEDED);

  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

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=1;

   if(prev_calculated>0)

      start=prev_calculated-1;

   for(int i=1; i<rates_total; i++)

     {

      if(open[i]<close[i] &&

         open[i-1]>close[i-1] &&

         open[i-2]>close[i-2] &&

         open[i-3]>close[i-3] &&

         open[i-4]>close[i-4])

        {

         Print("Tudo certo   ", rates_total);

        }

     }


   return(rates_total);

  }

//+------------------------------------------------------------------+


 
asandro1501:

Pessoal,


Estou tentando montar um indicador simples. A ideia é fazer algumas verificações nos candles anterires, no entanto esta gerando o erro ARRAY OUT OF RANGE.

O código segue abaixo. Agradeço se alguém puder mostrar o erro.


#property indicator_chart_window

#property indicator_buffers 1

#property indicator_plots   1

//--- Plotagem de Setas

#property indicator_label1  "Compra"

#property indicator_type1   DRAW_ARROW

#property indicator_color1  clrGreen

#property indicator_width1  2


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int OnInit()

  {

   return(INIT_SUCCEEDED);

  }


//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

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=1;

   if(prev_calculated>0)

      start=prev_calculated-1;

   for(int i=1; i<rates_total; i++)

     {

      if(open[i]<close[i] &&

         open[i-1]>close[i-1] &&

         open[i-2]>close[i-2] &&

         open[i-3]>close[i-3] &&

         open[i-4]>close[i-4])

        {

         Print("Tudo certo   ", rates_total);

        }

     }


   return(rates_total);

  }

//+------------------------------------------------------------------+


Bom dia.

Seu "start" é 1 certo? E você pede para ler i-4.

Na primeira iteração temos 1-4=-3.

Ou seja, o indicador tenta acessar open[-3], por isso o erro de array out range.

Mude seu "start" para 4. Aí o looping vai começar olhando a partir do candle 0, que é o correto.

Abs.
Razão: