Прежде всего рассмотрим как получается сигнал при рассмотрении алгоритмическим подходом в Метатрейдере. На рисунке ниже (см. рис. ниже) отображен процесс пересечения ценой МАшки.
Для нахождения такого сигнала сравниваются положение цены и МАшки на 2 и 1 баре. Нулевой бар - это текущий бар и на нем нет еще зафиксированного положения ни цены ни МАшки, поэтому и берутся два ближайших бара для анализа на факт пересечения, т. е. указанные ранее бар номер 1 и бар номер 2.
На рисунке рассмотрена ситуация пересечения ценою МАшки для сигнала на покупку, т.е. цена пересекает МАшку снизу вверх.
Таким образом, само условие звучит так: если на 2-м баре значение цены меньше чем значение МАшки, а на 1-м баре значение цены больше чем значение МАшки, то это сигнал на покупку. Соответственно, если на 2-м баре значение цены больше чем значение МАшки, а на 1-м баре значение цены меньше чем значение МАшки, то это сигнал на продажу.
Теперь, разобрав суть вопроса, можно приступить к программированию. Поскольку, использование данной процедуры часто встречается при написании советников, то логично оформить её в виде функции:
- Код: выделить все
string f_PriceMASyg(int pe, int me, int ap)
/*
Ф-ия определяет сигнал по пересечению одной МАшки и цены (на последнем закрытом баре)
"UP" - цена пересекла МАшку снизу вверх;
"DN" - цена пересекла МАшку сверху вниз;
"NO" - сигнал не определен;
Параметры:
pe - период
me - метод усреднения
ap - тип цены
*/
{
double dblMA_1 = iMA(NULL, 0, pe, 0, me, ap, 1);
double dblMA_2 = iMA(NULL, 0, pe, 0, me, ap, 2);
if(Close[2] < dblMA_2 && Close[1] > dblMA_1) return("UP");
if(Close[2] > dblMA_2 && Close[1] < dblMA_1) return("DN");
return("NO");
}
В функцию f_PriceMASyg() в качестве параметров передаются период скользящей средней, метод усреднения и тип цены при расчете скользящей средней. Предполагается, что расчеты проводятся на текущем ТФ (на котором запущен советник будет). Значение МАшки сравнивается с ценой закрытия бара Close[]. На выходе функция формирует строковое значение:
- "UP" - цена пересекла МАшку снизу вверх;
- "DN" - цена пересекла МАшку сверху вниз;
- "NO" - сигнал не определен;
Таким образом, в основном коде программы использование данной функции может выглядеть так:
- Код: выделить все
string strSyg = f_PriceMASyg(intMAPe, intMAMe, intMAAp);
if(strSyg == "UP")
{
// действия если сигнал на покупку
}
else if(strSyg == "DN")
{
// действия если сигнал на продажу
}