Рейтинговые книги
Читем онлайн Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - Тимур Машнин

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 2 3 4 5 6 7 8 9 10

property indicator_level1 50

Функция IndicatorSetInteger позволяет программным способом определять такие свойства индикатора как indicator_height, indicator_levelcolor, indicator_levelwidth, indicator_levelstyle.

При этом для уровней необходимо определить их количество, используя функцию IndicatorSetInteger. Например, для индикатора RSI это выглядит следующим образом.

Свойства индикатора:

//#property indicator_level1 30

//#property indicator_level2 70

//#property indicator_levelcolor Red

//#property indicator_levelstyle STYLE_SOLID

//#property indicator_levelwidth 1

Заменяем на код:

IndicatorSetInteger (INDICATOR_LEVELS,2);

IndicatorSetDouble (INDICATOR_LEVELVALUE,0,30);

IndicatorSetDouble (INDICATOR_LEVELVALUE,1,70);

IndicatorSetInteger (INDICATOR_LEVELCOLOR,0,0xff0);

IndicatorSetInteger (INDICATOR_LEVELCOLOR,1,0xff0);

IndicatorSetInteger (INDICATOR_LEVELSTYLE,0,STYLE_SOLID);

IndicatorSetInteger (INDICATOR_LEVELSTYLE,1,STYLE_SOLID);

IndicatorSetInteger (INDICATOR_LEVELWIDTH,0,1);

IndicatorSetInteger (INDICATOR_LEVELWIDTH,1,1);

Функция IndicatorSetInteger также позволяет определить точность индикатора, например:

IndicatorSetInteger (INDICATOR_DIGITS,2);

В результате будут отображаться только два знака после запятой значения индикатора.

Для функции IndicatorSetString нет соответствующих ей свойств индикатора.

С помощью функции IndicatorSetString можно определить короткое наименование индикатора, например для индикатора MACD:

IndicatorSetString (INDICATOR_SHORTNAME,«MACD (»+string (InpFastEMA) +»,»+string (InpSlowEMA) +»,»+string (InpSignalSMA) +»)»);

Соответственно имя индикатора будет отображаться в окне индикатора как:

Кроме того, функция IndicatorSetString позволяет установить подписи к уровням индикатора, например для индикатора RSI:

IndicatorSetString (INDICATOR_LEVELTEXT, 0,«Oversold»);

IndicatorSetString (INDICATOR_LEVELTEXT, 1,«Overbought»)

С помощью функции PlotIndexSetDouble определяют, какое значение буфера индикатора является пустым и не участвует в отрисовке диаграммы индикатора.

Диаграмма индикатора рисуется от одного непустого значения до другого непустого значения индикаторного буфера, пустые значения пропускаются. Чтобы указать, какое значение следует считать «пустым», необходимо определить это значение в свойстве 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 генерируется для экспертов и индикаторов в следующих случаях:

– перед переинициализацией в связи со сменой символа или периода графика, к которому прикреплена mql5-программа;

– перед переинициализацией в связи со сменой входных параметров;

– перед выгрузкой mql5-программы.

Так как функция OnDeinit () вызывается при деинициализации, то ее основное предназначение, это освобождение занимаемых ресурсов.

Под освобождением занимаемых ресурсов для индикатора подразумевается очищение графика символа от дополнительных графических объектов.

То есть помимо диаграммы индикатора, мы можем присоединять к графику символа различные объекты – линии, графические фигуры треугольник, прямоугольник и эллипс, знаки, подписи и др. Об этом мы поговорим позже.

Соответственно при деинициализации индикатора было бы неплохо все это убрать с графика символа.

Первым делом здесь используется функция Comment, которая выводит комментарий, определенный пользователем, в левый верхний угол графика:

void Comment (

argument, // первое значение

…// последующие значения

);

Для очистки от комментариев используются пустые комментарии:

Comment (»»);

Далее используется функция ObjectDelete, которая удаляет объект с указанным именем с указанного графика:

bool ObjectDelete (

long chart_id, // chart identifier

string name // object name

);

Позже мы продемонстрируем применение этих функций.

Функция OnCalculate ()

Функция OnCalculate () вызывается клиентским терминалом при поступлении нового тика по символу, для которого рассчитывается индикатор.

Хотя функция OnCalculate () имеет два вида – для индикатора, который может быть рассчитан на основе только одной из ценовых таймсерий:

int OnCalculate (const int rates_total, // размер массива price []

const int prev_calculated, // обработано баров на предыдущем вызове

const int begin, // откуда начинаются значимые данные

const double& price [] // массив для расчета

);

и для индикатора, который рассчитывается с использованием нескольких ценовых таймсерий:

1 2 3 4 5 6 7 8 9 10
На этой странице вы можете бесплатно читать книгу Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - Тимур Машнин бесплатно.
Похожие на Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - Тимур Машнин книги

Оставить комментарий