Скачать MetaTrader 5

IndicatorSetInteger

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

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

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

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

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

Параметры

prop_id

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

prop_modifier

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

prop_value

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

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

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

Примечание

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

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

  • IndicatorSetInteger(INDICATOR_LEVELWIDTH, 0, 5) - используется индекс 0 для задания толщины линии первого уровня.

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

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

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- зададим показ трех горизонтальных уровней в отдельном окне индикатора
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//--- установим толщину горизонтальных уровней
#property indicator_levelwidth 5
//--- установим цвет горизонтальных уровней
#property indicator_levelcolor clrAliceBlue
//--- установим стиль горизонтальных уровней
#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,"IndicatorSetInteger() Demo");
   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;
//--- считаем тики
   tick_counter++;
//--- и устанавливаем цвета горизонтальных уровней в зависимости от счетчика тиков
   ChangeLevelColor(0,tick_counter,3,6,10); // три последних параметра переключают цвет
   ChangeLevelColor(1,tick_counter,3,6,8);
   ChangeLevelColor(2,tick_counter,4,7,9);
//--- поменяем стили горизонтальных уровней
   ChangeLevelStyle(0,tick_counter);
   ChangeLevelStyle(1,tick_counter+5);
   ChangeLevelStyle(2,tick_counter+15);
//--- получим толщину линии как остаток целочисленного деления числа тиков на 5
   int width=tick_counter%5;
//--- пройдем по всем горизонтальным уровням и выставим 
   for(int l=0;l<3;l++)
      IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Установим цвет горизонтальной линии в отдельном окне индикатора  |
//+------------------------------------------------------------------+
void ChangeLevelColor(int level,      // номер горизонтальной линии
                      int tick_number,// делимое, число для получения остатка деления
                      int f_trigger,  // первый делитель переключения цвета
                      int s_trigger,  // второй делитель переключения цвета
                      int t_trigger)  // третий делитель переключения цвета
  {
   static color colors[3]={clrRed,clrBlue,clrGreen};
//--- индекс цвета из массива colors[] 
   int index=-1;
//--- вычислим номер цвета из массива colors[] для раскрашивания горизонтальной линии
   if(tick_number%f_trigger==0)
      index=0;   // если число tick_number делится без остатка на f_trigger
   if(tick_number%s_trigger==0)
      index=1;   // если число tick_number делится без остатка на s_trigger
   if(tick_number%t_trigger==0)
      index=2;   // если число tick_number делится без остатка на t_trigger
//--- если цвет определен, установим его      
   if(index!=-1)
      IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]);
//---
  }
//+------------------------------------------------------------------+
//| Установим стиль горизонтальной линии в отдельном окне индикатора |
//+------------------------------------------------------------------+
void ChangeLevelStyle(int level,     // номер горизонтальной линии
                      int tick_number// число для получения остатка от деления
                      )
  {
//--- массив для хранения стилей
   static ENUM_LINE_STYLE styles[5]=
     {STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- индекс стиля из массива styles[] 
   int index=-1;
//--- вычислим номер из массива styles[] для установки стиля горизонтальной линии
   if(tick_number%50==0)
      index=5;   // если tick_number делится без остатка на 50, то стиль STYLE_DASHDOTDOT
   if(tick_number%40==0)
      index=4;   // ... стиль STYLE_DASHDOT
   if(tick_number%30==0)
      index=3;   // ... STYLE_DOT
   if(tick_number%20==0)
      index=2;   // ... STYLE_DASH
   if(tick_number%10==0)
      index=1;   // ... STYLE_SOLID
//--- если стиль определен, установим его      
   if(index!=-1)
      IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]);
  }

Смотри также

Свойства пользовательских индикаторов, Свойства программ (#property), Стили рисования


Обновлено: 2015.12.03