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

Чтение книги онлайн.

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

Язык программирования MQL5: Продвинутое использование торговой платформы MetaTrader 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

Скачать книгу