https://mql5tutorial.com
В этом видео мы хотим взглянуть на то, как создать советника
для этого индикатора стандартного отклонения, который может определять самый высокий
и самый низкий уровень на основе последних 200 свечей
. Итак, давайте посмотрим, как можно запрограммировать что-то подобное на MQL5
. Для этого нажмите на этот маленький символ в верхней части Metatrader
или нажмите клавишу F4. Затем вызывается мета-редактор, и здесь мы нажимаем на файл, новый файл, советник из шаблона, продолжаем. Я назову его
SimplerStandardDeviationEA, нажмите «Далее», «Далее» и закончите. Теперь все, что находится
выше этой функции OnTick, можно удалить, а также удалить две строки комментариев.
Начнем с команды include. Это позволяет нам использовать содержимое файла trade.mqh
. Он также содержит класс CTrade, экземпляр которого мы создаем
с именем trade. Мы будем использовать их позже для открытия позиций. В
функции OnTick мы начинаем с создания сигнальной переменной.
У нас все еще есть здесь, но нет ценности, потому что мы хотим равных, но определенных. Для этого
мы сначала рассчитываем цену предложения и цену покупки. Это делает
функция SymbolInfoDouble для текущей валютной пары на графике. Мы используем либо SYMBOL_ASK, либо
SYMBOL_BID, а с помощью функций NormalizeDouble и _Digits мы гарантируем, что вычисляем правильное количество десятичных
знаков . В зависимости от валютной пары это может быть трехзначное или
пятизначное число. Теперь нам также нужен массив для наших ценовых данных. Это двойной
тип, поэтому он также может содержать десятичные разряды, и с помощью функции ArraySetAsSeries
теперь мы сортируем данные от текущей свечи вниз. Функция iStdDev доступна нам
для определения наших ценностей . Он является частью MQL5 и требует некоторых
параметров. И это текущая валютная пара на графике и единица времени,
установленная на графике . Мы хотим рассчитать все это для 20 свечей без указания значения
сдвига. Мы используем MODE_SMA для SimpleMovingAverage, и результаты должны быть
рассчитаны на основе цен закрытия. С помощью функции CopyBuffer мы
теперь заполняем наш массив, используя определение, которое мы сделали выше для
буфера 0. Начиная со свечи 0 для 200 свечей со значениями. Это позволяет нам узнать
номер самой высокой свечи. Для этого мы используем функцию ArrayMaximum. Которая
смотрит в нашем массиве. Начиная со свечи 0, ищется весь массив, и в этой переменной
указывается номер самой высокой свечи. Конечно, все это доступно и в
обратном порядке. С помощью ArrayMinimum мы можем найти номер самой низкой свечи.
Остальная часть команды является то же самое здесь. И чтобы мы могли вывести текущее значение на график,
мы определяем его, получая значение из нашего массива для свечи 0. Это сокращается до шести цифр
с помощью NormalizeDouble. Потому что это тоже то, что показывает
нам здесь внизу индикатор . Мы подошли к определению сигналов. Если наша текущая свеча 0 содержит
наименьшее значение для нашего индикатора, то для нас это сигнал на покупку, а затем
мы устанавливаем здесь наш сигнал на покупку. В противном случае, если наша текущая свеча имеет наивысшее значение,
то для нас это сигнал продажи, а затем мы устанавливаем здесь свой сигнал на продажу. И
пока наш сигнал находится на продаже, а возвращаемое значение PositionsTotal дает нам
Информация по комментариям в разработке