![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если только в этом проблема, то ее можно легко решить.
Например так:
Ильяс, непонятка в другом.
Зачем ChartGet(также ChartTimePriceToXY и ChartXYToTimePrice) функции делать асинхронными, когда характеристики чарта уже сформированы во время перерисовки чарта при наступлении события CHARTEVENT_CHART_CHANGE.
Получается что при наступлении события CHARTEVENT_CHART_CHANGE родной чарт перерисовывается, а потом для остальных объектов запросы ChartGet помещаются в асинхронную очередь.
Зачем?
Ведь можно же формировать внутреннюю структуру параметров чарта и просто их считывать по запросу GhartGet функций. Зачем нужна асинхронность? Внутренний чатр вы же уже перерисовали.
Отсюда и отставание всех объектов от родного чарта.
Вместо этого, общение происходит через специальные lockfree очереди сообщений чарта и эксперта.
Отсутствие локов позволяет мгновенно производить отрисовку чарта, не ожидая завершения работы с ним из других потоков.
Это кстати один из критериев скорости работы ChartGet функций, чарт ответит на запросы, только когда освободится от остальных задач
Может вопрос покажется детским, но имеет ли смысл отрисовывать все элементы управления терминала так часто как сейчас? Разумная дискредитация ( с учетом способности человека воспринимать изменения ) нужна.
Могу ошибаться - но у меня складывается впечатление о непрерывной отрисовке всех окон терминала.
Выводы сделал пытаясь проанализировать очередь оконных сообщений.
Вместо этого, общение происходит через специальные lockfree очереди сообщений чарта и эксперта.
Отсутствие локов позволяет мгновенно производить отрисовку чарта, не ожидая завершения работы с ним из других потоков.
Это кстати один из критериев скорости работы ChartGet функций, чарт ответит на запросы, только когда освободится от остальных задач
кто-то эээ слегка вылез за пределы своей компетенции
Предполагаю, что при движении мышкой, происходит всплеск событий, которые обрабатывает эксперт.
При этом, если эксперт создаёт слишком большое число комманд чарту (загружает очередь чарта), то он получает пенальти, чтобы не произошло переполнение очереди комманд чарта.
Система проектировалась в ~2008 году, возможно стоит пересмотреть, подумаем.
Ilyas, сейчас имея возможно писать кроссплатформенные коды, можно сравнить скорость отработки кода.
К сожалению, работа с графикой и обработкой событий в мт5 желает быть лучшей, хотя-бы на уровне мт4, который это обрабатывает в разы быстрее при одинаковых условиях.
Я не в курсе что и где под "капотом", но результат виден на графике. Согласен, торговые события в мт5 превосходят мт4, но терминал должен быть рассчитан не только для алготрейдинга.
Пора что-то пересматривать и менять.
Прошу не принимать написанное - оскорблением!
Предполагаю, что при движении мышкой, происходит всплеск событий, которые обрабатывает эксперт.
При этом, если эксперт создаёт слишком большое число комманд чарту (загружает очередь чарта), то он получает пенальти, чтобы не произошло переполнение очереди комманд чарта.
Да так и есть, чем быстрее двигать мышью тем больше задержка, тоже самое есть очень быстро крутить колесо мышки, при наличии вызовов ChartGetInteger()
среднее время примерно доходит до ~0.019 сек.
Без вызов ChartGetInteger() ~0.0009 сек.
Вот пример без канваса и ресурса
Колесо, среднее время 0.0008
Перемещение левой кнопкой, среднее время 0.013
MT4 вне конкуренции :) Хоть мышкой со сверхзвуковой скоростью, хоть не мышкой, хоть чем двигай график , среднее время 0.000004
А вот без использования ChartGetInteger() в CHARTEVENT_CHART_CHANGE МТ5 нагибает МТ4 :)
...
А вот без использования ChartGetInteger() в CHARTEVENT_CHART_CHANGE МТ5 нагибает МТ4 :)
Только проблема в том, что ChartGetInteger() используется в большинстве случаев
Кстати, проверте мой пример выше.
У меня без разницы, мышкой или колесиком.
Есть у вас разница, такая же, нужно только замер делать не в основной программе, а в iCanvas.mqh -> void ChartChanged(), потому он у вас отдельно выполняется, до Draw() в основной программе
Ilyas, сейчас имея возможно писать кроссплатформенные коды, можно сравнить скорость отработки кода.
К сожалению, работа с графикой и обработкой событий в мт5 желает быть лучшей, хотя-бы на уровне мт4, который это обрабатывает в разы быстрее при одинаковых условиях.
Я не в курсе что и где под "капотом", но результат виден на графике. Согласен, торговые события в мт5 превосходят мт4, но терминал должен быть рассчитан не только для алготрейдинга.
Пора что-то пересматривать и менять.
Прошу не принимать написанное - оскорблением!
В экспертах MT4 всегда была копия графика и его свойств. Именно этим объясняется скорость доступа к свойствам графика, в том числе и к объектам.
Обработка событий всегда и везде асинхронна. И вы можете, например, отключить поступление событий от мыши, тогда другие события будут обрабатываться несколько быстрее. Вот события прихода тиков отключить никак нельзя. А вы когда нибудь сравнивали скорости тиковых потоков в четвёрке и пятёрке? А ещё стаканы цен и торговые события, которые в пятёрке гораздо сложнее, чем в четвёрке