загрузил большую историю и обнаружил, что IndicatorCounted() уже после того как просчитаны все бары иногда возвращает 0. Например у меня 10 тыс баров и в логе можно видеть, что после того как просчитаны все бары countedBars становится равным 10381, потом на одном тике почему-то 0, а на следующем опять 10381.
Если индекс первого бара для пересчета i определять как
То индикатор понятно зацикливается, в итоге приходится использоваться "лепуху" типа
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); }