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

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

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


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

      Функция OnInit

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

      Функция OnInit() вызывается сразу после загрузки индикатора и соответственно используется для его инициализации.

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

      Давайте разберем некоторые из этих пунктов более подробно.

      Как уже было показано, привязка массивов к буферам индикатора осуществляется с помощью функции SetIndexBuffer.

      Где data_type может быть INDICATOR_DATA (данные индикатора для отрисовки, по умолчанию, можно не указывать), INDICATOR_COLOR_INDEX (цвет индикатора), INDICATOR_CALCULATIONS (буфер промежуточных расчетов индикатора).

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

      Каждый индекс массива типа INDICATOR_COLOR_INDEX соответствует индексу массива типа INDICATOR_DATA, а значение индекса массива типа INDICATOR_COLOR_INDEX определяет цвет отображения индекса массива типа INDICATOR_DATA.

      Значение индекса массива типа INDICATOR_COLOR_INDEX, при его установке, берется из свойства #property indicator_colorN как индекс цвета в строке.

      Индекс буфера типа INDICATOR_COLOR_INDEX должен следовать за индексом буфера типа INDICATOR_DATA.

      После привязки динамического массива к буферу индикатора можно поменять порядок доступа к массиву от конца к началу, т.е. значение массива с индексом 0 будет соответствовать последнему полученному значению индикатора. Сделать это можно с помощью функции ArraySetAsSeries.

      При применении функции ArraySetAsSeries физическое хранение данных массива не меняется, в памяти, массив, как и прежде, хранится в порядке от первого значения до последнего значения.

      Функция ArraySetAsSeries меняет лишь программный доступ к элементам массива – от последнего элемента массива к первому элементу массива.

      В функции OnInit() также может осуществляться проверка входных параметров на корректность, так как пользователь может ввести все, что угодно.

      При этом значение входного параметра переназначается с помощью глобальной переменной, и далее в расчетах используется уже значение глобальной переменной.

      Например, для индикатора ADX это выглядит так:

      здесь ExtADXPeriod – глобальная переменная, а InpPeriodADX – входной параметр.

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

      При этом такой символ может определяться пользователем.

      В функции OnInit() также полезно проверить этот входной параметр на корректность.

      Например, в коде индикатора MACD пусть определен входной параметр:

      input string symbol=" ";

      Объявим глобальную переменную:

      string name=symbol;

      И


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