Поиск окна, в котором делаются графические построения.

 

Возникла следующая проблема.

Необходимо вывести в одном окне два экземпляра одного индикатора с разными настройками.

Названия индикаторов выстраиваются в линию в верхнем левом углу. Каждый индикатор делает свои графические построения. С помощью функции WindowFind производится поиск окна, в котором должны выполняться построения. Первый индикатор (его имя QTA EURGBP H4 | 0/12/8/3) выводит свои построения в окно. Второй индикатор (его имя QTA EURGBP D1 | 6/1440/12/8/3) не находит окно, в котором он выведен.

Вопрос. Как узнать имя окна? То есть имеется ли возможность вывода списка имен всех открытых окон. Если будет список имен, то поиском заданной подстроки в имени окна можно найти дескриптор окна.

++=================++

Или необходимо подключать #import "user32.dll" или "gdi32.dll" ?

 

Может быть причины в этом:

WindowFind() возвращает -1, если пользовательский индикатор ищет сам себя в процессе инициализации init(). ?

Без кода трудно сказать.

По количеству окон: справку узаем

int WindowsTotal ( )
Возвращает количество окон индикаторов на графике, включая главное окно графика.
Пример:
Print("Количество окон = ", WindowsTotal());

 

Не в процессе инициализации. Функция WindowFind() на ходится в секции start()

Это бывает, когда несколько экземпляров индикатора в одном окне открывается.

Если все экземпляры индикатора открываются в разных окнах, то все работает нормально.

 

Мне кажется так:

Повторюсь: без кода мы играем в "угадай что я написал и помоги исправить"/ Игра чрезвычайно интересная но трудная на столько же.

Исходя из того что я вижу на картинке, представляю более простой вариант решения.

Создается 1 индикатор с 2-мя выводимыми на график буферами.

в 1 буфер забиваем 1 индикатор, во 2 соответственно второй. При равном порядке значений (?) все будет окей.

Но опять же я не уверен в правильности своего предложения так как нет кода.

В угадайку играть неохота.

 

Здесь нет буферов. Что выводится через буферы - зигзаги - рисуется нормально. А вот графические построения.

А код - пожалуйста. В приаттаченном файле. Весь комплект здесь: http://forex.kbpauk.ru/showflat.php/Cat/0/Number/194159/Main/114734/#Post194159

Файлы:
qta_v2.mq4  76 kb
 
один вариант - делать внешнюю переменную для IndicatorShortName() и задавать одинаковое имя для двух индикаторов.
 

Вариант еще один.

Если надо вывести несколько комплектов в одном окне, то выводить их в первом окне под графиком.

Для этого делается поиск окна. Если окно не находится, то принудительно задается номер окна=1.

Этот вариант сделал. Он работает. Но как-то это не изящно.

 
nen:

Вариант еще один.

Если надо вывести несколько комплектов в одном окне, то выводить их в первом окне под графиком.

Для этого делается поиск окна. Если окно не находится, то принудительно задается номер окна=1.

Этот вариант сделал. Он работает. Но как-то это не изящно.



Не изящно что? Работает не так как должен?

Или способ решения проблемы Вам самому же не нравится?

 

Это не гибко. Только в одном окне можно вывести несколько экземпляров индикатора. В других окнах только по одному экземпляру.

Но это не все проблемы. Есть и другие. Другие проблемы будут решены, скорее всего, только в следующей версии - MQL5.

Не буду сейчас обсуждать другие проблемы. Они не смертельные. Хотя и доставляют неудобства.