функция тормозит

 

Есть функция

bool MorningFlat()
  {
  //if(!Activate) return(0);
   
  LastDay = 0;
  int counted_bars=IndicatorCounted();
  if(counted_bars>0) counted_bars--;
  int limit=Bars-counted_bars;
  for(int i=limit; i>=0; i--)
  if(TimeHour(Time[i]) >= EndHour)
  {
  datetime BeginDay = iTime(Symbol(), PERIOD_D1, iBarShift(Symbol(), PERIOD_D1, Time[i])); // Расчет времени начала суток
  datetime NextDay = BeginDay+86400; // Расчет времени начала следующих суток
  if(LastDay >= BeginDay) continue; // Если в этот день уже рисовали уровни, то продолжаем основной цикл
  int StartBar = iBarShift(Symbol(), 0, BeginDay+StartHour*3600); // Бар, соответсвующий началу суток плюс смещение в часах
  int FinishBar = iBarShift(Symbol(), 0, BeginDay+(EndHour-1)*3600); // Бар, соответствующий последнему бару "утреннего флэта"
  LowV = Low[iLowest(Symbol(), 0, MODE_LOW, StartBar-FinishBar+1, FinishBar)]; // Нижняя граница
  HighV = High[iHighest(Symbol(), 0, MODE_HIGH, StartBar-FinishBar+1, FinishBar)]; // Верхняя граница
  double TargetU = (HighV-LowV)*(TargetLevel-100)/100+HighV;
  double TargetD = LowV-(HighV-LowV)*(TargetLevel-100)/100;
  // Канал "утреннего флэта"
  for(int j = StartBar; j >= FinishBar; j--)
  {
  Up[j] = HighV;
  Down[j] = LowV;
  }
  // -----------------------
  // Ожидаемые цели при пробое флэта  
  for(j = FinishBar; Time[j] < NextDay && j >= 0; j--)
  {
  TargetUp[j] = TargetU;
  TargetDn[j] = TargetD;
  }
  // -------------------  
   
  DrawLabel(Time[iBarShift(Symbol(), 0, BeginDay)], HighV, True, UpColor, 5); // Рисуем верхнюю ценовую метку канала
  DrawLabel(Time[iBarShift(Symbol(), 0, BeginDay)], LowV, False, DnColor, 5); // Рисуем нижнюю ценовую метку канала
  DrawLabel(Time[FinishBar], TargetU, True, TargetUpColor, 5); // Рисуем верхнюю ценовую метку цели
  DrawLabel(Time[FinishBar], TargetD, False, TargetDnColor, 5); // Рисуем нижнюю ценовую метку цели
  LastDay = BeginDay; // Отмечаем, что в этот день уровни уже были нарисованы
  }

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


и ещё одна

void DrawLabel(datetime TimeL, double Price, bool Upper, color Col, int Code)
{
 if(Upper)
  string Name = "Lab"+DoubleToStr(TimeL, 0)+"U";
  else
  Name = "Lab"+DoubleToStr(TimeL, 0)+"D"; 

 if(ObjectCreate(Name, OBJ_ARROW, 0, TimeL, Price))
  {
  ObjectSet(Name, OBJPROP_ARROWCODE, Code);
  ObjectSet(Name, OBJPROP_COLOR, Col);
  } 
}
Это вырезка из известного индикатора MorningFlat

Проблема такая, вот эта функция в эксперте тормозит все тестирование, прогонка одного месяца в режиме "все тики" занимает 50мин.

Без неё быстрее.

Дак вот, какой оператор может тормозить тестирование?

 

блок рисования отключал - без результатно

 
  int counted_bars=IndicatorCounted();
  if(counted_bars>0) counted_bars--;
  int limit=Bars-counted_bars;
  for(int i=limit; i>=0; i--)

В эксперте IndicatorCounted() возвращает -1.

Цикл для советника наверно лишний.

 

да, лишний. но проблема наврятли в этом.

 
yaten >>:

да, лишний. но проблема наврятли в этом.


Bars чуть больше 1000 только в начале тестирования и с каждым баром увеличивается.

на каком тф тест?