На приведенном ниже скрине (см. рис. ниже) параметр конверта период соответствует 200 (SMA), отклонение в процентах от средней - 1,9%.
Видно, что выход цены за пределы конверта сигнализирует о возможном дальнейшем скором возврате цены к скользящей средней.
Напишем функцию, которая будет определять положение цены относительно линий конверта (верхней и нижней). Если цена выше верхней линии, то функция возвращает значение "UP", если ниже нижней линии - "DN", если же цена внутри линий конверта, то - "IN".
- Код: выделить все
string f_EnvelopeSyg(string sy, int tf, int pe, int me, int ap, double de, int sh)
{
/*
Определяет положение цены относительно линий Конверта
"UP" - цена Bid выше верхней заданной линии конверта;
"DN" - цена Ask ниже нижней заданной линии конверта;
"IN" - цена внутри конверта (ниже верхней линии и выше нижней);
Параметры:
sy - имя символа ("0" - текущий символ)
tf - ТФ
pe - период
me - метод усреднения
ap - тип цены
de - отклонение (в процентах)
sh - сдвиг
*/
if(sy == "0") sy = Symbol();
double dbl_EnvH = iEnvelopes(sy, tf, pe, me, 0, ap, de, MODE_UPPER, sh);
double dbl_EnvL = iEnvelopes(sy, tf, pe, me, 0, ap, de, MODE_LOWER, sh);
double dbl_Ask = MarketInfo(sy, MODE_ASK);
double dbl_Bid = MarketInfo(sy, MODE_BID);
if(dbl_Bid >= dbl_EnvH) return("UP");
else if(dbl_Ask <= dbl_EnvL) return("DN");
else if((dbl_Bid >= dbl_EnvL) && (dbl_Ask <= dbl_EnvH)) return("IN");
return("NO");
}