Сдвиг линии индикатора с помощью PLOT_SHIFT отображается неверно

 

Перевожу один индюк с MT4 на MT5. В нем используется смещение линии по времени вправо-влево в зависимости от параметров. В коде написано, например:

PlotIndexSetInteger(0, PLOT_SHIFT, ForecastBars - LastBar);

 Соответственно, когда LastBar = 0, сдвиг получается вправо (положительный), и это работает нормально. Когда LastBar > ForecastBar, т.е. делается проверка прогнозирования в прошлой истории, линия индикатора рисуется на неверных барах. Например, если ForecastBars = 10, а LastBar = 100, то вместо ожидаемого смещения -90 я получаю -10. Вот скриншот:

 

Красная вертикальная прямая обозначает бар, где должна была бы находиться кривая. Важно, что неверно только отображение. Если открыть окно данных и навести курсор мыши на бары справа от красной вертикальной линии, то видно, что данные в буфере содержатся правильные (также выводится всплывающая подсказка, как видно на скриншоте). Не понятно только, почему индикаторная линия отображается не на месте. 

Кто-нибудь сталкивался с таким? Как исправить? Наблюдается на всех последних билдах, включая 815.

 
marketeer:

Перевожу один индюк с MT4 на MT5. В нем используется смещение линии по времени вправо-влево в зависимости от параметров. В коде написано, например:

 Соответственно, когда LastBar = 0, сдвиг получается вправо (положительный), и это работает нормально. Когда LastBar > ForecastBar, т.е. делается проверка прогнозирования в прошлой истории, линия индикатора рисуется на неверных барах. Например, если ForecastBars = 10, а LastBar = 100, то вместо ожидаемого смещения -90 я получаю -10. Вот скриншот:

 

Красная вертикальная прямая обозначает бар, где должна была бы находиться кривая. Важно, что неверно только отображение. Если открыть окно данных и навести курсор мыши на бары справа от красной вертикальной линии, то видно, что данные в буфере содержатся правильные (также выводится всплывающая подсказка, как видно на скриншоте). Не понятно только, почему индикаторная линия отображается не на месте. 

Кто-нибудь сталкивался с таким? Как исправить? Наблюдается на всех последних билдах, включая 815.

... gpwr'у привет.
 

Еще привет gpwr'у...

Немного оживил его fourier_extrapolator.

Можно двигать вертикальную линию и любоваться.

На чистоту/оптимальность/лаконичность добавленного кода не претендую.

Если параметр смещение в реалтайм - true, то при появлении новой свечи индикатор будет сдвигаться на текущую величину смещения.

 
Urain:
... gpwr'у привет.
Гы, вообще-то это другой индюк, хотя сетка взята у gpwr, за что ему большое спасибо. Однако, вопрос остался открытым. Я не вижу принципиальных различий в коде, а проблема остается: для моего индюка данные в окне данных выводятся для баров с правильным смещением, а кривулька рисуется неверно. Как такое может быть?
 
Усё. Причину нашел. У меня используется стиль рисования DRAW_SECTION. Если его поменять на DRAW_LINE, тогда все становится нормально. Теперь вопрос - это баг? Создавать заявку в СД? Лично я не вижу причины, по которой DRAW_SECTION не должен при необходимости рисоваться с отрицательным смещением.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
marketeer:
Усё. Причину нашел. У меня используется стиль рисования DRAW_SECTION. Если его поменять на DRAW_LINE, тогда все становится нормально. Теперь вопрос - это баг? Создавать заявку в СД? Лично я не вижу причины, по которой DRAW_SECTION не должен при необходимости рисоваться с отрицательным смещением.
ИМХО это баг, в СД.
 
marketeer:
Усё. Причину нашел. У меня используется стиль рисования DRAW_SECTION. Если его поменять на DRAW_LINE, тогда все становится нормально. Теперь вопрос - это баг? Создавать заявку в СД? Лично я не вижу причины, по которой DRAW_SECTION не должен при необходимости рисоваться с отрицательным смещением.
Руками нарисуйте и определитесь.  Кстати, а что у Вас с нулевым значением буферных индикаторов? 
 
У меня и DRAW_LINE при рисовании со смещением вперёд как-то криво работал. Пришлось шариками рисовать ( DRAW_ARROW ). Тоже не совсем без глюков, но в целом терпимо.
Причина обращения: