Скачать MetaTrader 5

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 50
#property indicator_level3 75
//--- установим толщину горизонтальных уровней
#property indicator_levelwidth 1
//--- установим стиль горизонтальных уровней
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- зададим описания горизонтальных уровней 
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
   IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- зададим короткое имя индикатора
   IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetDouble() Demo");
//--- зададим каждому уровню свой цвет
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrBlue);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrGreen);
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrRed);
//---
   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=50,level3=75;
   static double max=100,min=0, shift=100;
//--- считаем тики
   tick_counter++;
//--- на каждом 10-м тике делаем переворот
   if(tick_counter%10==0)
     {
      //--- перевернем знак для значений уровня
      level1=-level1;
      level2=-level2;
      level3=-level3;
      //--- перевернем знак для значений максимума и минимума
      max-=shift;
      min-=shift;
      //--- перевернем значение сдвига
      shift=-shift;
      //--- зададим новые значения уровней
      IndicatorSetDouble(INDICATOR_LEVELVALUE,0,level1);
      IndicatorSetDouble(INDICATOR_LEVELVALUE,1,level2);
      IndicatorSetDouble(INDICATOR_LEVELVALUE,2,level3);
      //--- зададим новые значения максимума и минимума для окна индикатора
      Print("Set up max = ",max,",   min = ",min);
      IndicatorSetDouble(INDICATOR_MAXIMUM,max);
      IndicatorSetDouble(INDICATOR_MINIMUM,min);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Смотри также

Стили индикаторов в примерах, Связь между свойствами индикатора и функциями, Стили рисования