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

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

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

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

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

позиция – это самые свежие данные. Четвертый параметр – это наш размер данных, которые необходимо рассчитать в вызове функции OnCalculate (), и последний параметр – это обычно динамический массив, привязанный к буферу индикатора, куда производится копирование.

      Тут есть вопрос, как связать второй параметр функции CopyBuffer с индексом буфера используемого индикатора.

      Это определяется вызовом функции SetIndexBuffer в используемом индикаторе. Например, для индикатора ADX:

      SetIndexBuffer (0,ExtADXBuffer);

      SetIndexBuffer (1,ExtPDIBuffer);

      SetIndexBuffer (2,ExtNDIBuffer);

      Отсюда нулевой индекс связан с буфером самого индикатора ADX, 1 индекс связан с буфером индикатора направленности +DI, 2 индекс связан с буфером индикатора направленности —DI.

      Таким образом, для связывания второго параметра функции CopyBuffer с индексом буфера используемого индикатора, нужно знать код используемого индикатора.

      Также для заполнения буфера индикатора значениями, может использоваться цикл, например:

      for (int i=start; i <rates_total &&!IsStopped ();i++)

      {

      }

      Здесь start – это стартовая позиция, с которой начинается заполнение буфера индикатора.

      При значении prev_calculated=0, значение start это, как правило, 0, при значении prev_calculated= rates_total, зачение start=prev_calculated-1.

      Если же перед реализацией цикла с помощью функции ArraySetAsSeries поменять порядок доступа к массивам буферов индикатора и цен, тогда цикл примет вид:

      for (int i=start; i> =0;i – ) {

      }

      Где start=rates_total-1, если prev_calculated=0, и start=0, если prev_calculated= rates_total.

      Пример создания индикатора

      В качестве примера рассмотрим создание индикатора, который будет реализовывать форекс стратегию «Impulse keeper» (Ловец импульсов) и показывать на графике сигналы на покупку и продажу.

      В данной стратегии применяются четыре индикатора:

      Экспоненциальная скользящая средняя с периодом 34 для цены High.

      Экспоненциальная скользящая средняя с периодом 34 для цены Low.

      Экспоненциальная скользящая средняя с периодом 125 для цены Close.

      Parabolic SAR.

      Сигналы на покупку и продажу в данной стратегии описываются следующим образом.

      Сигнал на покупку: зеленая свеча закрывается выше EMA34 High и EMA34 Low, зеленая свеча выше EMA125 и Parabolic SAR.

      Сигнал на продажу: красная свеча закрывается ниже EMA34 Low и EMA34 High, красная свеча ниже EMA125 и Parabolic SAR.

      Давайте, реализуем эту стратегию в коде, который будет отображать на графике стрелки вверх и вниз сигналов на покупку и продажу.

      Откроем MQL5 редактор и в меню File выберем New. В диалоговом окне MQL Wizard выберем Custom Indicator и нажмем кнопку Далее. Введем имя индикатора Impulse keeper, имя автора и ссылку и нажмем два раза Далее, а затем Готово.

      В результате мы получим код индикатора с пустыми функциями OnInit и OnCalculate.

      Создание индикатора начнем с определения его свойств.

      Количество буферов индикатора определим 8.

      2 буфера – данные и цвет, для

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