Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
подготовил для демонстрации некий вариант говнокода) но в мт4 все плавно и быстро, в мт5 ужас.
хорошо, я сейчас загляну в ваш файл и попробую реализовать через мой iCanvas для наглядности
хорошо, я сейчас загляну в ваш файл и попробую реализовать через мой iCanvas для наглядности
начинаем с профилирования и получаем картину, подтверждающую мои слова
подготовил для демонстрации некий вариант говнокода) но в мт4 все плавно и быстро, в мт5 ужас.
вижу еще одну Вашу симантическую ошибку, которая увеличивает расчет в то колличество раз, сколько бар текущего периода помещается в одном дне.
Сейчас исправлю и выкину все лишнее, кода будет в разы меньше
мне нужно минут 10
вижу еще одну Вашу симантическую ошибку, которая увеличивает расчет в то колличество раз, сколько бар текущего периода помещается в одном дне.
вот о чем речь
было:
надо:
В результате ваш код состоял из 496 строк кода и жутко лагал по двум причинам - безбашенное использование функций ChartGet и XY функций, а так же серьезная логическая ошибка, которая дублировала многократно одну и ту же работу
Мой код состоит из 64 строк кода ( по факту моего кода лишь 19 строк, остальное шаблонная нахлабуда) и все летает
на M1 время формирования канваса 0,5 миллисекунд, на M15 - 1 мс, на H2 - 5-7 мс
Сделал замер в исходном индикаторе на видео через GetMicrosecondCount. и результат разделил на 1000.
13-54 мс разве этого врени не достаточно чтобы успевать обновлять канвас без лишних миганий? ене понимаю, ну да ChartPriceToXY часто используется для определения начала дня, месяца, недели на графике в координаты. Но без нее никак.
У вас такая функция int XYToTimePrice(int x,int y,datetime &Time,double &Price,int id=0)
а обратная функция есть из цены\время в координаты?
Сделал замер в исходном индикаторе на видео через GetMicrosecondCount. и результат разделил на 1000.
13-54 мс разве этого врени не достаточно чтобы успевать обновлять канвас без лишних миганий? ене понимаю, ну да ChartPriceToXY часто используется для определения начала дня, месяца, недели на графике в координаты. Но без нее никак.
У вас такая функция int XYToTimePrice(int x,int y,datetime &Time,double &Price,int id=0)
а обратная функция есть из цены\время в координаты?
https://www.mql5.com/ru/code/22164
13-54 мс разве этого врени не достаточно чтобы успевать обновлять канвас без лишних миганий?
миганий не должно быть даже при более длительном формировании кадра.
Мигания могут быть из-за неправильной установки Upgrade(), лишней, или не в то время.
Также могут быть, если вы кроме объекта канваса используете другие объекты, т.к. их перерисовка не входят в замер, и они живут своей отдельной жизнью, в MT5 для них своя отдельная очередь, к которой программист не имеет доступа даже для того чтобы ее замерить.
миганий не должно быть даже при более длительном формировании кадра.
Мигания могут быть из-за неправильной установки Upgrade(), лишней, или не в то время.
Также могут быть, если вы кроме объекта канваса используете другие объекты, т.к. их перерисовка не входят в замер, и они живут своей отдельной жизнью, в MT5 для них своя отдельная очередь, к которой программист не имеет доступа даже для того чтобы ее замерить.
готово.
В результате ваш код состоял из 496 строк кода и жутко лагал по двум причинам - безбашенное использование функций ChartGet и XY функций, а так же серьезная логическая ошибка, которая дублировала многократно одну и ту же работу
Мой код состоит из 64 строк кода ( по факту моего кода лишь 19 строк, остальное шаблонная нахлабуда) и все летает
на M1 время формирования канваса 0,5 миллисекунд, на M15 - 1 мс, на H2 - 5-7 мс
я поставил крайний правый дневной бар равный 0.
Но правильнее для производительности, конечно так, особенно если скролить влево: