Использование индикатора MACD в коде

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Использование индикатора MACD в коде

Сообщение Haos » 21 сен 2016, 10:35

Использование индикатора MACD (МАКДи) в коде экспертов или индикаторов не редкость, т.к. данный индикатор весьма распространен и способен генерировать несколько видов сигналов. Одним из таких сигналов является пересечение гистограммы МАКДи нулевого уровня.

01.png

При этом когда столбики гистограммы индикатора пересекают нулевую отметку снизу вверх - это служит сигналом на покупку, а когда столбики гистограммы индикатора пересекают нулевую отметку сверху вниз - это служит сигналом на продажу.
Для расчета данного алгоритма напишем отдельную функцию, которая будет возвращать стоковые значения следующего вида:
- "UP" если гистограмма пересекла вверх нулевой уровень;
- "DN" если гистограмма пересекла вниз нулевой уровень;
- "NO" если нет пересечения.
В качестве передаваемых параметров в функцию будут:
tf - таймфрейм (0 - текущий ТФ);
pefa - период быстрой МАшки (обычно 12);
pesl - период медленной МАшки (обычно 26);
pesi - период сигнальной МАшки (обычно 9);
maap - тип используемой цены (обычно Close);
shi - количество баров назад.
Параметры МАКДи редко меняются, т.е. обычно используются те, что даны в индикаторе МАКДи по умолчанию, когда мы его бросаем на график цены. В данной функции помимо них есть еще параметр ТФ, т.е. можно задавать любой ТФ, а не только текущий и параметр, определяемый, сигнал на заданном количестве баров назад, т.е. можно получить значение функции не только на последнем закрытом баре, но и на любом доступном ранее.
Сам код функции:
Код: выделить все
string f_MACDGSyg(int tf, int pefa, int pesl, int pesi, int maap, int shi)                 
{
/*
   Ф-ия определяет сигнал по пересечению гистограммы MACD нулевого уровня
   возвращает "UP" если гистограмма пересекла вверх нулевой уровень
   возвращает "DN" если гистограмма пересекла вниз нулевой уровень
   возвращает "NO" если нет пересечения
   Параметры:
   tf    - таймфрейм (0 - текущий ТФ)
   pefa  - период быстрой МАшки
   pesl  - период медленной МАшки   
   pesi  - период сигнальной МАшки
   maap  - тип используемой цены
   shi   - количество баров назад
*/
   // значение основной линии MACD shi баров назад:
   double dblMACDM_1 = iMACD(NULL, tf, pefa, pesl, pesi, maap, MODE_MAIN, shi);
   // значение основной линии MACD shi + 1 баров назад
   double dblMACDM_2 = iMACD(NULL, tf, pefa, pesl, pesi, maap, MODE_MAIN, shi + 1);
   // значение сиглальной линии MACD shi баров назад
   double dblMACDS_1 = iMACD(NULL, tf, pefa, pesl, pesi, maap, MODE_SIGNAL, shi);
   // значение сиглальной линии MACD shi + 1 баров назад
   double dblMACDS_2 = iMACD(NULL, tf, pefa, pesl, pesi, maap, MODE_SIGNAL, shi + 1);   
   
   // значение гистограммы MACD shi баров назад:
   double dblMACDG_1 = NormalizeDouble(dblMACDM_1 - dblMACDS_1, 5);
   // значение гистограммы MACD shi + 1 баров назад:
   double dblMACDG_2 = NormalizeDouble(dblMACDM_2 - dblMACDS_2, 5);
   
   if(dblMACDG_1 > 0 && dblMACDG_2 < 0) return("UP");
   if(dblMACDG_1 < 0 && dblMACDG_2 > 0) return("DN");
   
return("NO");
}

Для её использования в коде советника нужно создать строковую переменную и присвоить ей значение указанной функции. Например, так:
Код: выделить все
string strMACDGSyg = f_MACDGSyg(0, 12, 26, 9, PRICE_CLOSE, 1);

Само-собой, указанные параметры в коде скорее всего будут в качестве переменных. Итак, переменная strMACDGSyg после этого получит одно из трех указанных значений, возвращаемых функцией (например, "UP") и его можно будет использовать в условии для формирования сигнала на вход в позицию.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 71

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения