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

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

СКАЧАТЬ массивов ExtADXBuffer, ExtPDIBuffer, ExtNDIBuffer, которые используются для отрисовки диаграмм индикатора.

      Как уже было сказано, буфера индикатора для промежуточных вычислений здесь объявляются, так как заранее неизвестен размер загружаемой ценовой истории.

      В описании индикатора 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 СКАЧАТЬ