блок рисования отключал - без результатно
int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(int i=limit; i>=0; i--)
В эксперте IndicatorCounted() возвращает -1.
Цикл для советника наверно лишний.
да, лишний. но проблема наврятли в этом.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть функция
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мин.
Без неё быстрее.
Дак вот, какой оператор может тормозить тестирование?