Русский

Справочник MQL4 Пользовательские индикаторы IndicatorSetDouble

IndicatorSetDouble

Задаёт значение соответствующего свойства индикатора. Свойство индикатора должно быть типа double. Существует 2 варианта функции.

Вызов с указанием идентификатора свойства.

bool  IndicatorSetDouble(
   int     prop_id,           // идентификатор
   double  prop_value         // устанавливаемое значение
   );

Вызов с указанием  идентификатора и модификатора свойства.

bool  IndicatorSetDouble(
   int     prop_id,           // идентификатор
   int     prop_modifier,     // модификатор 
   double  prop_value         // устанавливаемое значение
   )

Параметры

prop_id

[in]  Идентификатор свойства индикатора. Значение может быть одним из значений перечисления ENUM_CUSTOMIND_PROPERTY_DOUBLE.

prop_modifier

[in]  Модификатор указанного свойства. Только свойства уровней требуют модификатора. Нумерация уровней идет с 0, то есть для задания свойства второму уровню нужно указать единицу (на 1 меньше, чем при использовании директивы компилятора).

prop_value

[in]  Значение свойства.

Возвращаемое значение

В случае успешного выполнения возвращает true, в противном случае false.

Примечание

Нумерация свойств (модификаторов) при использовании директивы #property начинается с 1 (единицы), в то время как функция использует нумерацию с 0 (нуля). При неправильном задании номера уровня отображение индикатора может отличаться от того, которое предполагается.

Например, задать значение первого уровня для индикатора в отдельном подокне можно двумя способами:

  • property indicator_level1  50 - используется 1 для указания номера уровня,
  • IndicatorSetDouble(INDICATOR_LEVELVALUE, 0, 50) - используется 0 для указания первого уровня.

Пример: индикатор, меняющий значения уровней, на которых расположены горизонтальные линии.

Пример использования функции IndicatorSetDouble()

#property indicator_separate_window
//--- установим максимальное и минимальное значения для окна индикатора
#property indicator_minimum  0
#property indicator_maximum  100
//--- зададим показ двух горизонтальных уровней в отдельном окне индикатора
#property indicator_level1 25
#property indicator_level2 75
//--- установим толщину горизонтальных уровней
#property indicator_levelwidth 1
//--- установим стиль горизонтальных уровней
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- задаем 2 уровня
   IndicatorSetInteger(INDICATOR_LEVELS,2);
//--- зададим описания горизонтальных уровней 
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
//--- зададим короткое имя индикатора
   IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetDouble() Demo");
//--- зададим всем уровням цвет Blue
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
//--- успешная инициализация
   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[])
  {
   static int tick_counter=0;
   static double level1=25,level2=75;
   static int delta=1;
//--- считаем тики
   tick_counter+=delta;
//--- проверяем границы диапазона изменений
   if(tick_counter<0) delta=5;
   if(tick_counter>25) delta=-5;
//--- изменяем значения уровней
   level1+=delta;
   level2-=delta;
//--- зададим новые значения уровней
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2);
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Смотри также

Стили рисования