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

При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE.

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

В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA), а если стиль допускает динамическое чередование цвета (все стили со словом COLOR в наименовании), то необходим и один буфер цвета (указан тип INDICATOR_COLOR_INDEX). Цветовой буфер всегда связывается сразу после соответствующих стилю буферов значений.

ENUM_DRAW_TYPE

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

Описание

Буферов значений

Буферов цвета

DRAW_NONE

Не отрисовывается

1

0

DRAW_LINE

Линия

1

0

DRAW_SECTION

Отрезки

1

0

DRAW_HISTOGRAM

Гистограмма от нулевой линии

1

0

DRAW_HISTOGRAM2

Гистограмма на двух индикаторных буферах

2

0

DRAW_ARROW

Отрисовка стрелками

1

0

DRAW_ZIGZAG

Стиль Zigzag допускает вертикальные отрезки на баре

2

0

DRAW_FILLING

Цветовая заливка между двумя уровнями

2

0

DRAW_BARS

Отображение в виде баров

4

0

DRAW_CANDLES

Отображение в виде свечей

4

0

DRAW_COLOR_LINE

Разноцветная линия

1

1

DRAW_COLOR_SECTION

Разноцветные отрезки

1

1

DRAW_COLOR_HISTOGRAM

Разноцветная гистограмма от нулевой линии

1

1

DRAW_COLOR_HISTOGRAM2

Разноцветная гистограмма на двух индикаторных буферах

2

1

DRAW_COLOR_ARROW

Отрисовка разноцветными стрелками

1

1

DRAW_COLOR_ZIGZAG

Разноцветный ZigZag

2

1

DRAW_COLOR_BARS

Разноцветные бары

4

1

DRAW_COLOR_CANDLES

Разноцветные свечи

4

1

 

Для уточнения отображения выбранного вида отрисовки используются идентификаторы, перечисленные в перечислениях ENUM_PLOT_PROPERTY.

Для функций PlotIndexSetInteger() и PlotIndexGetInteger()

ENUM_PLOT_PROPERTY_INTEGER

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

Описание

Тип свойства

PLOT_ARROW

Код стрелки для стиля DRAW_ARROW

uchar

PLOT_ARROW_SHIFT

Смещение стрелок по вертикали для стиля DRAW_ARROW

int

PLOT_DRAW_BEGIN

Количество начальных баров без отрисовки и значений в DataWindow

int

PLOT_DRAW_TYPE

Тип графического построения

ENUM_DRAW_TYPE

PLOT_SHOW_DATA

Признак отображения значений построения в окне DataWindow

bool

PLOT_SHIFT

Сдвиг графического построения индикатора по оси времени в барах

int

PLOT_LINE_STYLE

Стиль линии отрисовки

ENUM_LINE_STYLE

PLOT_LINE_WIDTH

Толщина линии отрисовки

int

PLOT_COLOR_INDEXES

Количество цветов

int

PLOT_LINE_COLOR

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

color     модификатор=номер индекса цвета

Для функции PlotIndexSetDouble()

ENUM_PLOT_PROPERTY_DOUBLE

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

Описание

Тип свойства

PLOT_EMPTY_VALUE

Пустое значение для построения, для которого нет отрисовки

double

Для функции PlotIndexSetString()

ENUM_PLOT_PROPERTY_STRING

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

Описание

Тип свойства

PLOT_LABEL

Имя индикаторной графической серии для отображения в окне DataWindow. Для сложных графических стилей, требующих для отображения несколько индикаторных буферов, имена для каждого буфера можно задать с использованием ";" в качестве разделителя. Пример кода приведен в DRAW_CANDLES

string

Существуют 5 стилей, которыми может рисоваться линия в пользовательском индикаторе. Они применимы только при толщине линии 0 или 1.

ENUM_LINE_STYLE

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

Описание

STYLE_SOLID

Сплошная линия

STYLE_DASH

Прерывистая линия

STYLE_DOT

Пунктирная линия

STYLE_DASHDOT

Штрих-пунктирная линия

STYLE_DASHDOTDOT

Штрих - две точки

 

Для задания стиля рисования линии и вида отрисовки используется функция PlotIndexSetInteger(). Для расширений Фибоначчи указать толщину и стиль отрисовки уровней можно функцией ObjectSetInteger().

Пример:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- indicator buffers
double         MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- привязка массива к индикаторному буферу с индексом 0
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
//--- задать рисование линии
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
//--- задание стиля для рисования линии
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
//--- задание цвета линии
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed);
//--- задание толщины линии
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
//--- задание метки для линии
   PlotIndexSetString(0,PLOT_LABEL,"Moving Average");
//---
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- 
   for(int i=prev_calculated;i<rates_total;i++)
      MABuffer[i]=close[i];
//--- return value of prev_calculated for next call
   return(rates_total);
  }