Ошибка в iBarShift?..

 
При запуске индикатора на инструменте с неполной историей на часовом ТФ с нижеследующим кодом терминал виснет намертво! Может я что-то неправильно делаю?
   int a;
	a = iBarShift(NULL, PERIOD_H1, iTime(NULL, PERIOD_H4, 0));
   if(a != -1)
   {
	  while(iTime(NULL, PERIOD_H1, a)<iTime(NULL, PERIOD_H4, 0))
		  if(a>0)
			  a--;
	}
   return(0);
 
А что происходит, когда a становится равным нулю и условие iTime(NULL, PERIOD_H1, a)<iTime(NULL, PERIOD_H4, 0) не срабатывает?

В чистом виде зацикленность.
Причина обращения: