Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - стр. 6
Давайте, модифицируем код индикатора ADX таким образом, чтобы раскрасить диаграмму ADX в четыре цвета, которые соответствуют описанным выше четырем торговым сигналам.
В качестве первого шага изменим свойство indicator_type1:
#property indicator_type1 DRAW_COLOR_LINE
Далее увеличим на единицу значение свойства indicator_buffers:
#property indicator_buffers 7
Объявим массив для буфера цвета:
double ExtColorsBuffer [];
В функции OnInit () свяжем объявленный массив с буфером цвета:
SetIndexBuffer (0,ExtADXBuffer);
SetIndexBuffer (1,ExtColorsBuffer, INDICATOR_COLOR_INDEX);
SetIndexBuffer (2,ExtPDIBuffer);
SetIndexBuffer (3,ExtNDIBuffer);
SetIndexBuffer (4,ExtPDBuffer, INDICATOR_CALCULATIONS);
SetIndexBuffer (5,ExtNDBuffer, INDICATOR_CALCULATIONS);
SetIndexBuffer (6,ExtTmpBuffer, INDICATOR_CALCULATIONS);
Тут есть хитрость – индекс буфера цвета должен следовать за индексом буфера значений индикатора. Если, например, связать массив ExtColorsBuffer с буфером с индексом 6, тогда индикатор не будет корректно отрисовываться.
В свойство indicator_color1 добавим цветов:
#property indicator_color1 LightSeaGreen, clrBlue, clrLightBlue, clrRed, clrLightPink
Увеличим толщину линии:
#property indicator_width1 2
В функции OnCalculate в конце перед закрывающей скобкой цикла for добавим код:
ExtColorsBuffer [i] =0;
if (ExtPDIBuffer [i]> ExtNDIBuffer [i] &&ExtADXBuffer [i]> ExtADXBuffer [i-1]) {
ExtColorsBuffer [i] =1;
}
if (ExtPDIBuffer [i]> ExtNDIBuffer [i] &&ExtADXBuffer [i] ExtColorsBuffer [i] =2; } if (ExtPDIBuffer [i] ExtColorsBuffer [i] =3; } if (ExtPDIBuffer [i] ExtColorsBuffer [i] =4; } Откомпилируем код и получим индикатор с визуальным отображением сигналов на покупку и продажу: В редакторе MQL5 откроем другой индикатор из папки Examples – RSI. Данный индикатор имеет два ключевых уровня, которые определяют области перекупленности и перепроданности. В коде индикатора эти уровни определены как свойства: #property indicator_level1 30 #property indicator_level2 70 Давайте улучшим отображение этих уровней, добавив им цвета и стиля. Для этого добавим свойства: #property indicator_levelcolor Red #property indicator_levelstyle STYLE_SOLID #property indicator_levelwidth 1 Теперь индикатор будет выглядеть следующим образом:
Параметры ввода и переменные индикатора
Параметры ввода это те параметры индикатора, которые отображаются пользователю перед присоединением индикатора к графику во вкладке Inputs диалогового окна.
Например, для индикатора MACD:
Тут пользователь может поменять параметры индикатора по умолчанию, и индикатор присоединится к графику с уже измененными параметрами.
Также пользователь может поменять параметры индикатора после присоединения индикатора к графику, щелкнув правой кнопкой мышки на индикаторе и выбрав свойства индикатора.
В коде индикатора такие параметры задаются Input переменными с модификатором input, который указывается перед типом данных. Как правило, Input переменные объявляются сразу после свойств индикатора.
Например, для индикатора MACD:
// – - input parameters
input int InpFastEMA=12; // Fast EMA period
input int InpSlowEMA=26; // Slow EMA period