Лучше выложите полный код. Я уже об этом говорил.
Иначе получается игра в прятки. У Вас что-то там не так работает, но Вы теряете время, задавая вопросы без полного кода.
Тут достаточно программистов - наверняка сразу же укажут на проблемное место.
Иначе получается игра в прятки. У Вас что-то там не так работает, но Вы теряете время, задавая вопросы без полного кода.
Тут достаточно программистов - наверняка сразу же укажут на проблемное место.
Смотрите. Пробуйте. Если убрать вышеуказанный код, а 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:
а я бы "qwerty = PERIOD_D1/period;" вынес в init(), а "qwerty" инициализировал бы как переменную для всего индикатора, тогда она вычисляется всего один раз для текущего графика, а потом только пользуется. ..Можно сократить немного
double qwerty = PERIOD_D1/period;
if(period==PERIOD_W1) qwerty=0.25;
if(period==PERIOD_MN1) qwerty=0.0417;
собсно и
if(period==PERIOD_W1) qwerty=0.25;
if(period==PERIOD_MN1) qwerty=0.0417;
тоже нада в инит()
Только сейчас увидел, что расчёт qwerty идёт внутри цикла. При том, что эта переменная является инвариантом.
При полном пересчёте индикатора - неоправданные тормоза.
1.вынес инициализацию в глобалку индикатора.
2.присвоения вынес в инит()
3.никаких изменений в скорости отработки не заметил
4.при переключении с между М1и М5 задержка 1-1,5 с. (отрабатываются все бары)
5.Машина - Р 2,4Г, 1Г мозгов
2.присвоения вынес в инит()
3.никаких изменений в скорости отработки не заметил
4.при переключении с между М1и М5 задержка 1-1,5 с. (отрабатываются все бары)
5.Машина - Р 2,4Г, 1Г мозгов
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
При переключении ТФ, задержки и нагрузка на процессор.
При использовании такого же индикатора, но без этого кода, тормозов нет. Кто знает в чем дело?