Как работает функция PlotIndexSetInteger() ?

 

Добрый вечер. Я уже некоторое время назад призадумался о функции PlotIndexSetInteger(). Как она работает?

Интересует перегрузка с модификатором:

bool  PlotIndexSetInteger(
   int  plot_index,        // индекс графического стиля
   int  prop_id,           // идентификатор свойства
   int  prop_modifier,     // модификатор свойства
   int  prop_value         // устанавливаемое значение
   )

Для чего этот модификатор нужен?

И, в общем-то, ещё интересно, почему в неё не передаётся индекс бара, к которому применяется эта функция?

Например, вот моя функция:

void setBuffers(int patternType,    // Тип паттерна
                int i) {            // Индекс обрабатываемого бара
  if (patternType == INSIDE_BAR_WITH_BEARISH_BODY) {
    insideBarWithBearishBody_buffer[i] = barHighPrice(i);
    PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, -10);
    insideBarWithBullishBody_buffer[i] = barLowPrice(i);
    PlotIndexSetInteger(1, PLOT_ARROW_SHIFT, 10);
    upperArrowColor[i] = 1;
    lowerArrowColor[i] = 1;
  } else {
    insideBarWithBearishBody_buffer[i] = barHighPrice(i);
    PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, -10);
    insideBarWithBullishBody_buffer[i] = barLowPrice(i);
    PlotIndexSetInteger(1, PLOT_ARROW_SHIFT, 10);
    upperArrowColor[i] = 0;
    lowerArrowColor[i] = 0;
  }
}

У меня посредством параметров функции SetBuffers() передаётся индекс бара i. Логично было бы передать этот индекс в функцию PlotIndexSetInteger(), тогда было бы понятно, что она применится к бара, который расположен на индексе i. А так не понятно, как происходит определения бара, который необходимосдвинуть на значение, в моём случае, 3-ий параметр (10 и -10). Или эта функция способна лишь единожды задавать (отступ в моём случе) ко всем барам сразу, и не может задать различный отступ для разных баров?

Документация по MQL5: Пользовательские индикаторы / PlotIndexSetInteger
Документация по MQL5: Пользовательские индикаторы / PlotIndexSetInteger
  • www.mql5.com
//| Custom indicator initialization function                         | //| get color index                                                  | //| Custom indicator iteration function                              |
 
Viktar Dzemikhau:

Добрый вечер. Я уже некоторое время назад призадумался о функции PlotIndexSetInteger(). Как она работает?

Интересует перегрузка с модификатором:

Для чего этот модификатор нужен?

Добрый. Это не модификатор, это функция устанавливаемого свойства для графического построения

Viktar Dzemikhau:

И, в общем-то, ещё интересно, почему в неё не передаётся индекс бара, к которому применяется эта функция?

Индекс бара определяется другой функцией

Viktar Dzemikhau:

Например, вот моя функция:

У меня посредством параметров функции SetBuffers() передаётся индекс бара i. Логично было бы передать этот индекс в функцию PlotIndexSetInteger(), тогда было бы понятно, что она применится к бара, который расположен на индексе i. А так не понятно, как происходит определения бара, который необходимосдвинуть на значение, в моём случае, 3-ий параметр (10 и -10). Или эта функция способна лишь единожды задавать (отступ в моём случе) ко всем барам сразу, и не может задать различный отступ для разных баров?

 PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, -10 / 10);

Это смещение графического объекта от максимума бара на 10 пикселей вверх по вертикали, и на -10 пикселей ниже минимума бара вниз соответственно.

Индексы баров тут не играют никакой роли) i это значения максимума и минимума бара для расчёта позиционирования графического объекта.

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

 
VVT:

Добрый. Это не модификатор, это функция устанавливаемого свойства для графического построения

Как не модификатор? Как раз-таки модификатор свойства..

[url=https://ibb.co/K2zKbxH][img]https://i.ibb.co/Mc5BZkL/Screen-1.png[/img][/url]

VVT:

Индекс бара определяется другой функцией

Это смещение графического объекта от максимума бара на 10 пикселей вверх по вертикали, и на -10 пикселей ниже минимума бара вниз соответственно. Индексы баров тут не играют никакой роли)

Вы о чём?

VVT:

Это смещение графического объекта от максимума бара на 10 пикселей вверх по вертикали, и на -10 пикселей ниже минимума бара вниз соответственно. Индексы баров тут не играют никакой роли)

Я это понимаю. Получается, что эту функцию со смещением целесообразно использовать только в OnInit(), потому что значение фиксированно для каждого бара. Но вот с модификатором свойства в примере в справке функция PlotIndexSetInteger() (только уже с модификатором свойства) используется в функции OnCalculate():

PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrRed);

А пояснение это не особо понятно:

prop_modifier

[in]  Модификатор указанного свойства. Только свойства индексов цветов требуют модификатора.

Вот это мне и интересно.

 
Viktar Dzemikhau:

А пояснение это не особо понятно:

Вот это мне и интересно.

Там вроде по русски написано, и ниже приведён пример трёх цветного индикатора и также код индикатора, изменения цветов линии 1,2,3

 
VVT:

Там вроде по русски написано, и ниже приведён пример трёх цветного индикатора и также код индикатора, изменения цветов линии 1,2,3

Согласен. Влом было загружать пример..((

Посмотрел. В принципе, 3-х минут хватило, что бы понять, что в том случае это модификатор  цвета буфера. В других - другого свойства. Сам посмотрел, сам и понял..)

 
Viktar Dzemikhau:

Согласен. Влом было загружать пример..((

Посмотрел. В принципе, 3-х минут хватило, что бы понять, что в том случае это модификатор  цвета буфера. В других - другого свойства. Сам посмотрел, сам и понял..)

это модификатор  цвета объекта )

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