Функция возвращает количество баров, не измененных после последнего вызова индикатора. Большинство подсчитанных баров не нуждается в пересчете.
Функция используется для оптимизации вычислений.
Замечание: самый последний бар не считается посчитанным, и в большинстве случаев необходимо пересчитывать только его. Однако бывают
пограничные случаи, когда вызов пользовательского индикатора производится из эксперта на первом тике нового бара. Возможна ситуация, что последний
тик предыдущего бара не обработан (по той причине, что в момент прихода этого последнего тика обрабатывался предпоследний тик), и пользовательский
индикатор не был вызван и поэтому не был рассчитан. Чтобы избежать в такой ситуации ошибок расчета индикатора, функция IndicatorCounted() возвращает
реально посчитанное количество баров минус один.
Пример:
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- последний посчитанный бар будет пересчитан
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- основной цикл
for(int i=0; i<limit; i++)
{
//---- ma_shift присваивается 0, потому что SetIndexShift, вызываемый выше
ExtBlueBuffer[i]=iMA(NULL,0,JawsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
ExtRedBuffer[i]=iMA(NULL,0,TeethPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
ExtLimeBuffer[i]=iMA(NULL,0,LipsPeriod,0,MODE_SMMA,PRICE_MEDIAN,i);
}
//----
return(0);
}
|