Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное
Шрифт:
Функцией SetIndexBuffer объявленный дополнительный массив сопоставляется с буфером цвета индикатора, например:
SetIndexBuffer(1,ExtColorsBuffer,INDICATOR_COLOR_INDEX);
В свойстве #property indicator_color, раскрашиваемого графического построения, указывается несколько цветов, например:
#property indicator_color1 Red,Green,Blue
И,
В данном случае, это 0, 1 и 2.
Теперь при отрисовке диаграммы индикатора, из буфера берется значение диаграммы, по позиции значения оно сопоставляется со значением буфера цвета, и элемент диаграммы становится цветным.
Вместо свойства #property indicator_color, цвета графического построения можно задать программным способом:
Задаем количество индексов цветов для графического построения с помощью функции:
PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,3);
И задаем цвет для каждого индекса с помощью функции:
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,Red);
Где первый параметр – индекс графического построения, соответственно первое графическое построение имеет индекс 0.
Это идентично объявлению:
#property indicator_color1 Red,Green,Blue
Давайте продолжим рассмотрение свойств индикатора.
Толщина линии диаграммы индикатора задается свойством indicator_widthN, где N – номер графического построения, например:
#property indicator_width1 1
Также можно задать стиль линии диаграммы индикатора – сплошная линия, прерывистая, пунктирная, штрих-пунктирная, штрих – с помощью свойства indicator_styleN, где N – номер графического построения, например:
#property indicator_style1 STYLE_SOLID
И, наконец, свойство indicator_labelN указывает метки диаграмм индикатора в DataWindow или Окно данных, например:
#property indicator_label1 "ADX"
#property indicator_label2 "+DI"
#property indicator_label3 "-DI"
Другие свойства индикатора можно посмотреть в справочнике.
Правда можно отметить еще одну группу свойств, которая позволяет нарисовать горизонтальный уровень индикатора в отдельном окне, например:
#property indicator_level1 30.0
#property indicator_levelcolor Red
#property indicator_levelstyle STYLE_SOLID
#property indicator_levelwidth 2
В результате добавления этих строк кода в индикатор ADX, у него появится горизонтальный уровень.
Теперь, на примере индикатора ADX, при присоединении индикатора к графику в MetaTrader 5, во-первых, откроется диалоговое окно индикатора, которое во вкладке Общие отобразит значения свойств copyright, link и description.
А во вкладке Цвета отобразятся значения свойств indicator_label, indicator_color, indicator_width, indicator_style.
Само же название индикатора определяется именем файла индикатора.
К слову сказать, диалоговое окно индикатора можно открыть и после присоединения индикатора к графику, с помощью контекстного меню, щелкнув правой кнопкой мышки на индикаторе и выбрав свойства индикатора.
При наведении курсора на название индикатора в окне Navigator терминала всплывает подсказка, отображающая свойство copyright.
После присоединения индикатора свойство:
#property indicator_label1 "ADX"
работать не будет, так как в функции OnInit с помощью вызова функции:
string short_name="ADX("+string(ExtADXPeriod)+")";
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
изменена подпись индикатора на ADX(14) – период индикатора.
А вызовом функции:
PlotIndexSetString(0,PLOT_LABEL,short_name);
изменена метка индикатора в окне Окно Данных, которое открывается в меню Вид терминала.
Значения же свойств:
#property indicator_label2 "+DI"
#property indicator_label3 "-DI"
отображаются, как и было определено, во всплывающих подсказках к диаграммам индикатора и отображаются в окне Окно Данных.
В коде индикатора ADX объявленное количество буферов индикатора больше, чем количество графических построений.
Свойство indicator_buffers равно 6
А свойство indicator_plots равно 3
Сделано это для того, чтобы использовать три буфера индикатора для промежуточных расчетов.
Это массивы ExtPDBuffer, ExtNDBuffer и ExtTmpBuffer.
В функции OnCalculate индикатора, значения массивов ExtPDBuffer, ExtNDBuffer, ExtTmpBuffer рассчитываются на основе загруженной ценовой истории, а затем уже на их основе рассчитываются значения массивов ExtADXBuffer, ExtPDIBuffer, ExtNDIBuffer, которые используются для отрисовки диаграмм индикатора.
Как уже было сказано, буферы индикатора для промежуточных вычислений здесь объявляются с константой INDICATOR_CALCULATIONS, так как заранее неизвестен размер загружаемой ценовой истории.