Нужна помощь MQL5 #property indicator_level - страница 2

 
Artyom Trishkin:

Вам уже отвечали на вопрос.

Вот эта строчка, прописанная в OnInit() изменит самый первый уровень индикатора на значение, записанное в переменной new_value_0:

Вот эта строчка, изменит второй уровень индикатора на значение переменной new_value_1:

... и т.д.

Alexey Viktorov:

Похоже что ему не нужно решение вопроса, а нужно просто охаять и МТ и MQL потому, что нет возможности прочесть параметр заданный в #property


По моему не один из вас не понимает о чём идёт речь.
Я не хочу установить уровень роботом хотя изначально это и предполагается.
Я хочу его считать при его изменении! в процессе работы на графике.
И самое важное сделать это не через inputs.
Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно.
И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы.
Теперь понятно что я хочу?

 
Ivan Stepanenko:


По моему не один из вас не понимает о чём идёт речь.
Я не хочу установить уровень роботом хотя изначально это и предполагается.
Я хочу его считать при его изменении! в процессе работы на графике.
И самое важное сделать это не через inputs.
Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно.
И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы.
Теперь понятно что я хочу?

Нет, не понятно.

Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?

В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?

 
Artyom Trishkin:

Нет, не понятно.

Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?

В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?

Из другой программы?

 
Andrey Khatimlianskii:

Из другой программы?

Нет не сдругой программы


Artyom Trishkin:

Нет, не понятно.

Если вы хотите НЕ через input (И самое важное сделать это не через inputs), то значит вы его сами и меняете программой. Зачем тогда узнавать, раз вы сами значение программой устанавливаете?

В момент, когда вы положили в карман червонец, как вам узнать сколько вы в карман положили?

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

А я пред пологаю что уровень может сменить пользователь по своим потребностям и индикатор должен на это отреагировать и подстроится под новые параметры!

Для этого и нужно считывать сам уровень с графика а не пытатса его нарисовать заново.

 
Ivan Stepanenko:

Нет не сдругой программы


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

А я пред пологаю что уровень может сменить пользователь по своим потребностям и индикатор должен на это отреагировать и подстроится под новые параметры!

Для этого и нужно считывать сам уровень с графика а не пытатса его нарисовать заново.

Не выдумывайте за меня то, о чём я могу думать.

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

Если вы предполагаете, что уровень мог сменить пользователь, то это значит, что вы сами себе противоречите: (И самое важное сделать это не через inputs)

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

 

Ну сменить значение input пользователем конечно вполне можно и на лету. Правда для этого как минимум понадобиться панелька, в которой можно ввести это значение. Правда не совсем понятно зачем лишние извращения, если можно перезапустить индикатор с измененным input.

Но как говориться на вкус и цвет, карандаши разные.

 
Ivan Stepanenko:


По моему не один из вас не понимает о чём идёт речь.
Я не хочу установить уровень роботом хотя изначально это и предполагается.
Я хочу его считать при его изменении! в процессе работы на графике.
И самое важное сделать это не через inputs.
Я не пытаюсь обсерать не кого я пытаюсь найти объяснение как это сделать правильно.
И какая ячейка памяти за это отвечает если уж на то пошло и нету функции считывания уровня в процессе исполнения программы.
Теперь понятно что я хочу?

Понятно. Это именно то что я предположил.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Нужна помощь MQL5 #property indicator_level

Alexey Viktorov, 2018.02.08 07:30

Похоже что ему не нужно решение вопроса, а нужно просто охаять и МТ и MQL потому, что нет возможности прочесть параметр заданный в #property

А конец моей фразы понятен? Нет и не будет такой возможности. Следовательно зачем биться лбом о бетонную стену?

Можно вообще не писать

#property indicator_level1      0

Достаточно в OnInit() вписать

   IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, level);


 
Alexey Viktorov:

Понятно. Это именно то что я предположил.

А конец моей фразы понятен? Нет и не будет такой возможности. Следовательно зачем биться лбом о бетонную стену?

Можно вообще не писать

Достаточно в OnInit() вписать


Да можно если задуманно  уровень который не изменяется в процесе обработки данных.

//--- количество окон на графике (всегда есть хотя бы одно главное окно)
   int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   //--- про ходим по окнам
   for(int w=0;w<windows;w++)
     {
      //--- сколько индикаторов в данном окне/подокне
      int total=ChartIndicatorsTotal(0,w);
      //--- переберем все индикаторы в окне
      for(int i=0;i<total;i++)
        {
         //--- получим короткое имя индикатора
         string name=ChartIndicatorName(0,w,i);
         //--- получим хэндл индикатора
         int handle=ChartIndicatorGet(0,w,name);
         //--- выведем в журнал
         if(name=="RSIm"&&w>0)
         PrintFormat("Window=%d,  index=%d,  Name=%s,  handle=%d",w,i,name,handle);
         int objeto=ObjectsTotal(0,w,-1);
         for(int j=0;j<objeto;j++)
           {
           PrintFormat("Name=%s,",ObjectName(ChartID(),j,i,-1));
           }
         //--- обязательно освобождаем хендл индикатора, как только он становится ненужным
         IndicatorRelease(handle);
        }
     }


Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями.
Что я пропустил или что я не так делаю?

 
Ivan Stepanenko:

Да можно если задуманно  уровень который не изменяется в процесе обработки данных.

//--- количество окон на графике (всегда есть хотя бы одно главное окно)
   int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   //--- про ходим по окнам
   for(int w=0;w<windows;w++)
     {
      //--- сколько индикаторов в данном окне/подокне
      int total=ChartIndicatorsTotal(0,w);
      //--- переберем все индикаторы в окне
      for(int i=0;i<total;i++)
        {
         //--- получим короткое имя индикатора
         string name=ChartIndicatorName(0,w,i);
         //--- получим хэндл индикатора
         int handle=ChartIndicatorGet(0,w,name);
         //--- выведем в журнал
         if(name=="RSIm"&&w>0)
         PrintFormat("Window=%d,  index=%d,  Name=%s,  handle=%d",w,i,name,handle);
         int objeto=ObjectsTotal(0,w,-1);
         for(int j=0;j<objeto;j++)
           {
           PrintFormat("Name=%s,",ObjectName(ChartID(),j,i,-1));
           }
         //--- обязательно освобождаем хендл индикатора, как только он становится ненужным
         IndicatorRelease(handle);
        }
     } 


Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями.
Что я пропустил или что я не так делаю?

Всё.

Изначально был вопрос

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Нужна помощь MQL5 #property indicator_level

Ivan Stepanenko, 2018.01.30 17:30

Ребята всем спасибо кто заинтересовался вопросом.

А в двойне спасибо тот кто смог помочь.

Вопрос такой.
Сушествуют функцыи Get и Set В других языках. Set  Отпровляем параметры а Get Получаем. Как пользоватса Get в MQL5?

Второй вопрос попроще если кто сталкивался.
#property indicator_level1 30  - Задал параметр. При Загрузки индикатора на график. Мне его ресует.
В коде програме функцыей ColorBuffer[] изменяю линию на другой цвет если линия опускаетса ниже данного параметра.

И тут родилась проблема. Если захожу в индикатор и меняю данный параметр на другой даже при загрузке индикатора линия уровня ресуетса там где надо а сам индикатор расчитывает всё по тому параметру что установлен раньше тобиж #property indicator_level1 30

Каким образом я должен обращятса к данному уровню чтоб можно было потом его менять в ходе исполнение программы?

- Уже испробывал провирять параметр. И заново пересчитывать всю цепь индикатора.
Всеравно не хочет перерисовыватса как мне нужно!

Помогите добрые знатаки!
Кто чем может :)

На вопрос выделенный красным вот ответ

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Нужна помощь MQL5 #property indicator_level

Alexey Viktorov, 2018.01.31 09:06

Игорь, мы оба неправы. Я не сразу понял задачу...

Кроме директивы #property установить уровень индикатора можно функцией

IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);

Соответственно этот уровень надо задать во входящих параметрах индикатора. В таком случае, уровень рисоваться будет по заданному значению и менять его надо тоже по этому значению.

Тестовый вариант

#property indicator_separate_window
#property indicator_buffers     1
#property indicator_type1       DRAW_LINE
#property indicator_plots       1
#property indicator_color1      clrGreenYellow
#property indicator_level1      0        // Можно вообще это не писать
#property indicator_levelcolor  clrPurple

input double level = 0.6;
double buf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, buf, INDICATOR_DATA);
   IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, level);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int i = 0, limit = prev_calculated == 0 ? 0 : rates_total-1;
    for(i = limit; i < rates_total; i++)
     {
      buf[i] = i%2;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Потом вы сочинили что есть необходимость программно всем индикаторам переназначить уровни. Даже тем в которых уровни не предусмотрены.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Нужна помощь MQL5 #property indicator_level

Alexey Viktorov, 2018.02.04 17:23


Я вот чего не понимаю: Почему вместо того, чтобы взять готовый код, проверить, покрутить его и так и эдак, вы вступаете в обсуждение? Вы считаете что все тут чаще просто пишут не проверенные варианты советов?

да ещё и меняете цель задачи...
 
Ivan Stepanenko:

Я использовал вот этот код чтоб найти обекты на графике где располагается мой индикатор но он так не чего не показал связоное с уровнями.
Что я пропустил или что я не так делаю?

Уровни индикатора это не графические объекты.

Причина обращения: