Помогите с проблемой : array out of range

 

Привет всем! Вот код с проблемой:

   for(int i=0; i<Bars-1;i++)
    {
         if(Close[i+1]>=Close[i+2]&&Close[i+2]>Open[i+2]
            &&Close[i+2]>=Close[i+3]&&Close[i+3]>Open[i+3]
            &&Close[i+3]>=Close[i+4]&&Close[i+4]>Open[i+4]
            &&Close[i+5]<=Open[i+5])
            Buffer1[i]=High[i]+0.0002;
        
         if(Close[i+1]<=Close[i+2]&&Close[i+2]<Open[i+2]
            &&Close[i+2]<=Close[i+3]&&Close[i+3]<Open[i+3]
            &&Close[i+3]<=Close[i+4]&&Close[i+4]<Open[i+4]
            &&Close[i+5]>=Open[i+5])
            Buffer5[i]=Low[i]-0.0002;
           
    }
       return(rates_total);
 

Не могу понять где здесь ошибка, ПОМОГИТЕ!!!

 
Maksim Neimerik:

Привет всем! Вот код с проблемой:

   for(int i=0; i<Bars-1;i++)
    {
         if(Close[i+1]>=Close[i+2]&&Close[i+2]>Open[i+2]
            &&Close[i+2]>=Close[i+3]&&Close[i+3]>Open[i+3]
            &&Close[i+3]>=Close[i+4]&&Close[i+4]>Open[i+4]
            &&Close[i+5]<=Open[i+5])
            Buffer1[i]=High[i]+0.0002;
        
         if(Close[i+1]<=Close[i+2]&&Close[i+2]<Open[i+2]
            &&Close[i+2]<=Close[i+3]&&Close[i+3]<Open[i+3]
            &&Close[i+3]<=Close[i+4]&&Close[i+4]<Open[i+4]
            &&Close[i+5]>=Open[i+5])
            Buffer5[i]=Low[i]-0.0002;
           
    }
       return(rates_total);
 

Не могу понять где здесь ошибка, ПОМОГИТЕ!!!


ну, тут все просто.

самое крайнее значение для Close это Close[Bars-1]  .... а у вас Close[Bars+1], Close[Bars+2] and so on...

 
Denis Sartakov:


ну, тут все просто.

самое крайнее значение для Close это Close[Bars-1]  .... 

не понял, можно подробнее, пожалуйста...

у меня Close[i+1] где i - это порядковый номер бара...

 
Maksim Neimerik:

не понял, можно подробнее, пожалуйста...

у меня Close[i+1] где i - это порядковый номер бара...

У вас ещё и Close[i+2] есть.
 
Artyom Trishkin:
У вас ещё и Close[i+2] есть.
ну да, это 3-й бар, а что, это не правильно?
 

for(int i=0; i<Bars-1;i++) // перебор всех баров
Open[i+5]               // текущий бар + 5 баров


А теперь представьте что i = последний доступный бар, как же тогда можно получить i+5, если его нет?

Сделайте перебор для for(int i=0; i<Bars-1 -5;i++) и будет вам счастье.

 
Sergey Dzyublik:

for(int i=0; i<Bars-1;i++) // перебор всех баров
Open[i+5]               // текущий бар + 5 баров


А теперь представьте что i = последний доступный бар, как же тогда можно получить i+5, если его нет?

Сделайте перебор для for(int i=0; i<Bars-1 -5;i++) и будет вам счастье.

Спасибо, понял! Я же думал что і+5 это будет 6 бар справа, а выходит он у меня в будущее смотрел...
 
Maksim Neimerik:
Спасибо, понял! Я же думал что і+5 это будет 6 бар справа, а выходит он у меня в будущее смотрел...

Это и есть 6-й, но справа налево, самое настоящее прошлое. Доисторическое, можно сказать, так как в истории его нет.
Причина обращения: