Новая версия платформы MetaTrader 4 build 1380 - страница 2

 
Оно не "убрано" и не "нарисовано" - оно "подвинуто" на свои места.
 
JRandomTrader #:
Оно не "убрано" и не "нарисовано" - оно "подвинуто" на свои места.

Уй, не рассказывайте мне это - там прорисовано не в том месте. После переключения таймфреймов удалено и прорисовано как положено.

 

А вот то, что я говорил о тиках - о режиме работы в онлайне. Смотрите, кинул индикатор на график. Прошлов ремя - щёлкнул по запущенному ранее трминалу. Новых прорисовок нет.

Щёлкнул М5 и снова М1. Результат:

И вот ещё (конец графика):


 
Vitaly Murlenko #:

А вот то, что я говорил о тиках - о режиме работы в онлайне. Смотрите, кинул индикатор на график. Прошлов ремя - щёлкнул по запущенному ранее трминалу. Новых прорисовок нет.

Щёлкнул М5 и снова М1. Результат:

И вот ещё (конец графика):


ObjectsDeleteAll надо также ставить в OnInit..Потому как при переключении ТФ были ситуации когда срабатывал сначала OnInit на новом ТФ, а потом уже OnDeinit на старом.

Плюс (точнее минус) могут удалится не все объекты.

И про ChartRedraw не забывать. ObjectsDelete лишь помечает объекты для удаления, физически они будут стёрты только при ChartRedraw. (с созданием/прорисовкой так-же - ObjectCreate, ObjectSetXXX только меняют внутренние структуры). 

Скорее всего вы где-то упустили ChartRedraw. Поэтому прорисовалось только после переключения ТФ.

PS/ крайне не рекомендую что-то рисовать или активно взаимодействовать с объектами внутри OnTick,OnCalculate..только OnChartEvent и OnTimer. Все взаимодействия с объектами мучительно долго происходят, потому что они синхронные.
Можно невзначай самому себе устроить весёлую жизнь огребая REQUOTE на ровном месте

 
Maxim Kuznetsov #:

ObjectsDeleteAll надо также ставить в OnInit..Потому как при переключении ТФ были ситуации когда срабатывал сначала OnInit на новом ТФ, а потом уже OnDeinit на старом.

Плюс (точнее минус) могут удалится не все объекты.

И про ChartRedraw не забывать. ObjectsDelete лишь помечает объекты для удаления, физически они будут стёрты только при ChartRedraw. (с созданием/прорисовкой так-же - ObjectCreate, ObjectSetXXX только меняют внутренние структуры). 

Скорее всего вы где-то упустили ChartRedraw. Поэтому прорисовалось только после переключения ТФ.

PS/ крайне не рекомендую что-то рисовать или активно взаимодействовать с объектами внутри OnTick,OnCalculate..только OnChartEvent и OnTimer. Все взаимодействия с объектами мучительно долго происходят, потому что они синхронные.
Можно невзначай самому себе устроить весёлую жизнь огребая REQUOTE на ровном месте

Спасибо. Придётся всё же код чужого индикатора переписать -  уйти от функции start() и внести изменения с учётом Ваших рекомендацй.

 
Vitaly Murlenko #:

Вернул имя переменной снова MinTP - глюк вернулся. Чудесааааа. Переменная объявляется, затем принтуется. Промежуточных вхождений нет.

Поиск в справке по запросу MinTP ни чего не выдаёт.

объявленный тип переменной - input или extern
 
Aleksey Semenov #:
объявленный тип переменной - input или extern

Я нашёл лекарство. Спасибо. Сообщение можно удалить.

 
Maxim Kuznetsov #:

Ваши рекомендации как помогли, так и не помогли. В окне чартов отрезки и стрелки перерисовываются корректно, в подокне индикатора - нет. Короче, дабы не мудрствовать лукаво, вставил в индикатор функцию, которая отслеживает образование нового бара. На первом тике код у меня удаляет все объекты, на втором перерисовывает все объекты по новой. Пожертвован 1 тик, зато глюков больше нет. Ещё раз спасибо.

 
Maxim Kuznetsov #:

ObjectsDeleteAll надо также ставить в OnInit..Потому как при переключении ТФ были ситуации когда срабатывал сначала OnInit на новом ТФ, а потом уже OnDeinit на старом.

Плюс (точнее минус) могут удалится не все объекты.

И про ChartRedraw не забывать. ObjectsDelete лишь помечает объекты для удаления, физически они будут стёрты только при ChartRedraw. (с созданием/прорисовкой так-же - ObjectCreate, ObjectSetXXX только меняют внутренние структуры). 

Cпасибо, познавательно.
Случалось такое с одним индикатором когда при переключении ТФ все объекты исчезали спустя некоторое время, возможно с приходом нового тика.
Так получается  ChartRedraw() нужно вставлять после любой операции с объектами (создание, удаление, изменение координат, цвета и т.п)?
А без  ChartRedraw() когда изменения с объектами вступают в силу? С приходом нового тика?

 
Grigori.S.B #:

Cпасибо, познавательно.
Случалось такое с одним индикатором когда при переключении ТФ все объекты исчезали спустя некоторое время, возможно с приходом нового тика.
Так получается  ChartRedraw() нужно вставлять после любой операции с объектами (создание, удаление, изменение координат, цвета и т.п)?
А без  ChartRedraw() когда изменения с объектами вступают в силу? С приходом нового тика?

Когда будет перерисовка без вызова ChartRedraw не освещено в документации и не упоминалось на форуме. "когда-нибудь" ;-) то есть внутреннее дело терминала и зависит от билда

надо вызывать после любых операций с объектами. То есть провёл пачку манипуляций, вызвал ChartRedraw. Даже после ObjectsDeleteAll() в OnDeinit();
ChartRedraw в свою очередь или перерисует сразу или выставит флаг "перерисовать при первой возможности" (как минимум при выходе из OnXXXX), то есть его можно вызывать часто.

Хинт: перерисовка физически дело небыстрое, поэтому если поставить постоянный вызов ChartRedraw() в OnTick() может слегка замедлить излишне быстрый визуальный тестер.