Как внутри индикатора узнать, что он вызван через iCustom?

 

Как определить внутри индикатора, работает ли он на графике или его вызывают через iCustom?

Конкретно сейчас нужно решение под MQL4, но если есть решение под пятерку, тоже пишите  плз.

 

В индикаторе сделать внешнюю переменную типа CalledFromEA=false;

При вызове из советника ставить true.

 
Dmitry Fedoseev:

В индикаторе сделать внешнюю переменную типа CalledFromEA=false;

При вызове из советника ставить true.

Я пока сделал параметр в индикаторе по типу вашей идеи, задаю его значение при вызове через iCustom. Думал, может, есть какие-то способы узнать это без внешних указаний.
 
Alexey Volchanskiy:
Я пока сделал параметр в индикаторе по типу вашей идеи, задаю его значение при вызове через iCustom. Думал, может, есть какие-то способы узнать это без внешних указаний.

перебрать индикаторы чарта, и если твоего там нет, значит он вызван через iCustom

 
Индикаторы могут быть на другом символе и/или таймфрейме
 
Maxim Kuznetsov:

перебрать индикаторы чарта, и если твоего там нет, значит он вызван через iCustom

Ок, если нет, то понятно - через iCustom. А если есть?

Во вторых, Dmitry Fedoseev верно заметил, что может быть открыт еще один чарт с таким же символом и этим индикатором.

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

 
Alexey Volchanskiy:

Ок, если нет, то понятно - через iCustom. А если есть?

Во вторых, Dmitry Fedoseev верно заметил, что может быть открыт еще один чарт с таким же символом и этим индикатором.

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

когда-то делал именно так, хотя это значительно муторнее чем просто передать флажок "рисовать/нерисовать".

и кстати, без разницы сколько открыто чартов - по ChartIndicatorsTotal() и ChartIndicatorName() всё равно перебираешь только для конкретного чарта.

 

Alexey Volchanskiy:

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

Алексей, имхо, это интересный вариант решения проблемы - контролировать источник вызова индикатора ради какой-то лейблы :-))

Скромное мнение такое. Индикатор при запуске на график делает проверку по имени всех объектов текущего чарта. Если попадается подобная лейбла, то удалять её или не создавать новую, а работать со старой...

 
Alexey Volchanskiy:

Ок, если нет, то понятно - через iCustom. А если есть?

Во вторых, Dmitry Fedoseev верно заметил, что может быть открыт еще один чарт с таким же символом и этим индикатором.

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

Что-то очевидное невероятное... Если lable создаётся в индикаторе, то он имеет своё уникальное имя. Соответственно если вызвать индикатор второй раз, то lable с таким-же именем не должен создаваться, не так-ли?
 
Alexey Viktorov:
если вызвать индикатор второй раз, то lable с таким-же именем не должен создаваться, не так-ли?

индикатор может и должен задавать (в меру)уникальные имена своим объектам. Именно для случая что если юзер загрузит два экземпляра, чтобы граф.элементы обоих были видны.

И  конечно начинается свистопляска с дубликатами, iCustom и шаблонами(внезапно в туда сохраняться и объекты сделанные индикатором). Ещё и учитывая что при смене таймфрейма (по крайней мере) на некоторых билдах индикаторы при загрузке "двоились". То есть существует пачка нюансов которые без тщательного тестирования не выявляются.

 
Maxim Kuznetsov:

индикатор может и должен задавать (в меру)уникальные имена своим объектам. Именно для случая что если юзер загрузит два экземпляра, чтобы граф.элементы обоих были видны.

И  конечно начинается свистопляска с дубликатами, iCustom и шаблонами(внезапно в туда сохраняться и объекты сделанные индикатором). Ещё и учитывая что при смене таймфрейма (по крайней мере) на некоторых билдах индикаторы при загрузке "двоились". То есть существует пачка нюансов которые без тщательного тестирования не выявляются.

Только надо-бы обратить внимание на то, что Алексей не просто юзер, а опытный программист и завтра со свежей головы найдёт ошибку и посмеётся... Или найдёт баг и обратится в сервисдеск.
Причина обращения: