Русский

Учебник по MQL4  Стандартные функции  Пользовательские индикаторы

Пользовательские индикаторы


Функции пользовательских индикаторов позволяют выполнить необходимые настройки, чтобы представить индикатор в удобном оформлении. Рассмотрим некоторые из них (см. также Создание пользовательских индикаторов).

Функция 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), использующий указанные выше функции:

//--------------------------------------------------------------------
// indicatorstyle.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 1 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии

double Buf_0[]; // Открытие индикаторного массива
//--------------------------------------------------------------- 2 --
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexLabel (0,"Линия High");
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------- 3 --
int start() // Специальная функция start()
{
int i, // Индекс бара
Counted_bars; // Количество просчитанных баров
Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
Buf_0[i]=High[i]; // Значение 0 буфера на i-ом баре
i--; // Расчёт индекса следующего бара
}
return; // Выход из спец. ф-ии start()
}
//--------------------------------------------------------------- 4 --

В блоке 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).

//--------------------------------------------------------------------
// linelevel.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
#property indicator_separate_window // Индик. рисуется в отдельн. окне
#property indicator_buffers 1 // Количество буферов
#property indicator_color1 Red // Цвет линии

double Buf_0[]; // Открытие индикаторного массива
//--------------------------------------------------------------- 2 --
int init() // Специальная функция 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; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------- 3 --
int start() // Специальная функция start()
{
int i, // Индекс бара
Counted_bars; // Количество просчитанных баров

Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного

while(i>=0) // Цикл по непосчитанным барам
{
Buf_0[i]=High[i]-Low[i]; // Значение 0 буфера на i-ом баре
if(Open[i]>Close[i]) // Если свеча чёрная..
Buf_0[i]=-Buf_0[i]; // .. то реверс значения
i--; // Расчёт индекса следующего бара
}
return; // Выход из спец. ф-ии start()
}
//--------------------------------------------------------------- 4 --

Рассматриваемая функция используется в индикаторе в блоке 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.