Пользовательские индикаторы
Функции пользовательских индикаторов позволяют выполнить необходимые настройки,
чтобы представить индикатор в удобном оформлении. Рассмотрим некоторые из них (см.
также Создание пользовательских индикаторов).
Функция SetIndexBuffer()
bool SetIndexBuffer(int index, double array[])
Функция связывает переменную-массив, объявленный на глобальном уровне, с предопределенным
буфером пользовательского индикатора. Количество буферов, необходимых для расчета
индикатора, задается с помощью функции IndicatorBuffers() и не может быть больше
8. В случае успешного связывания возвращается TRUE, иначе FALSE. Чтобы получить
расширенные сведения об ошибке, следует вызвать функцию GetLastError().
Параметры:
index - порядковый номер линии (допускаются значения от 0 до 7);
array[] - имя массива, связанного с расчетным буфером.
Функция SetIndexStyle()
void SetIndexStyle(int index, int type, int style=EMPTY, int width=EMPTY, color clr=CLR_NONE)
Функция устанавливает новый тип, стиль, ширину и цвет для указанной линии индикатора.
Параметры:
index - порядковый номер линии (допускаются значения от 0 до 7);
type - стиль отрисовки линии индикатора. Может быть одним из перечисленных стилей отрисовки
линии (см. Стили отображения индикаторных линий);
style - стиль линии. Используется для линий толщиной в 1 пиксель. Может быть одним из
стилей линии, указанных в приложении Стили отображения индикаторных линий. Пустое значение (EMPTY) указывает, что стиль не будет изменен;
width - ширина линии; допустимые значения - 1,2,3,4,5; пустое значение (EMPTY) указывает,
что ширина не будет изменена;
clr - цвет линии. Пустое значение CLR_NONE указывает, что цвет не будет изменен.
Функция SetIndexLabel()
void SetIndexLabel(int index, string text)
Функция позволяет устанавливать имя линии индикатора для отображения информации
в окне DataWindow и всплывающей подсказке.
Параметры:
index - порядковый номер линии (допускаются значения от 0 до 7);
text - Текст описания линии индикатора. NULL означает, что значение этой линии не показывается
в DataWindow.
Пример простого индикатора, отображающего линию High (indicatorstyle.mq4), использующий указанные выше функции:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
double Buf_0[];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);
SetIndexLabel (0,"Линия High");
return;
}
int start()
{
int i,
Counted_bars;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
while(i>=0)
{
Buf_0[i]=High[i];
i--;
}
return;
}
В блоке 1-2 индикатора выполнены общие настройки. С помощью директивы #property
указано, что индикатор должен отображаться в основном окне, индикатор использует
один буфер, цвет индикаторной линии - синий. В блоке 1-2 также открыт один буферный
массив.
В блоке 2-3 используются указанные выше функции. В строке:
SetIndexBuffer(0,Buf_0);
буферу с индексом 0 ставится в соответствие массив с именем Buf_0. В строке:
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);
определяется стиль индикаторной линии, имеющей индекс 0. Константа DRAW_LINE означает,
что отображаемая линия - простая, указание константы STYLE_SOLID означает, что
линия сплошная, а 2 определяет толщину линии. В строке:
SetIndexLabel (0,"Линия High");
индикаторной линии с индексом 0 присваивается имя. Указанное имя можно видеть в
окне данных и во всплывающей подсказке в окне финансового инструмента (см. Рис.
810_3). Именование линий удобно использовать в случаях, когда в окне одновременно
отражено несколько индикаторных линий; иногда это единственный способ отличить
одну линию от другой. В блоке 3-4 выполняется простой расчёт значений элементов
индикаторного массива для линии, отображающей максимальные значения баров (порядок
расчёта индикаторных массивов подробно рассмотрен в разделе
Программирование пользовательских индикаторов.).
Если индикатор отображается в отдельном подокне, то в этом окне можно отобразить
горизонтальные уровни.
Функция SetLevelValue()
void SetLevelValue(int level, double value)
Устанавливает значение для указанного горизонтального уровня индикатора, выводимого
в отдельное окно.
Параметры:
level - номер уровня (0-31).
value - значение для указанного уровня.
Использование горизонтальных уровней бывает очень удобно в тех случаях, когда
необходимо зрительно определить находится ли индикаторная линия выше или ниже
некоторых заданных значений. Представленный ниже простой индикатор рассчитывает
разницу между максимальной и минимальной ценами бара. События на рынке
представляют интерес для пользователя (условно, в данном примере), если
индикаторная линия находится выше уровня 0.001 или ниже уровня -0.001. Пример
индикатора, отображающего разницу High и Low (linelevel.mq4).
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
double Buf_0[];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);
SetIndexLabel (0,"Разница High и Low");
SetLevelValue (0, 0.0010);
SetLevelValue (1,-0.0010);
return;
}
int start()
{
int i,
Counted_bars;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
while(i>=0)
{
Buf_0[i]=High[i]-Low[i];
if(Open[i]>Close[i])
Buf_0[i]=-Buf_0[i];
i--;
}
return;
}
Рассматриваемая функция используется в индикаторе в блоке 2-3. В данном случае задано
два горизонтальных уровня. Первое значение в списке параметров - номер горизонтального
уровня, а второе - заданное значение уровня:
SetLevelValue (0, 0.0010);
SetLevelValue (1,-0.0010);
Параметры настроенных таким образом индикаторов indicatorstyle.mq4 и
linelevel.mq4 отражаются в окне финансового инструмента и в окне данных.
Рис. 154. Отображение настроек индикаторов в различных окнах клиентского терминала.
На Рис. 154 представлено два окна - окно данных и окно финансового инструмента.
В окне данных можно наблюдать строку, содержащую текст "Линия High" и
значение 1.3641. Такие же надписи отображаются в нижней строке всплывающей подсказки.
В окне данных указанная строка присутствует в течение всего времени исполнения
индикатора, название линии при этом не изменяется, а значение в правой части строки
зависит от места положения курсора в окне финансового инструмента. Название линии,
отображаемое во всплывающей подсказке, соответствует той индикаторной линии, к
которой подведен курсор.
В подокне индикатора linelevel.mq4 отображены горизонтальные линии, установленные
в соответствии со значениями, заданными пользователем. Если подвести стрелку курсора
к красной индикаторной линии, то во всплывающей подсказке можно видеть название
этой линии, в данном случае "Разница High и Low", и чуть правее - значение
линии в точке курсора.
Функции для настройки пользовательских индикаторов
Функция |
Краткое описание |
IndicatorBuffers |
Распределяет память для буферов, используемых для вычислений пользовательского индикатора.
Количество буферов не может превышать 8 и быть менее значения, указанного в директиве
#property indicator_buffers. Если пользовательский индикатор требует дополнительных буферов для счета, следует
использовать эту функцию для указания общего числа буферов. |
IndicatorCounted |
Функция возвращает количество баров, не измененных после последнего вызова индикатора.
Большинство подсчитанных баров не нуждается в пересчете. |
IndicatorDigits |
Установка формата точности (количество знаков после десятичной точки) для визуализации
значений индикатора. |
IndicatorShortName |
Установка "короткого" имени пользовательского индикатора для отображения
в подокне индикатора и в окне DataWindow. |
SetIndexArrow |
Назначение значка для линии индикаторов, имеющей стиль DRAW_ARROW. |
SetIndexBuffer |
Связывает переменную-массив, объявленный на глобальном уровне, с предопределенным
буфером пользовательского индикатора. |
SetIndexDrawBegin |
Установка порядкового номера бара от начала данных, с которого должна начинаться
отрисовка указанной линии индикатора. |
SetIndexEmptyValue |
Устанавливает значение пустой величины для линии индикатора. Пустые значения не
рисуются и не показываются в DataWindow. |
SetIndexLabel |
Установка имени линии индикатора для отображения информации в окне DataWindow и
всплывающей подсказке. |
SetIndexShift |
Установка смещения линии индикатора относительно начала графика. При положительном
значении изображение линии смещается вправо, при отрицательном - влево. Т.е. значение,
рассчитанное на текущем баре, рисуется с указанным смещением относительно текущего
бара. |
SetIndexStyle |
Устанавливает новый тип, стиль, ширину и цвет для указанной линии индикатора (см.
Стили отображения индикаторных линий). |
SetLevelStyle |
Устанавливает новый стиль, ширину и цвет для горизонтальных уровней индикатора,
выводимого в отдельное окно (см. Стили отображения индикаторных линий). |
SetLevelValue |
Устанавливает значение для указанного горизонтального уровня индикатора, выводимого
в отдельное окно. |
Для получения подробного описания этих и других функций необходимо обратиться к
справочной документации на MQL4.community, сайте MetaQuotes Ltd. или к разделу "Справка" в редакторе MetaEditor.