WindowFind() работает, но мало

 
WindowFind() находит только первые индикаторы в дополнительных окнах. Остальные упорно не видит.

То есть если загружено 12 индикаторов в основном окне и еще 6 в дополнительном, WindowFind(), вызванный 18 раз с названием каждого из загруженных индикаторов 17 раз вернет -1 и обнаружит только самый первый индикатор в дополнительном окне.

Что функция, вообще, должна искать? В документации про такое ограничение ничего нету.
 
Так как же найти, загружены или нет остальные загруженные индикаторы?
Это, что ли, нормальное поведение WindowFind()?
 

"Возвращает номер подокна графика, содержащего индикатор с указанным именем name, если он найден, иначе возвращается -1."

Поиск производится по первому имени, выведенному в верхней строке подокна. Если ищется второй, третий и т.д индикатор в подокне, то они не найдутся.

WindowFind не определяет, присутствует или нет тот или иной индикатор. Значение, возвращаемое этой функцией, используется для создания объектов. Поэтому просматривается только первый индикатор в подокне, так как именно он определяет масштаб горизонтальной сетки подокна.

 
stringo:

"Возвращает номер подокна графика, содержащего индикатор с указанным именем name, если он найден, иначе возвращается -1."

Поиск производится по первому имени, выведенному в верхней строке подокна. Если ищется второй, третий и т.д индикатор в подокне, то они не найдутся.

Жаль, уж больно узкая получаестя специализация. К тому же, не документированная должным образом.

WindowFind не определяет, присутствует или нет тот или иной индикатор. Значение, возвращаемое этой функцией, используется для создания объектов. Поэтому просматривается только первый индикатор в подокне, так как именно он определяет масштаб горизонтальной сетки подокна.

А что тогда опраделяет масштаб основного окна? Зачем определять его по первому индикатору в подокне, если он и так известен?
Опять же, как индикатор узнает, куда складывать объекты, если он не первый?

Проблема с функцией возникла вот почему.
Мне нужно определить, загружен или нет тот или иной индикатор.
Семафор на глобальной переменной подошел бы. Только как узнать тогда, работает индикатор сам по себе, или запускается через iCustom?

Очень надеюсь на Вашу помощь.
 

Масштаб основного окна определяет цена. По первому индикатору в подокне определяется масштаб этого подокна.

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

 
stringo:

Масштаб основного окна определяет цена. По первому индикатору в подокне определяется масштаб этого подокна.

Очевидно, тогда речь идет о вертикальном масштабе. Наверное, опечатка

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

Решение очевидное, но, к сожалению, не универсальное. Если бы я писал программы для себя, проблемы не было бы. Только сам я и так могу видеть, загружен индикатор или нет. А вот что там с головой и руками пользователя предугадать невозможно. Как показывает практика, может быть все, что угодно :)

Желательно было бы иметь логически полную функциональность WindowFind. К тому же, проблема с поиском подокна для объектов не первого индикатора остается. И она, наверное, даже более актуальна, хоть и всплыла здесь случайно.

Спасибо.
 

Я сказал: "масштаб горизонтальной сетки". А не горизонтальный масштаб.

Мы учтём пожелания в будущих разработках.

 
Irtron писал (а) >>
Очевидно, тогда речь идет о вертикальном масштабе. Наверное, опечатка

Решение очевидное, но, к сожалению, не универсальное. Если бы я писал программы для себя, проблемы не было бы. Только сам я и так могу видеть, загружен индикатор или нет. А вот что там с головой и руками пользователя предугадать невозможно. Как показывает практика, может быть все, что угодно :)

Желательно было бы иметь логически полную функциональность WindowFind. К тому же, проблема с поиском подокна для объектов не первого индикатора остается. И она, наверное, даже более актуальна, хоть и всплыла здесь случайно.

Спасибо.

Вот кстати говоря хочу поднять этот топик. Есть такая задача. Необходимо найти, сколько экземпляров индикатора прикреплено к тому или иному чарту и в том случае, если больше одного изменять значение одной переменной. WindowFind находит индекс только для первого экземпляра, который увидит. Остальные эта функция игнорирует. Что посоветуете в данном случае? И второй вопрос, вытекающий из первого. В идеале необходимо, чтобы были отловлены также все установленные на чарт предыдущие версии индикатора, скажем если они именуются короткими именами ind_v01, ind_v02, и т.п. А поиска по шаблону в параметре функции WindowFind также нет. И как это сделать? Вобщем какая-то функция получается недоделанная, как мне кажется.

 
поиск методом тыка, другого не предусмотрено.
-предполагаем имя индиктаора, проверяем есть/нет, предполагаем следующее имя))))
 
Korey писал (а) >>
поиск методом тыка, другого не предусмотрено.
-предполагаем имя индиктаора, проверяем есть/нет, предполагаем следующее имя))))

Ок, спасибо, вторую часть проблемы это пожалуй решит. Метод конечно не smart, но как я понимаю, другого нет. А как быть с первой частью проблемы? Как понять, сколько экземпляров одного и того же индикатора одной и той же версии согласно его short name запущено на чарте? А еще лучше изначально запретить пользователю навешивать его больше одного раза.

 

to Gans-deGlucker

WindowFind() ищет имя из IndicatorShortName()
проблема в том что эти имена изменяются в зависимости о параметров
например: IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");

здесь можно было бы перебирать в цикле возможные имена и подсчитывать по первой части имени "MACD("
однако, неизвеcтно сколько раз придется перебирать, так как не известно общее число индикаторов.
Т.е. МТ-4 это всего лишь терминал с ограниченныеми возможностями, но никак не система (много изъятий)
Вероятно есть способ хакнуть, и добраться до количества и имен индикаторов через дескрипторы окна....

но каждый раз приходится выбирать - что лучше: мирно торговать или ломать инструмент.

Причина обращения: