Свойства пользовательских индикаторов

Количество индикаторных буферов, которые можно использовать в пользовательском индикаторе, не ограничено. Но каждому массиву, который назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(), должен быть указан тип данных, которые он будет хранить. Это может быть одно из значений перечисления ENUM_INDEXBUFFER_TYPE.

ENUM_INDEXBUFFER_TYPE

Идентификатор

Описание

INDICATOR_DATA

Данные для отрисовки

INDICATOR_COLOR_INDEX

Цвета отрисовки

INDICATOR_CALCULATIONS

Вспомогательные буферы для промежуточных вычислений

Пользовательский индикатор имеет множество настроек для удобства отображения и восприятия. Эти настройки производятся через задание соответствующих свойств индикатора с помощью функций IndicatorSetDouble(), IndicatorSetInteger() и IndicatorSetString(). Идентификаторы свойств индикатора перечислены в перечислениях ENUM_CUSTOMIND_PROPERTY.

ENUM_CUSTOMIND_PROPERTY_INTEGER

Идентификатор

Описание

Тип свойства

INDICATOR_DIGITS

Точность отображения значений индикатора

int

INDICATOR_HEIGHT

Фиксированная высота собственного окна индикатора (команда препроцессора #property indicator_height)

int

INDICATOR_LEVELS

Количество уровней на окне индикатора

int

INDICATOR_LEVELCOLOR

Цвет линии уровня

color                      модификатор=номер уровня

INDICATOR_LEVELSTYLE

Стиль линии уровня

ENUM_LINE_STYLE  модификатор=номер уровня

INDICATOR_LEVELWIDTH

Толщина линии уровня

int                         модификатор=номер уровня

INDICATOR_FIXED_MINIMUM

Фиксированный минимум для окна индикатора. Свойство доступно только на запись функцией IndicatorSetInteger()

bool

INDICATOR_FIXED_MAXIMUM

Фиксированный максимум для окна индикатора. Свойство доступно только на запись функцией IndicatorSetInteger()

bool

ENUM_CUSTOMIND_PROPERTY_DOUBLE

Идентификатор

Описание

Тип свойства

INDICATOR_MINIMUM

Минимум окна индикатора

double

INDICATOR_MAXIMUM

Максимум окна индикатора

double

INDICATOR_LEVELVALUE

Значение уровня

double                    модификатор=номер уровня

ENUM_CUSTOMIND_PROPERTY_STRING

Идентификатор

Описание

Тип свойства

INDICATOR_SHORTNAME

Короткое наименование индикатора

string

INDICATOR_LEVELTEXT

Описание уровня

string                      модификатор=номер уровня

Примеры:

//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_color1  clrLightSeaGreen
#property indicator_color2  clrRed
//--- input parameters
extern int KPeriod=5;
extern int DPeriod=3;
extern int Slowing=3;
//--- indicator buffers
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,HighesBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,LowesBuffer,INDICATOR_CALCULATIONS);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set levels
   IndicatorSetInteger(INDICATOR_LEVELS,2);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,80);
//--- set maximum and minimum for subwindow 
   IndicatorSetDouble(INDICATOR_MINIMUM,0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,KPeriod+Slowing-2);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,KPeriod+Slowing+DPeriod);
//--- set style STYLE_DOT for second line
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Stoch("+KPeriod+","+DPeriod+","+Slowing+")");
   PlotIndexSetString(0,PLOT_LABEL,"Main");
   PlotIndexSetString(1,PLOT_LABEL,"Signal");
//--- sets drawing line to empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//--- initialization done
  }