Почему происходит мерцание индикаторов (линий, стрелок, гистограмм) в биржевом терминале MT5? - страница 6

 
Andrey Khatimlianskii: Мысль возникла. Полный пересчет (и перерисовка) происходит, если prev_calculated = 0. Попробуйте вставить в начало ОнКалкулейт принт на этот случай и посмотреть, появляются ли принты при мигании. Если да, то нужно выяснять, из-за чего терминал сбрасывает счетчик в 0 (и можно об этом написать в сервис-деск). Если нет, то это тем более глюк и можно в сервис-деск отправить простой тестовый индикатор, условия для воспроизведения и короткое видео с демонстрацией.

Выше Вы предлагали аналогичное решение - вставить принт в функцию OnCalculate(), добавил, ничего неожиданного в журнале не появилось, идет нормальный процесс поступления и обработки поступления новых баров. Счетчики не сбрасывается, а моргание случаются.

 
Andrey Khatimlianskii:

Мысль возникла.

Полный пересчет (и перерисовка) происходит, если prev_calculated = 0. Попробуйте вставить в начало ОнКалкулейт принт на этот случай и посмотреть, появляются ли принты при мигании.

Если да, то нужно выяснять, из-за чего терминал сбрасывает счетчик в 0 (и можно об этом написать в сервис-деск).

Если нет, то это тем более глюк и можно в сервис-деск отправить простой тестовый индикатор, условия для воспроизведения и короткое видео с демонстрацией.

Короткая предыстория:

Когда-то я пытался переписать индикатор собирающий тики вверх и вниз раздельно в режиме реального времени с mql4 на mql5, но ничего не получилось по той причине, что индикатор периодически сбрасывал уже накопленные данные.  По этому вопросу общался с СД и они убедили меня что сброс идёт от того что prev_calculated сбрасывается в 0 и происходит пересчёт всей истории, а сброс происходит по причине потери связи с сервером.

Проведённые вчера эксперименты:

В первую очередь поставил Print() по условию... Не дождался, начал искусственно создавать потерю связи. Print() выполняется, но при этом индикатор не моргает.

ПКМ по графику и из контекстного меню "Обновить" тоже обнуляет prev_calculated, но индикатор не моргает. Решил посмотреть как влияет ChartRedraw на пересчёт индикатора, но результат нулевой... Никак не влияет, ни вписанный в сам индикатор, ни параллельно работающий индикатор с вызовом ChartRedraw.

Потом пытался найти чем можно заменить prev_calculated. Если вызывается какой либо технический индикатор, то prev_calculated можно заменить на BarsCalculated(handle), но если нет... не нашёл. В случае такой замены при обнулении prev_calculated индикатор не пересчитывается и не теряет своих расчётов.

В общем ничего путного найти не смог...

Бредовое предположение:

Не может быть так что теряется несколько тиков, потом с некоторым запозданием подгружаются и в этот момент происходит подмигивание?

 

Этот гистограмный биржевой индикатор на основе тиков у кого-нибудь мерцает?

Мне удалось увидеть постоянное мерцание индикатора всего один раз (на открытии рынка) и только в панели CTRL+D, сами гистограммы не показали мерцания (возможно, из-за отсутствия GPU). Воспроизвести повторно для записи видео не получилось.


Биржевой эффект должен наблюдаться на быстром рынке. Надо дождаться, когда раскочегарится биржа, тогда, скорее всего, получится записать мерцание. Либо же предлагаю поставить терминал на постоянную запись нескольких часов. А затем вырезать кусок, где мерцание особенно заметно.

 
Не стоит заблуждаться, что сброс счетчика (или правка тика "задним числом") - единственный случай, когда терминал перерисовывает чарт. Логика там, скорее всего, учитывает кучу прочих факторов, про которые мы не в курсе. Я забил на эту проблему в силу случайности воспроизведения и трудностей общения, которые обычно возникают в сервис-деске.
 
Stanislav Korotky: Не стоит заблуждаться, что сброс счетчика - единственный случай, когда терминал перерисовывает чарт. Логика там, скорее всего, учитывает кучу прочих факторов, про которые мы не в курсе. Я забил на эту проблему в силу случайности воспроизведения и трудностей общения, которые обычно возникают в сервис-деске.

Вот и я прихожу к такому же заключению. Скорее всего, это внутренние дела, которые они не будут афишировать, и мы об истинных причинах вообще никогда не узнаем. А свое отношение к этому вопросу разработчики неявно, но высказали, так ни разу и не появившись в этой ветке. Хотя могли бы внести ясность...

 

Индикатор ЗЗ из поставки пропал в оффлайне на пару секунд - так что дело не в тиках.

 
Eugene Myzrov:

Выше Вы предлагали аналогичное решение - вставить принт в функцию OnCalculate(), добавил, ничего неожиданного в журнале не появилось, идет нормальный процесс поступления и обработки поступления новых баров. Счетчики не сбрасывается, а моргание случаются.


Я не читал предыдущие страницы, вам ответили на вопрос? Если нет то вот вам решение, попробуйте увеличьте количество буферов, у вас неправильное количество стоит, поэтому мигает.
 
Roman Vashchilin:

Я не читал предыдущие страницы, вам ответили на вопрос? Если нет то вот вам решение, попробуйте увеличьте количество буферов, у вас неправильное количество стоит, поэтому мигает.

 

В стандартном ЗЗ так же не правильное количество буферов стоит?
 
Roman Vashchilin: Я не читал предыдущие страницы, вам ответили на вопрос? Если нет то вот вам решение, попробуйте увеличьте количество буферов, у вас неправильное количество стоит, поэтому мигает.

Почему Вы считаете, что "неправильное количество буферов стоит, поэтому мигает"? Если я использую 2 буфера и 2 массива, то я и укажу соответственно

#property   indicator_buffers 2
#property   indicator_plots   2

Почему я должен указывать кол-во буферов больше, чем мне необходимо, т.е. больше двух?

 
Eugene Myzrov:

Почему Вы считаете, что "неправильное количество буферов стоит, поэтому мигает"? Если я использую 2 буфера и 2 массива, то я и укажу соответственно

Почему я должен указывать кол-во буферов больше, чем мне необходимо, т.е. больше двух?


А, если они соответствуют, то не надо изменять.