Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
17144
Alexey Volchanskiy  

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

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

Dmitry Fedoseev
43506
Dmitry Fedoseev  

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

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

Alexey Volchanskiy
17144
Alexey Volchanskiy  
Dmitry Fedoseev:

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

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

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

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

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

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

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

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

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

Maxim Kuznetsov
10171
Maxim Kuznetsov  
Alexey Volchanskiy:

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

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

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

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

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

Dennis Kirichenko
11377
Dennis Kirichenko  

Alexey Volchanskiy:

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

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

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

Alexey Viktorov
8051
Alexey Viktorov  
Alexey Volchanskiy:

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

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

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

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

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

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

Alexey Viktorov
8051
Alexey Viktorov  
Maxim Kuznetsov:

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

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

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