При этом когда столбики гистограммы индикатора пересекают нулевую отметку снизу вверх - это служит сигналом на покупку, а когда столбики гистограммы индикатора пересекают нулевую отметку сверху вниз - это служит сигналом на продажу.
Для расчета данного алгоритма напишем отдельную функцию, которая будет возвращать стоковые значения следующего вида:
- "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") и его можно будет использовать в условии для формирования сигнала на вход в позицию.