Столкнулся со следующей проблемой.
В Индикаторе работают две функции OnChartEvent и OnCalculate. Если отключена функция OnChartEven, код в функции OnCalculate работает как было задумано.
Если же включаем отработку событий в функции OnChartEven, то перестает отрабатываться код в функции OnCalculate.
Просьба ответить, кто знает, почему такое происходит.
У меня пока появилась одна идея. Код из функции OnCalculate поместить и в функцию OnChartEven. Но предполагаю, что могут при этом происходить какие-то непредвиденные действия программы.
Какой порядок отработки функций OnChartEvent и OnCalculate при совместном их использовании в программе?
для проверки порядка выполнения функций использую примерно такие тесты:
bool чарт=true, кальк=true; ... OnChartEvent(....) { if(чарт) { Alert("чарт"); чарт=false; } } ... OnChartCalculate(....) { if(кальк) { Alert("кальк"); кальк=false; } }
Зачем в индикаторе OnChartEvent - ведь это обработка нажатия клавиш, клик и перемещение мыши, создание и удаление объектов, ...
Какой порядок отработки функций OnChartEvent и OnCalculate при совместном их использовании в программе?
Порядок их выполнения не может быть указан, т.к. это обработчики событий. Раньше выполнится тот обработчик, событие по которому произойдет ранее. Может быть так, что выполнится 10 OnChartEvent и только потом придет тик, который запустит OnCalculate. А может быть и наоборот.
То, что включение/отключение указанных обработчиков как-то влияет на вызов другого обработчика, это ошибка в программе. Ищите причину в коде, а не в терминале. Или выложите весь код. Возможно, тут смогут помочь.
Порядок их выполнения не может быть указан, т.к. это обработчики событий. Раньше выполнится тот обработчик, событие по которому произойдет ранее. Может быть так, что выполнится 10 OnChartEvent и только потом придет тик, который запустит OnCalculate. А может быть и наоборот.
То, что включение/отключение указанных обработчиков как-то влияет на вызов другого обработчика, это ошибка в программе. Ищите причину в коде, а не в терминале. Или выложите весь код. Возможно, тут смогут помочь.
Код около 40 000 строк.
Разберусь.
Спасибо за ответы.
STARIJ можете посмотреть, зачем там обработчик событий: https://www.mql5.com/ru/market/product/19758
А здесь описана маленькая часть функционала с использованием обработчика событий https://www.mql5.com/ru/articles/2990
- отзывов: 2
- 2016.12.28
- Eugeni Neumoin
- www.mql5.com
Если же включаем отработку событий в функции OnChartEven, то перестает отрабатываться код в функции OnCalculate.
Скорее всего, ошибка в одновременной обработке двух событий.
Когда и OnChartEven и OnCalculate пытаются что-то делать не зная друг о друге.
Скорее всего, ошибка в одновременной обработке двух событий.
Когда и OnChartEven и OnCalculate пытаются что-то делать не зная друг о друге.
Мне кажется, когда одно событие обрабатывается - второе стоит в очереди.
ок, протелепатирую иначе)
Одно событие изменяет объекты под себя, а второе событие - под себя.
В электронике такой процесс называли гонками.
То есть имеем два или более процесса действующих одновременно. И в зависимости от очередности их завершения зависит будет ошибка или будет правильное исполнение работы.
В военном оборудовании для устранения гонок приходилось менять блоки.
А здесь придется экспериментально искать выход из сложившейся ситуации.
- Идея 1 - объединить в одном индикаторе множество различных вариантов поиска экстремумов (минимумов и максимумов) на ценовых графиках рынков.
- Идея 2 - сделать возможным легкую привязку различных графических инструментов, позволяющих анализировать поведение рынка, к выявленным экстремумам.
Функции в OnChartEvent работают только с иконками и отображением объектов, т.е. только с функционалом идеи 2?
Или через OnChartEvent вы делаете изменение в работе логики / способов расчета зигзагов? Если да, то скорее всего проблема где то здесь
Функции в OnChartEvent работают только с иконками и отображением объектов, т.е. только с функционалом идеи 2?
Или через OnChartEvent вы делаете изменение в работе логики / способов расчета зигзагов? Если да, то скорее всего проблема где то здесь
В чартевент логика расчёта зигзагов не затрагивается
А почему вы решили, что OnCalculate именно перестает работать? Может он работает но не так как задумывалось, из-за определенных настроек панели управления?
Если в OnCalculate поставить какой-нибудь принт или алерт, то они не исполняются?
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- Print("asdfadsf");
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Столкнулся со следующей проблемой.
В Индикаторе работают две функции OnChartEvent и OnCalculate. Если отключена функция OnChartEven, код в функции OnCalculate работает как было задумано.
Если же включаем отработку событий в функции OnChartEven, то перестает отрабатываться код в функции OnCalculate.
Просьба ответить, кто знает, почему такое происходит.
У меня пока появилась одна идея. Код из функции OnCalculate поместить и в функцию OnChartEven. Но предполагаю, что могут при этом происходить какие-то непредвиденные действия программы.
Какой порядок отработки функций OnChartEvent и OnCalculate при совместном их использовании в программе?