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

 
Alexey Volchanskiy:

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

Через параметр.

Но не обязательно через свой собственный, можно хитрить. Например, если есть настройка цвета или шрифта (которые при вызове из советника не нужны), можно через нее передать секретный код, который поймет индикатор.

 
Alexey Volchanskiy:

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

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

Писал по этому поводу заявку 2014.06.11 14:44#1025934.

Насколько я понимаю, сейчас в коде индикатора невозможно определить, запущен ли индикатор сам по себе путем размещения на чарте или из другого скрипта (индикатора, эксперта) через функцию iCustom. Это было бы очень желательно, например, чтобы в демо-версии индикатора можно было ограничить (запретить) использование индикатора в экспертах.

Тем более, что функция для запроса аналогичной информации уже есть - MQLInfoInteger. Напрашивается добавить в её перечисление еще одну константу, например, MQL_ICUSTOM.

Дали от ворот поворот, сославшись на то, что для этого нужно определить "хозяина" индикатора (одного или несколько), что по техническим причинам яко-бы невозможно.

 

Alexey Volchanskiy:

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

Сделать облегченную копию индикатора (без графики и излишеств, только расчеты) и вызывать через iCustom именно её.
 
Dennis Kirichenko:

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

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

Ты не поверишь, вчера веером так и сделал ))) Тупо, но работает ))
 
Andrey Khatimlianskii:

Через параметр.

Не гарантия. Если индикатор есть на чарте с такими же параметрами, схема ломается.

Короче ответ на вопрос топика -- по-хорошему вообще никак.

 
Комбинатор:

Не гарантия. Если индикатор есть на чарте с такими же параметрами, схема ломается.

Короче ответ на вопрос топика -- по-хорошему вообще никак.

Да, именно так - на чарте есть индикатор с такими же параметрами. Вообще уже думаю переделать индюк, мне от него нужно только несколько выходных параметров. Может, просто писать их в глобальнные переменные, а советник будет их считывать? Это в плане минимизации расчетов.

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

 
Alexey Volchanskiy:

Да, именно так - на чарте есть индикатор с такими же параметрами. Вообще уже думаю переделать индюк, мне от него нужно только несколько выходных параметров. Может, просто писать их в глобальнные переменные, а советник будет их считывать? Это в плане минимизации расчетов.

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

Алексей, у тебя создаются два лейбла с одинаковым именем???
 
Alexey Viktorov:
Алексей, у тебя создаются два лейбла с одинаковым именем???

Нет конечно, два одинаковых не создалось бы. Имя формируется на основе постоянной части и 2-х параметров. И если в советнике и индикаторе на чарте параметры не совпадают, получаются два лейбла с похожими именами на одном месте.

// OnInit()
    string ShortName = "VHPChannel_02_(" + IntegerToString(HPPeriodFast) + "," + IntegerToString(HPPeriodSlow) + ")";
    ObjectsDeleteAll(0, "VHPChannel"); // удаляю все возможные лейблы с таким префиксом
    ObjectCreate(0, ShortName, OBJ_LABEL, 0, 0, 0);
    WindowRedraw();

Я вот этот индюк переделал на четверку и немного изменил https://www.mql5.com/ru/code/191

Hodrick-Prescott Channel
Hodrick-Prescott Channel
  • голосов: 19
  • 2010.09.22
  • Victor
  • www.mql5.com
Индикатор рисует ценовой канал, используя Hodrick-Prescott Filter.
 
Alexey Volchanskiy:

Нет конечно, два одинаковых не создалось бы. Имя формируется на основе постоянной части и 2-х параметров. И если в советнике и индикаторе на чарте параметры не совпадают, получаются два лейбла с похожими именами на одном месте.

Я вот этот индюк переделал на четверку и немного изменил https://www.mql5.com/ru/code/191

Ну теперь понятно, а-то в первом твоём пояснении о разных именах ничего небыло

Alexey Volchanskiy:

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

 
Alexey Volchanskiy:

Нет конечно, два одинаковых не создалось бы. Имя формируется на основе постоянной части и 2-х параметров. И если в советнике и индикаторе на чарте параметры не совпадают, получаются два лейбла с похожими именами на одном месте.

Я вот этот индюк переделал на четверку и немного изменил https://www.mql5.com/ru/code/191

посмотреть индюк не дадите?
Причина обращения: