Управление индикатором.

 

Нужен совет.

Я управляю отображением линий индикатора на экране из советника.
Измение координат некоторого граф. объекта приводит к изменению значения GV. Это значение считывает индикатор и реагирует - снимает или отображает свои линии.

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

Ускорить момент отображения можно просто тыкнув мышкой на закладку соседнего окна вал. инстр. и снова на закладку своего окна. Такое действие приводит к моментальному отображению линий (как бы запускается старт индикатора). Однако это ручной способ.

Вопрос.
Существует ли какой-нибудь программный способ сократить паузу между моментом управляющего воздействия и моментом отображения линий?

 
https://docs.mql4.com/ru/objects/ObjectsRedraw ?
 
попробуй обновлять окно как в периодконверторе, правда сам не прбовал, но интересно получится или нет
hwnd=WindowHandle(Symbol(),i_period);
PostMessageA(hwnd,WM_COMMAND,33324,0);
 
Itso:
https://docs.mql4.com/ru/objects/ObjectsRedraw ?


ObjectsRedraw - это такая штука, кот. используется для моментального отображения граф. объектов.
Т.е. это - не то.
Кстати, функции доступа к объекту продолжают работать бесперебойно, независимо от того, использована эта ф-ия или нет. Она влияет только на моментальное отображение на экране.

Я говорил о другом. В сущности, мне нужно "скоренько" запутить старт индикатора. Там-то, внутри старта, всё само стработает, но вот как его запустить принудительно - не знаю. Может и никак.
 
Integer писал (а):
попробуй обновлять окно как в периодконверторе, правда сам не прбовал, но интересно получится или нет
hwnd=WindowHandle(Symbol(),i_period);
PostMessageA(hwnd,WM_COMMAND,33324,0);
Нет, к сожалению, это тоже не то.
 
Я тоже в такой ситуации изменял размеры окна с графиком, другого вариант нет.
 
Наверно нужно переработать кода так, что бы если было изменение граф. объекта сразу, на том же тике и менят линии.

Немного непонятно как такое у вас получается. Если изменение объекта меняет линию, а изменение линии в свою очередь меняет объект, то вскорее всего получится безконечный цикл, т.е. логика у вас неправильная.
 
Rosh:
Я тоже в такой ситуации изменял размеры окна с графиком, другого вариант нет.

Да, изменение размеров окна тоже приводит к таким результатам.
А как бы этот размер окна на секундочку поменять программно?
 
Теоретически, через вызов нужной dll (название не скажу [не помню], но из той же оперы, что дает вызов GetClientRect[ вобщем, графиеской]).
Спецы по Си или друомц языку (или промто по Винде) подскажут.
 
Itso:
Наверно нужно переработать кода так, что бы если было изменение граф. объекта сразу, на том же тике и менят линии.

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

Изменение координат объекта приводит к изменению значения GlobalVariable. Это - в советнике.
Изменение значения GlobalVariable распознаётся (в запущенном по приходу тика) старте индикатора и тогда там же, в индикаторе, запускается маленькая функция отображения (или снятия) линий.

Но пока старт индикатора не запущен (новым тиком или фактом изменения размера окна), разумеется, ничего в индикаторе и не происходит, т.к. он просто ждёт тик.

А изменение линии никаких объектов не меняет. Объект просто используется как кнопка: включил - выключил линии индикатора.
 
Кажеться проблема в порядка запуска индикатора и советника - кто первый сработает по прихода тика.

Я бы перенес всего кода для изображения в индикатор (и линии и объкты), а для советника только останеться читать индикатор через iCustom и торговать.