![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Оно не "убрано" и не "нарисовано" - оно "подвинуто" на свои места.
Уй, не рассказывайте мне это - там прорисовано не в том месте. После переключения таймфреймов удалено и прорисовано как положено.
А вот то, что я говорил о тиках - о режиме работы в онлайне. Смотрите, кинул индикатор на график. Прошлов ремя - щёлкнул по запущенному ранее трминалу. Новых прорисовок нет.
Щёлкнул М5 и снова М1. Результат:
И вот ещё (конец графика):
А вот то, что я говорил о тиках - о режиме работы в онлайне. Смотрите, кинул индикатор на график. Прошлов ремя - щёлкнул по запущенному ранее трминалу. Новых прорисовок нет.
Щёлкнул М5 и снова М1. Результат:
И вот ещё (конец графика):
ObjectsDeleteAll надо также ставить в OnInit..Потому как при переключении ТФ были ситуации когда срабатывал сначала OnInit на новом ТФ, а потом уже OnDeinit на старом.
Плюс (точнее минус) могут удалится не все объекты.
И про ChartRedraw не забывать. ObjectsDelete лишь помечает объекты для удаления, физически они будут стёрты только при ChartRedraw. (с созданием/прорисовкой так-же - ObjectCreate, ObjectSetXXX только меняют внутренние структуры).
Скорее всего вы где-то упустили ChartRedraw. Поэтому прорисовалось только после переключения ТФ.
PS/ крайне не рекомендую что-то рисовать или активно взаимодействовать с объектами внутри OnTick,OnCalculate..только OnChartEvent и OnTimer. Все взаимодействия с объектами мучительно долго происходят, потому что они синхронные.
Можно невзначай самому себе устроить весёлую жизнь огребая REQUOTE на ровном месте
ObjectsDeleteAll надо также ставить в OnInit..Потому как при переключении ТФ были ситуации когда срабатывал сначала OnInit на новом ТФ, а потом уже OnDeinit на старом.
Плюс (точнее минус) могут удалится не все объекты.
И про ChartRedraw не забывать. ObjectsDelete лишь помечает объекты для удаления, физически они будут стёрты только при ChartRedraw. (с созданием/прорисовкой так-же - ObjectCreate, ObjectSetXXX только меняют внутренние структуры).
Скорее всего вы где-то упустили ChartRedraw. Поэтому прорисовалось только после переключения ТФ.
PS/ крайне не рекомендую что-то рисовать или активно взаимодействовать с объектами внутри OnTick,OnCalculate..только OnChartEvent и OnTimer. Все взаимодействия с объектами мучительно долго происходят, потому что они синхронные.
Можно невзначай самому себе устроить весёлую жизнь огребая REQUOTE на ровном месте
Спасибо. Придётся всё же код чужого индикатора переписать - уйти от функции start() и внести изменения с учётом Ваших рекомендацй.
Вернул имя переменной снова MinTP - глюк вернулся. Чудесааааа. Переменная объявляется, затем принтуется. Промежуточных вхождений нет.
Поиск в справке по запросу MinTP ни чего не выдаёт.
объявленный тип переменной - input или extern
Я нашёл лекарство. Спасибо. Сообщение можно удалить.
Ваши рекомендации как помогли, так и не помогли. В окне чартов отрезки и стрелки перерисовываются корректно, в подокне индикатора - нет. Короче, дабы не мудрствовать лукаво, вставил в индикатор функцию, которая отслеживает образование нового бара. На первом тике код у меня удаляет все объекты, на втором перерисовывает все объекты по новой. Пожертвован 1 тик, зато глюков больше нет. Ещё раз спасибо.
ObjectsDeleteAll надо также ставить в OnInit..Потому как при переключении ТФ были ситуации когда срабатывал сначала OnInit на новом ТФ, а потом уже OnDeinit на старом.
Плюс (точнее минус) могут удалится не все объекты.
И про ChartRedraw не забывать. ObjectsDelete лишь помечает объекты для удаления, физически они будут стёрты только при ChartRedraw. (с созданием/прорисовкой так-же - ObjectCreate, ObjectSetXXX только меняют внутренние структуры).
Cпасибо, познавательно.
Случалось такое с одним индикатором когда при переключении ТФ все объекты исчезали спустя некоторое время, возможно с приходом нового тика.
Так получается ChartRedraw() нужно вставлять после любой операции с объектами (создание, удаление, изменение координат, цвета и т.п)?
А без ChartRedraw() когда изменения с объектами вступают в силу? С приходом нового тика?
Cпасибо, познавательно.
Случалось такое с одним индикатором когда при переключении ТФ все объекты исчезали спустя некоторое время, возможно с приходом нового тика.
Так получается ChartRedraw() нужно вставлять после любой операции с объектами (создание, удаление, изменение координат, цвета и т.п)?
А без ChartRedraw() когда изменения с объектами вступают в силу? С приходом нового тика?
Когда будет перерисовка без вызова ChartRedraw не освещено в документации и не упоминалось на форуме. "когда-нибудь" ;-) то есть внутреннее дело терминала и зависит от билда
надо вызывать после любых операций с объектами. То есть провёл пачку манипуляций, вызвал ChartRedraw. Даже после ObjectsDeleteAll() в OnDeinit();
ChartRedraw в свою очередь или перерисует сразу или выставит флаг "перерисовать при первой возможности" (как минимум при выходе из OnXXXX), то есть его можно вызывать часто.
Хинт: перерисовка физически дело небыстрое, поэтому если поставить постоянный вызов ChartRedraw() в OnTick() может слегка замедлить излишне быстрый визуальный тестер.