Диаграмма индикатора рисуется от одного непустого значения до другого непустого значения индикаторного буфера, пустые значения пропускаются. Чтобы указать, какое значение следует считать «пустым», необходимо определить это значение в свойстве PLOT_EMPTY_VALUE. Например, если индикатор должен рисоваться по ненулевым значениям, то нужно задать нулевое значение в качестве пустого значения буфера индикатора:
PlotIndexSetDouble (индекс_построения, PLOT_EMPTY_VALUE,0);
Функция PlotIndexSetInteger позволяет программным способом, динамически, задавать такие свойства диаграммы индикатора, как код стрелки для стиля DRAW_ARROW, смещение стрелок по вертикали для стиля DRAW_ARROW, количество начальных баров без отрисовки и значений в DataWindow, тип графического построения, признак отображения значений построения в окне DataWindow, сдвиг графического построения индикатора по оси времени в барах, стиль линии отрисовки, толщина линии отрисовки, количество цветов, индекс буфера, содержащего цвет отрисовки.
Давайте разберем каждое из этих свойств по порядку на примере индикатора Custom Moving Average.
Изменим свойство indicator_type1 индикатора Custom Moving Average:
#property indicator_type1 DRAW_ARROW
В функции OnInit добавим вызов функции PlotIndexSetInteger, определяя различный код стрелки для стиля DRAW_ARROW:
PlotIndexSetInteger (0,PLOT_ARROW,2);
PlotIndexSetInteger (0,PLOT_ARROW,3);
PlotIndexSetInteger (0,PLOT_ARROW,4);
PlotIndexSetInteger (0,PLOT_ARROW,5);
PlotIndexSetInteger (0,PLOT_ARROW,6);
PlotIndexSetInteger (0,PLOT_ARROW,7);
PlotIndexSetInteger (0,PLOT_ARROW,8);
PlotIndexSetInteger (0,PLOT_ARROW,11);
PlotIndexSetInteger (0,PLOT_ARROW,12);
PlotIndexSetInteger (0,PLOT_ARROW,14);
PlotIndexSetInteger (0,PLOT_ARROW,15);
И так далее. Я думаю, этого будет достаточно для демонстрации этой опции.
В функции OnInit добавим вызов функции PlotIndexSetInteger, определяя смещение стрелок по вертикали для стиля DRAW_ARROW:
PlotIndexSetInteger (0,PLOT_ARROW_SHIFT,0);
PlotIndexSetInteger (0,PLOT_ARROW_SHIFT,100)
В результате диаграмма индикатора сдвинулась вниз.
В индикаторе Custom Moving Average для определения количества начальных баров без отрисовки и значений в DataWindow используется вызов функции PlotIndexSetInteger:
PlotIndexSetInteger (0,PLOT_DRAW_BEGIN, InpMAPeriod);
где InpMAPeriod – период скользящей средней.
Идентификатор свойства PLOT_DRAW_TYPE функции PlotIndexSetInteger позволяет программным способом задать свойство индикатора indicator_typeN, например:
PlotIndexSetInteger (0, PLOT_DRAW_TYPE, DRAW_ARROW);
Причем, если одновременно задано свойство indicator_typeN и сделан вызов функции PlotIndexSetInteger с идентификатором PLOT_DRAW_TYPE – действовать будет тип диаграммы, заданный функцией PlotIndexSetInteger.
Убрать отображение текущих значений диаграммы индикатора в окне DataWindow при наведении курсора мышки можно с помощью вызова функции PlotIndexSetInteger с идентификатором PLOT_SHOW_DATA:
PlotIndexSetInteger (0, PLOT_SHOW_DATA, false);
В индикаторе Custom Moving Average для определения сдвига графического построения индикатора по оси времени в барах используется вызов функции PlotIndexSetInteger:
PlotIndexSetInteger (0,PLOT_SHIFT, InpMAShift);
При InpMAShift=0:
При InpMAShift=10:
Такой сдвиг делается для имитации предсказательности индикатора.
Идентификатор свойства PLOT_LINE_STYLE функции PlotIndexSetInteger позволяет программным способом задать свойство индикатора indicator_styleN, стиль линии отрисовки, например:
PlotIndexSetInteger (0, PLOT_LINE_STYLE, STYLE_DASHDOT);
Идентификатор свойства PLOT_LINE_WIDTH функции PlotIndexSetInteger позволяет программным способом задать свойство индикатора indicator_widthN, толщину линии отрисовки, например:
PlotIndexSetInteger (0, PLOT_LINE_WIDTH, 2);
Программным способом задать свойство индикатора indicator_colorN позволяет вызов функции PlotIndexSetInteger с идентификаторами PLOT_COLOR_INDEXES и PLOT_LINE_COLOR, например:
#property indicator_color1 clrGreen, clrRed
Или
PlotIndexSetInteger (0,PLOT_COLOR_INDEXES,2);
PlotIndexSetInteger (0,PLOT_LINE_COLOR,0,clrGreen);
PlotIndexSetInteger (0,PLOT_LINE_COLOR,1,clrRed);
Функция PlotIndexSetString позволяет программным способом задать свойство индикатора indicator_labelN. Например, для индикатора MACD это будет выглядеть следующим образом:
#property indicator_label1 «MACD»
#property indicator_label2 «Signal»
Или
PlotIndexSetString (0, PLOT_LABEL, «MACD»);
PlotIndexSetString (1, PLOT_LABEL, «Signal»);
Рассмотренные выше функции программной установки свойств индикатора можно конечно вызывать и в функции обратного вызова OnCalculate, но глубокого смысла в этом нет, так как они не могут быть применены только к части диаграммы индикатора – они применяются сразу ко всей диаграмме индикатора. Поэтому для экономии ресурсов лучше всего вызывать эти функции в функции обратного вызова OnInit .
Функция OnDeinit
Процитируем справочник:
Событие Deinit генерируется для экспертов и индикаторов в следующих случаях: