Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5. Тимур Машнин
Чтение книги онлайн.
Читать онлайн книгу Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 5 - Тимур Машнин страница 5
Как уже было сказано, буфера индикатора для промежуточных вычислений здесь объявляются, так как заранее неизвестен размер загружаемой ценовой истории.
В описании индикатора ADX сказано, что:
Сигнал на покупку формируется тогда, когда +DI поднимается выше – DI и при этом сам ADX растет.
В момент, когда +DI расположен выше – DI, но сам ADX начинает снижаться, индикатор подает сигнал о том, что рынок «перегрет» и пришло время фиксировать прибыль.
Сигнал на продажу формируется тогда, когда +DI опускается ниже – DI и при этом ADX растет.
В момент, когда +DI расположен ниже – DI, но сам ADX начинает снижаться, индикатор подает сигнал о том, что рынок «перегрет» и пришло время фиксировать прибыль.
Давайте, модифицируем код индикатора 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] <ExtADXBuffer [i-1]) {
ExtColorsBuffer [i] =2;
}
if (ExtPDIBuffer [i] <ExtNDIBuffer [i] &&ExtADXBuffer [i]> ExtADXBuffer [i-1]) {
ExtColorsBuffer [i] =3;
}
if (ExtPDIBuffer [i] <ExtNDIBuffer [i] &&ExtADXBuffer [i] <ExtADXBuffer [i-1]) {
ExtColorsBuffer [i] =4;
}
Откомпилируем код и получим индикатор с визуальным отображением сигналов на покупку и продажу:
В редакторе MQL5 откроем другой индикатор из папки Examples – RSI.
Данный индикатор имеет два ключевых уровня, которые определяют области перекупленности и перепроданности.
В коде индикатора эти уровни определены как свойства:
#property indicator_level1 30
#property indicator_level2 70
Давайте улучшим отображение этих уровней, добавив им цвета и стиля.
Для этого добавим свойства:
#property indicator_levelcolor Red
#property