Индикатор на основе старых данных

 
int start()
{
   int i,j;
   int limit;
   int counted_bars=IndicatorCounted();
   int InpShadowPeriod = 5;
        double median_volume = 0;
        
   if(Bars<50)
      return 0;
      

   if(counted_bars>0) counted_bars--;
      limit=Bars-counted_bars;
      

   for(i = InpMedianPeriod; i < limit; i ++)
        {  
      ExtMedianBufferUp[i] =  0;
           median_volume = 0;
           for(j = i-InpShadowPeriod; j < i; j ++)
           {
                median_volume+=Volume[j];
           }
        ExtMedianBufferUp[i] = median_volume/InpShadowPeriod;
     }


   return(0);
  }
//+------------------------------------------------------------------+



median =  iCustom(Symbol(),0,"Median_ver1", 0,1); 

 

Это код индикатора среднего объема за  InpShadowPeriod. На графике все чудесно отображается, но при использовании iCustom он возвращает всегда число 2147483647..

где-то в цикле переполнение.. я пытался удалить его разными if-ами, но ничего не помогает... Где  моя ошибка?! Подскажи, пожалуйста!


 
ramnek:

 

Это код индикатора среднего объема за  InpShadowPeriod. На графике все чудесно отображается, но при использовании iCustom он возвращает всегда число 2147483647..

где-то в цикле переполнение.. я пытался удалить его разными if-ами, но ничего не помогает... Где  моя ошибка?! Подскажи, пожалуйста!



В будущее заглядываете

 Проверьте чему равна переменная j

for(j = i-InpShadowPeriod; j < i; j ++)
 
Не могу сообразить как я могу в будущее заглядывать, если большой цикл имеет ограничение i < limit, а внутренний цикл j < i.. итого: j < i < limit - разве так не верно?
 
ramnek:
Не могу сообразить как я могу в будущее заглядывать, если большой цикл имеет ограничение i < limit, а внутренний цикл j < i.. итого: j < i < limit - разве так не верно?

При i =0 (обрабатываем нулевой бар) j=-InpShadowPeriod
 
ramnek:
Не могу сообразить как я могу в будущее заглядывать, если большой цикл имеет ограничение i < limit, а внутренний цикл j < i.. итого: j < i < limit - разве так не верно?

индексы буферов и массивов должны быть целыми положительными числами (число 0 относится к этим числам), если я правильно понял особенности индексирования буферов и массивов. наверно в этом направлении следует искать ошибку. равенства

for(i = InpMedianPeriod; и for(j = i-InpShadowPeriod; 

должны быть больше или равны 0.
 
При i =0 (обрабатываем нулевой бар) j=-InpShadowPeriod

 

Но такого быть не может, потому что большой цикл начинается при i = InpMedianPeriod;

Причина обращения: