Обращение к свойствам индикатора из эксперта. Прошу помочь.

 

Здравствуйте уважаемые разработчики и трейдеры.

Обращаюсь к вам за помощью, так как перепробовал уже все, перелистал документацию кучу раз, изгуглил весь сайт mql5 в поисках решения, пробовал, экспериментировал, вообщем сделал все, что мог. Не выходит. Еще немного и мой мозг взорвется и будет на одного трейдера меньше.. 
Опишу задачу. 

Есть эксперт. Он контролирует некоторое количество графических объектов на графике, таких как кнопки, добавляет/удаляет/изменяет им свойства (период, стиль, текст и др.). С этим все в порядке.

Далее на графике так же есть некоторое количество графиков Moving Average. Я могу открыть диалог управления свойствами этих графиков и изменить им свойства (стиль линий, на каких таямфреймах показывать и др.)

А надо из советника изменить эти свойства, то есть я хочу по клику на кнопку (обработка в советнике) скрывать/показывать эти графики. Обычно графическим объектам я меняю свойство OBJPROP_TIMEFRAMES на OBJ_NO_PERIODS/OBJ_ALL_PERIODS тем самым скрываю или показываю объект. Но я не нахожу как указать те же свойства индикатору.

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

Вообщем вот в таком я тупике и единственная надежда на вас, прошу помочь господа.

Интересует любое решение, чтоб кнопкой на графике можно было скрыть/показать индикатор или создать/удалить но тогда нужно указать им стиль.

Спасибо! 

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 
Fredik:

Здравствуйте уважаемые разработчики и трейдеры.

Обращаюсь к вам за помощью, так как перепробовал уже все, перелистал документацию кучу раз, изгуглил весь сайт mql5 в поисках решения, пробовал, экспериментировал, вообщем сделал все, что мог. Не выходит. Еще немного и мой мозг взорвется и будет на одного трейдера меньше.. 
Опишу задачу. 

Есть эксперт. Он контролирует некоторое количество графических объектов на графике, таких как кнопки, добавляет/удаляет/изменяет им свойства (период, стиль, текст и др.). С этим все в порядке.

Далее на графике так же есть некоторое количество графиков Moving Average. Я могу открыть диалог управления свойствами этих графиков и изменить им свойства (стиль линий, на каких таямфреймах показывать и др.)

А надо из советника изменить эти свойства, то есть я хочу по клику на кнопку (обработка в советнике) скрывать/показывать эти графики. Обычно графическим объектам я меняю свойство OBJPROP_TIMEFRAMES на OBJ_NO_PERIODS/OBJ_ALL_PERIODS тем самым скрываю или показываю объект. Но я не нахожу как указать те же свойства индикатору.

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

Вообщем вот в таком я тупике и единственная надежда на вас, прошу помочь господа.

Интересует любое решение, чтоб кнопкой на графике можно было скрыть/показать индикатор или создать/удалить но тогда нужно указать им стиль.

Спасибо! 

Почитай мою статью 20 торговых сигналов на MQL5 я в ней писал как из графического меню менять свойства индикатора


P.S  Не въехал сначала что ты хочешь сделать с индикаторами. В общем что ты хочешь вроде не реально.

 
Хотя не понятно почему Разработчики не сделали функцию выгрузки индикатора с графика. Например для выгрузки эксперта функция есть
void  ExpertRemove();
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 

Решил задачу немного другим способом.

Сделал индикатор и в его OnCalculate() проверяю статус кнопки и в зависимости от него меняю свойство PLOT_DRAW_TYPE (DRAW_NONE | DRAW_LINE) тем самым прячу/показываю линию индикатора.
В принципе задача решена, но все равно интересно как управлять свойствами из эксперта. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 
Можно вместо проверки статуса кнопки посылать чартэвент, который отлавливать в индикаторе и выполнять необходимые действия.
 
Да, действительно, стоит попробовать. А то отслеживая кнопку приходится ждать очередной тик и появление/скрытие проходит с задержкой, теряется ощущение нажатия кнопки.
 
alexvd:
Можно вместо проверки статуса кнопки посылать чартэвент, который отлавливать в индикаторе и выполнять необходимые действия.

хочу приподнять данную тему, ибо актуальна и по сей день. и без неё изобретаем костыли через чартевент,

1. Как индикатору выгрузить себя с чарта (по аналогии с ExpertRemove)? 
Я решения вообще не нашел, кроме как тупого вызова исключения - обращение по некорректному указателю. Но это бред.

2. заявка в сд #98320 от 2011.05.08  по сабжу данной темы.

там отвечали что

Управление индикаторами на чарте еще будет развиваться. Будут общие функции получения и изменения свойств индикаторов, втч будет возможность чтения данного свойства.

Ждем с мая месяца. Проекты заморожены, клиенты домагаются...   :)


Алексей, сделайте наконец-то рождественский подарок, хотя бы синицу в руке пощупать, бета версии этих функций.
очень важно для развития софта.

 
sergeev:

хочу приподнять данную тему, ибо актуальна и по сей день. и без неё изобретаем костыли через чартевент,

Тему лучше поднять в сервисдеске.
 

Антон, спасибо за предложенный вариант решения для первого вопроса.

int OnInit()
  {
   IndicatorSetString(INDICATOR_SHORTNAME,0,"TEST");
   return(0);
  }
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double& price[])
  {
   ChartIndicatorDelete(0,ChartWindowFind(),"TEST"); // удаление себя с чарта
   return(rates_total);
  }
как говорится на безрыбье - и рак рыба.
Причина обращения: