Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное. Тимур Машнин

Читать онлайн книгу.

Продвинутое использование торговой платформы MetaTrader 5. Создание индикаторов и торговых роботов на MQL5 и Python. Издание 3-е, исправленное и дополненное - Тимур Машнин


Скачать книгу
indicator_label1 "ADX"

      работать не будет, так как в функции OnInit() с помощью вызова функции:

      string short_name="ADX("+string(ExtADXPeriod)+")";

      IndicatorSetString(INDICATOR_SHORTNAME,short_name);

      изменена подпись индикатора на ADX(14) – период индикатора.

      А вызовом функции:

      PlotIndexSetString(0,PLOT_LABEL,short_name);

      изменена метка индикатора в окне Окно Данных, которое открывается в меню Вид терминала.

      Значения же свойств:

      #property indicator_label2 "+DI"

      #property indicator_label3 "-DI"

      отображаются, как и было определено, во всплывающих подсказках к диаграммам индикатора и отображаются в окне Окно Данных.

      В коде индикатора ADX объявленное количество буферов индикатора больше, чем количество графических построений.

      Свойство indicator_buffers равно 6

      А свойство indicator_plots равно 3

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

      Это массивы ExtPDBuffer, ExtNDBuffer и ExtTmpBuffer.

      В функции OnCalculate индикатора, значения массивов ExtPDBuffer, ExtNDBuffer, ExtTmpBuffer рассчитываются на основе загруженной ценовой истории, а затем уже на их основе рассчитываются значения массивов ExtADXBuffer, ExtPDIBuffer, ExtNDIBuffer, которые используются для отрисовки диаграмм индикатора.

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

      Теперь, в описании индикатора ADX сказано, что:

      Сигнал на покупку формируется тогда, когда +DI поднимается выше – DI и при этом сам ADX растет.

      В момент, когда +DI расположен выше – DI, но сам ADX начинает снижаться, индикатор подает сигнал о том, что рынок «перегрет» и пришло время фиксировать прибыль.

      Сигнал на продажу формируется тогда, когда +DI опускается ниже – DI и при этом ADX растет.

      В момент, когда +DI расположен ниже – DI, но сам ADX начинает снижаться, индикатор подает сигнал о том, что рынок «перегрет» и пришло время фиксировать прибыль.

      Давайте, модифицируем код индикатора ADX таким образом, чтобы раскрасить диаграмму ADX в четыре цвета, которые соответствуют описанным выше четырем торговым сигналам.

      В качестве первого шага изменим свойство indicator_type1 на DRAW_COLOR_LINE.

      Далее увеличим на единицу значение свойства indicator_buffers на значение 7.

      Объявим массив для буфера цвета ExtColorsBuffer.

      И в функции OnInit() свяжем объявленный массив с буфером цвета с помощью функции SetIndexBuffer.

      Тут есть хитрость – индекс буфера цвета должен следовать за индексом буфера значений индикатора.

      Если, например, связать массив ExtColorsBuffer с буфером с индексом 6, тогда индикатор не будет корректно отрисовываться.

      В свойство indicator_color1 добавим цветов.

      И увеличим толщину линии с помощью свойства indicator_width1.

      В функции OnCalculate в конце перед закрывающей скобкой цикла for добавим код заполнения буфера цвета значениями согласно описанной нами стратегии.

      Откомпилируем код и получим индикатор с визуальным отображением сигналов на покупку и продажу:

      В редакторе


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