Рисование в другом окне

 

Здравствуйте, совсем недавно начал изучать MQL4, поэтому еще не знаю многих возможностей. В связи с этим вопрос к специалистам (может подобная тема уже обсуждалась, простите, не смог найти): как можно нарисовать вертикальную линию в другом окне (графике) (имеется hwnd этого окна)? Теоретически можно через PostMessage с кодом 33260, но я не понимаю что в последнем параметре указывать, я так понимаю это позиционирование на графике. У кого есть какие идеи, буду рад.

Если кому-то интересно "для чего", то хочу сделать такую фичу: когда провожу детальное исследование и смотрю, например историю цены на 5 минутном графике, то хочу выделить на графике со старшим таймфреймом (например 30 мин или часовом) двумя вертикальными линиями как бы viewport, ту область просмотра которую сейчас охватывает 5-тиминутный график. Это позволяет более наглядно проводить анализ, видя и общую картину на "старшем" графике и детально его кусочек. При скролинге 5-минутного графика, линии обозначающие viewport на "старшем" графике тоже будут смещаться. Основная загвоздка сейчас это как нарисовать эти вертикальные линии.

P.S. делаю все из индикатора.

 

Хорошая идея.

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

Через GV передаете 3 значения: два времени и размер ТФ открытого окна. Вертикали строим только для старших ТФ.

Еще понадобится скрипт-триггер (или 2 скрипта) для фиксации данных, т.е., для предотвращения ненужного изменения GV при переходе в окно старшего ТФ для просмотра результатов.

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

PS Хотелось-бы увидеть в Code Base.

 

https://www.mql5.com/ru/code/9507

Как минимум. Стоит только поискать.

 
tara:

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


tara, спасибо за идеи. Да, я думал через глобальные переменные, но если есть возможность рисовать и управлять на "чужом" графике объекты, то пропадает много геморроя, таких как защита от изменения, эммулирование тиков и для старших таймфреймов, лишние скрипты для фиксации и прочее. Да и всю кухню можно будет инкапсулировать в одном индикаторе, а не размазывать функционал по всему терминалу ну и прочие положительные фишки. Весь вопрос в том можно или нет таким способом как хочется. Если нет, тогда уже думать буду над альтернативными путями. Вопрос все еще открыт и актуален.
 
Рустам, чуток другой функционал.
 
FAQ:

https://www.mql5.com/ru/code/9507

Как минимум. Стоит только поискать.


Я знал!!! Я знал, что я не одинок в своем желании :))) FAQ, большое человеческое спасибо за наводку!
 
tara:
Рустам, чуток другой функционал.


почему?

Позволяет ставить (и управлять) сразу на всех графиках соответствующие одному времени вертикальные линии (для удобства восприятия интересующих отрезков времени)

вроде ж то что мне и надо?

Отредактировано: да, немного другой. Ну, хоть посмотрю как там реализовано. Если все сделаю, то могу выложить тоже в статье, если будет интересно другим.

 
Поройтесь в кодбейзе, там подобного еще несколько вариантов лежит.
 
Xenon:

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

Ответ зависит от того, правильно ли я Вас понял.

Схема, мною изложенная, подразумевает наличие скрытого индикатора в каждом окне, фактически - некой надстройки МТ4 через шаблон.

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

Альтернатива - фиксированное управляющее окно, наверное.

 
tara:

Ответ зависит от того, правильно ли я Вас понял.

Схема, мною изложенная, подразумевает наличие скрытого индикатора в каждом окне, фактически - некой надстройки МТ4 через шаблон.

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

Альтернатива - фиксированное управляющее окно, наверное.


Да, общую идею уловили правильно. Детали уже можно реализовывать с разными вариациями, я сейчас даже не знаю точно как лучше, либо как Вы описали либо сделать отрисовку viewport'а только на всех старших таймфреймах. Например, у меня по каждой валютной паре открыто 5 графиков с таймфреймами: 1, 5, 15, час, день. Если активен график минутки, то область просмотра отрисовывается на всех более старших таймфреймах (либо на +2 порядка, т.е. 5 и 15, чтобы на часовиках и днях не было двух сплошных линий). Если я делаю активным окно 15, то на 5 и 15 мин viewport пропадает, теперь отображается на часе и днях. Вообще это надо поработать и уже на практике подобрать наиболее удобный вариант. В любом варианте, в принципе, все равно надо вешать скрытый индикатор на каждый график, одним скрытым индикатором не обойтись. Чем больше думаю, тем больше склоняюсь к глобальным переменным, как Вы и советовали. Еще посмотрю на реализацию в примере который Рустам показал, может новые идеи появятся. К сожалению началась новая торговая неделя, времени особо на такие фишки нету. Скорее всего либо ближе к выходным либо вообще на выходных займусь.
 
А не легче ли накинуть на младший график индикатор отрисовывающий старшие ?