Почему увеличиваеться нагрузка на компьютер?

 
В индикаторе с кодом:
double qwerty=24;
if(Period()==PERIOD_M1){qwerty=1440;}
if(Period()==PERIOD_M5){qwerty=288;}
if(Period()==PERIOD_M15){qwerty=96;}
if(Period()==PERIOD_M30){qwerty=48;}
if(Period()==PERIOD_H1){qwerty=24;}
if(Period()==PERIOD_H4){qwerty=6;}
if(Period()==PERIOD_D1){qwerty=1;}
if(Period()==PERIOD_W1){qwerty=0.25;}
if(Period()==PERIOD_MN1){qwerty=0.0417;}
При переключении ТФ, задержки и нагрузка на процессор.
При использовании такого же индикатора, но без этого кода, тормозов нет. Кто знает в чем дело?
 
Лучше выложите полный код. Я уже об этом говорил.

Иначе получается игра в прятки. У Вас что-то там не так работает, но Вы теряете время, задавая вопросы без полного кода.
Тут достаточно программистов - наверняка сразу же укажут на проблемное место.
 

Смотрите. Пробуйте. Если убрать вышеуказанный код, а qwerty заменить на 24, задержек не будет.

Файлы:
trand2.mq4  3 kb
 
Попробуйте

      int    period=Period();
      double qwerty=24;
      if(period==PERIOD_M1)  qwerty=1440;
      if(period==PERIOD_M5)  qwerty=288;
      if(period==PERIOD_M15) qwerty=96;
      if(period==PERIOD_M30) qwerty=48;
      if(period==PERIOD_H1)  qwerty=24;
      if(period==PERIOD_H4)  qwerty=6;
      if(period==PERIOD_D1)  qwerty=1;
      if(period==PERIOD_W1)  qwerty=0.25;
      if(period==PERIOD_MN1) qwerty=0.0417;



 
stringo писал (а):
Попробуйте

      int    period=Period();
      double qwerty=24;
      if(period==PERIOD_M1)  qwerty=1440;
      if(period==PERIOD_M5)  qwerty=288;
      if(period==PERIOD_M15) qwerty=96;
      if(period==PERIOD_M30) qwerty=48;
      if(period==PERIOD_H1)  qwerty=24;
      if(period==PERIOD_H4)  qwerty=6;
      if(period==PERIOD_D1)  qwerty=1;
      if(period==PERIOD_W1)  qwerty=0.25;
      if(period==PERIOD_MN1) qwerty=0.0417;



Тоже самое!
 
Все верно - индикатор написан экономно.
Но в момент переключения таймфрейма весь индикатор пересчитывается с самого начала.

Какова глубина истории в барах?
 

Можно сократить немного

double qwerty = PERIOD_D1/period;
if(period==PERIOD_W1) qwerty=0.25;
if(period==PERIOD_MN1) qwerty=0.0417;

 
4ebur:

Можно сократить немного

double qwerty = PERIOD_D1/period;
if(period==PERIOD_W1) qwerty=0.25;
if(period==PERIOD_MN1) qwerty=0.0417;

а я бы "qwerty = PERIOD_D1/period;" вынес в init(), а "qwerty" инициализировал бы как переменную для всего индикатора, тогда она вычисляется всего один раз для текущего графика, а потом только пользуется. ..
собсно и

if(period==PERIOD_W1) qwerty=0.25;
if(period==PERIOD_MN1) qwerty=0.0417;


тоже нада в инит()
 

Только сейчас увидел, что расчёт qwerty идёт внутри цикла. При том, что эта переменная является инвариантом.

При полном пересчёте индикатора - неоправданные тормоза.

 
stringo писал (а):

Только сейчас увидел, что расчёт qwerty идёт внутри цикла. При том, что эта переменная является инвариантом.

При полном пересчёте индикатора - неоправданные тормоза.


Ну вынес я расчет qwety из цикла, тормоза остались...
 
1.вынес инициализацию в глобалку индикатора.
2.присвоения вынес в инит()
3.никаких изменений в скорости отработки не заметил
4.при переключении с между М1и М5 задержка 1-1,5 с. (отрабатываются все бары)
5.Машина - Р 2,4Г, 1Г мозгов
Причина обращения: