Номер подокна индикатора - страница 2

 
Maxim Kuznetsov:

если пользователль открыл 2 (ДВА! или более) подокна с одним и тем-же индикатором с одинаковым "коротким именем", он-же юзер, ему можно..

то ChartWindowFind вернёт первый. А не тот из которого запущена.

И все метки отрисуются только на нём, а не на каждом :-(

В ините можно установить индикатору короткое имя, сделать ему какую-нибудь уникальную добавку.

 
Dmitry Fedoseev:

В ините можно установить индикатору короткое имя, сделать ему какую-нибудь уникальную добавку.

   string IndicatorName="Rates";
   int wind=WindowFind(IndicatorName);

 
Renat Akhtyamov:

   string IndicatorName="Rates";
   int wind=WindowFind(IndicatorName);

Та-дам...в OnInit  ChartWindowFind(indicatoirName)  возвращает 0

в общем рецепт остался прежним:

- при первом вызове OnCalculate индикатору заведомо уникальное имя (от рандома или GetTickCount...)

- или сами или через ChartWindowFind ищем этот уник

- возвращаем имя обратно на читаемое

кстати так можно заодно выяснить запущен индикатор на чарте или через iCustom

 
Maxim Kuznetsov:

Та-дам...в OnInit  ChartWindowFind(indicatoirName)  возвращает 0

в общем рецепт остался прежним:

- при первом вызове OnCalculate индикатору заведомо уникальное имя (от рандома или GetTickCount...)

- или сами или через ChartWindowFind ищем этот уник

- возвращаем имя обратно на читаемое

кстати так можно заодно выяснить запущен индикатор на чарте или через iCustom

вообще то WindowFind а не ChartWindowFind
 
Renat Akhtyamov:
вообще то WindowFind а не ChartWindowFind

Примечание

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

 
Maxim Kuznetsov:

Та-дам...в OnInit  ChartWindowFind(indicatoirName)  возвращает 0

...

Не надо в ините искать, надо в OnCalculate. В процессе работы номер может измениться. Например, был на графике какой-то индикатор в подконе, после него присоединили свой, а потом первый сняли.

 
Taras Slobodyanik:

Примечание

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

ну это у кого как получается

если наименование индикатора тождественно совпадает, то корректно все работает

пример кода выцарапан из рабочего индюка

ну и верно пишет Дмитрий, не в ините
 
Maxim Kuznetsov:

должен-же быть более простой способ

Должен быть рабочий способ, остальное - не важно. Оформите код в виде mqh и забудьте про реализацию.

 
Maxim Kuznetsov:

если пользователль открыл 2 (ДВА! или более) подокна с одним и тем-же индикатором с одинаковым "коротким именем", он-же юзер, ему можно..

то ChartWindowFind вернёт первый. А не тот из которого запущена.

И все метки отрисуются только на нём, а не на каждом :-(

Хоть 10 штук

ChartWindowFind();   // без передаваемых параметров

Вернет то окно в котором он находится!

 
в ините по имени  проверить есть ли уже копии этого-же индюка, если есть то к имени индюка добавить +1, и тогда у тебя будет получаться что каждая копия будет с именем : индюк1,индюк2, индюк3 и так далее.
Причина обращения: