Новая версия платформы MetaTrader 5 build 1870: Добавление символов в Обзор рынка по ISIN - страница 9
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На обычных чартах ChartRedraw() принудительно происходит каждый тик.
Получается, на кастомных - тик не приводит к принудительному обновлению чарта!?
Или, может, просто тика на кастомном не было, потому видели удаленный объект?
Да, дело в тиках. На оффлайн-терминале и на обычных символах удаления не происходит.
Но речь не только об отображении объекта на чарте, но и о программном его наличии. Т.е. после любого количества успешных ObjectDelete объект все равно находится через ObjectFind.
Но речь не об отображении объекта на чарте, а о программном его наличии. Т.е. после любого количества успешных ObjectDelete объект все равно находится через ObjectFind.
дело в том, что (https://www.mql5.com/ru/docs/objects)
Функции, задающие свойства графических объектов, а также операции создания ObjectCreate() и перемещения ObjectMove() объектов на графике фактически служат для отправки команд графику. При успешном выполнении этих функций команда попадает в общую очередь событий графика. Визуальное изменение свойств графических объектов производится в процессе обработки очереди событий данного графика.
По этой причине не следует ожидать немедленного визуального обновления графических объектов после вызова данных функций. В общем случае обновление графических объектов на чарте производится терминалом автоматически по событиям изменения - поступление новой котировки, изменения размера окна графика и т.д. Для принудительного обновления графических объектов используйте команду на перерисовку графика ChartRedraw().
может!
Спасибо! Придумать надо заплатку.
Чарт минутный - по идеи там больше 2000 баров...
Добавил: Или не в этом дело?Спасибо! Придумать надо заплатку.
Чарт минутный - по идеи там больше 2000 баров...
Я там поторопился с ответом... Не заметил, что идет вычитание 1000.
Разработчикам - полная версия индикатора есть в заявке в сервисдеск Открыта, Начата: 2018.05.15 15:15, #2033625
Ранее там так же был баг, но с крашением терминала - я так и не понял, что от меня ждут...
Я там поторопился с ответом... Не заметил, что идет вычитание 1000.
Понял.
дело в том, что (https://www.mql5.com/ru/docs/objects)
После ObjectDelete объект не просто виден, но может перемещаться мышкой, виден в списке CTRL+B со своими свойствами.
Но стоит после ObjectDelete сделать ObjectFind этого же объекта, как он исчезает и визуально и из списка CTRL+B.
Как наглядный пример ситуации, можно запустить этот индикатор с таким OnDeinit
После ObjectDelete объект не просто виден, но может перемещаться мышкой, виден в списке CTRL+B со своими свойствами.
Но стоит после ObjectDelete сделать ObjectFind этого же объекта, как он исчезает и визуально и из списка CTRL+B.
Как наглядный пример ситуации, можно запустить этот индикатор с таким OnDeinit
ObjectFind() - какая-то крайне медленная функция, от нее, по возможности, вообще лучше отказываться...
ObjectFind() - какая-то крайне медленная функция, от нее, по возможности, вообще лучше отказываться...
Если вы посмотрите Примечание к https://www.mql5.com/ru/docs/objects/objectfind, то увидите
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду, если ведется работа с большим количеством объектов на графике.
При переименовании графического объекта одновременно формируются два события, которые можно обработать в эксперте или индикаторе функцией OnChartEvent():
После ObjectDelete объект не просто виден, но может перемещаться мышкой, виден в списке CTRL+B со своими свойствами.
Но стоит после ObjectDelete сделать ObjectFind этого же объекта, как он исчезает и визуально и из списка CTRL+B.
Тоже указано в Примечании https://www.mql5.com/ru/docs/objects/objectdelete
При вызове ObjectDelete() всегда используется асинхронный вызов, поэтому функция возвращает только результат постановки команды в очередь графика. В этом случае true означает только то, что команда успешно поставлена в очередь, сам результат её выполнения неизвестен.
Для проверки результата выполнения можно использовать функцию ObjectFind() или любые функции, запрашивающие свойства объекта, например вида ObjectGetXXX. Но при этом следует иметь в виду, что такие функции ставятся в конец очереди команд графика и дожидаются результата выполнения (так как являются синхронными вызовами), то есть могут быть затратными по времени. Нужно иметь это обстоятельство в виду, если ведется работа с большим количеством объектов на графике.