Статьи по MQL4
Построение средней (окончание)

Построение средней (окончание)


например, forex

Мы создали индикатор простой скользящей средней с периодом PeriodMA, теперь нам осталось задействовать параметр ShiftMA, который отвечает за смещение индикатора. Часто в теханализе требуется не только рассчитать значения индикатора, но и сместить их на какое-то количество баров вперед или назад. Это свойство называется смещением. В MQL-4 смещение индикатора достигается очень просто, достаточно любому индикаторному индексу установить признак смещения с помощью функции SetIndexShift(), для этого в блоке init() мы пишем эту простую конструкцию и получаем желаемый результат.

 
 


Набрасываем на график наш новый индикатор со смещением ноль и второй индикатор со смещением, например, три. Мы видим, что индикатор, использующий смещение, рисуется на три бара вперед, при отрицательном смещении индикатор будет рисоваться с запаздыванием. Мы можем улучшить индикатор. Когда мы смотрим в Окне Данных (Ctrl+D) значения нашего индикатора, то мы видим, что указывается имя индикатора и значение его для данного бара. Часто индикатор может содержать больше одного индекса, обычно нулевой индекс именуется по имени индикатора, а все остальные индексы именуются как Value1 , Value2 и так далее. Для того, чтобы дать более осмысленные имена индексам, служит функция SetIndexLabel(), которая задает отображаемое имя для указанного индекса. Используем в качестве имени SMA(PeriodMA), таким образом мы показали, что это простая скользящая средняя с периодом PeriodMA. Обычно эта функция также используется в блоке init().

 
 


Если мы посмотрим технический индикатор Moving Average, то увидим, что мы не использовали тип цен для расчета нашего индикатора. Обратимся к справке ME, там указано 7 стандартных ценовых констант :

 
 


Добавим новый параметр PriceType( тип цены) и изменим блок start() таким образом, чтобы наш индикатор считался не только по ценам открытия. Если мы вместо цен Close[i+k] в цикле for() будем подставлять необходимый тип цены, то больше ничего и не надо. Введем новую вспомогательную переменную double price и будем задавать ее значение в соответствии со справкой МЕ. Сделаем это для унификации пользовательского и технического индикатора, в блоке switch(PriceType) используем в качестве ключей предопределенные ценовые константы.

 
 

Кроме того, процедуру формирования метки для индекса в блоке init() сделаем также более гибкой, теперь будем отображать не только период(PeriodMA) и смещение(ShiftMA), но и тип цены, от которой построен индикатор.

 
 


На этом построение простой скользящей средней MA.mq4 будет полным.

 
 


Теперь рассмотрим еще один вариант средней. Часто бывают индикаторы, когда текущее значение индикатора зависит от предыдущего значения и текущей цены. Можно записать этот так: F[i]=F[i+1]*a+Price[i]*b, где a и b - коэффициенты, обычно меньше 1. Иногда требуют, чтобы a+b=1. Тогда F[i]=F[i+1]*(1-b)+Price[i]*b . Чем меньше коэффициент b, тем меньше реагирует индикатор на изменение цен и больше зависит от предыдущего значения индикатора. Для экспоненциальной скользящей средней(ЭСС) коэффициент b=2/(1+PeriodMA). Видим, что чем больше период ЭСС, тем более плавной будет кривая индикатора. Построим новый индикатор EMA.mq4 на базе MA.mq4. Произведем косметические изменения в блоке init()

 
 


В блоке start(), правда, появляется некоторая заминка. В самом начале, когда мы рассчитываем индикатор в первый раз, у нас нет предыдущего значения индикатора. Нам негде взять предыдущее значение и нам придется делать какое-то допущение. Первый вариант – принять соглашение, что для бара с индексом Bars-1 значение индикатора равно значению цены на этом баре (High, Open, Close или другая ценовая константа, например, {High+Low+Close}/3.0 ), а дальше рассчитывать по алгоритму. Второй вариант – для бара с индексом Bars-PeriodMA значение индикатора равно простой скользящей стредней (ПСС), а дальше опять рассчитывать по алгоритму. Первый вариант реализован в пользовательском индикаторе Moving Averages.mq4 , который идет в составе дистрибутива MetaTrader4 и находится в папке MetaTrader 4expertssamplesindicators . Поэтому мы пойдем по второму варианту, чтобы сравнить их между собой.

 
 

Блок вычисления простой средней (синего цвета) возьмем из индикатора MA.mq4. Небольшая доводка, и индикатор EMA.mq4 готов.

 
 

Видно, что в коде есть два одинаковых участка/блока, которые очень похожи друг на друга. MQL-4 позволяет объявлять свои(пользовательские) функции для однообразных вычислений. Справку по функциям можно посмотреть в «Справочнике MQL4» в разделе «Функции». Создадим функцию GetPrice(int PriceMode, int index), перенесем в нее все вычисления, тип функции зададим double.

 
 

Теперь мы заменим эти блоки одной строчкой вызова функции GetPrice() и индикатор EMA2.mq4.mq4 готов. Произведем такие же изменения с индикатором MA.mq4 и назовем его MA2.mq4. Скачать их можно здесь .

Перейти к статье «Перевод индикатора из MQL-2 в MQL-4».
 
+7 (495) 710-76-76
8 (800) 200-01-31
по России бесплатно

закрыть

Вход в личный кабинет

Для счета alpari.classic введите номер счета (буква и 4 цифры) и пароль в ЛК.

Для счетов alpari.micro и alpari.partner введите логин и пароль в МТ.

Зарегистрироваться!Забыли пароль?

 
Rambler's Top100