IndicatorCounted() периодически становится равным 0

 
загрузил большую историю и обнаружил, что IndicatorCounted() уже после того как просчитаны все бары иногда возвращает 0. Например у меня 10 тыс баров и в логе можно видеть, что после того как просчитаны все бары countedBars становится равным 10381, потом на одном тике почему-то 0, а на следующем опять 10381.
...
18:32:43	i=2000 time=2005.05.09 13:00 Bars=10382 countedBars=0 reallyCountedBars=0
18:33:07	i=1000 time=2005.05.24 00:30 Bars=10382 countedBars=0 reallyCountedBars=0
18:34:08	i=0 time=2005.06.07 17:30 Bars=10382 countedBars=0 reallyCountedBars=0
18:34:08	i=0 time=2005.06.07 17:30 Bars=10382 countedBars=10381 reallyCountedBars=10382
18:34:08	i=0 time=2005.06.07 17:30 Bars=10382 countedBars=0 reallyCountedBars=10382
18:34:17	i=0 time=2005.06.07 17:30 Bars=10382 countedBars=10381 reallyCountedBars=10382



Если индекс первого бара для пересчета i определять как

int i = Bars - IndicatorCounted();


То индикатор понятно зацикливается, в итоге приходится использоваться "лепуху" типа
MathMax(countedBars, reallyCountedBars);

Почему так себя странно ведет IndicatorCounted()?

Код для тестирования:

int reallyCountedBars = 0;
int start() {
   int countedBars = IndicatorCounted();		
   int i = Bars - MathMax(countedBars, reallyCountedBars);

   while(i >= 0) {
   	if (i % 1000 == 0)
   		log("i=" + i + " time=" + dhmStr(Time[i]) + " Bars=" + Bars + 
   		" countedBars=" + countedBars + " reallyCountedBars=" + 
   		reallyCountedBars, true);
      i--;
   }
   
   reallyCountedBars = Bars;

   return (0);
}

 
будем разбираться. так не должно быть