Рассмотрим канал, построенный на одной МАшке, путем построения её от цен High - верхняя линия канала и Low - нижняя линия канала (см. скрин ниже):
В данном случае использовалась экспоненциальная скользящая средняя 40 периода, построенная по ценам High и Low.
Область "1" является областью узкого флета (на данном ТФ), область "2" - медвежий участок тренда, "1" - бычий участок тренда.
При этом следует отметить, что данный вид фильтрации особенно может быть эффективен для торговли на более быстрых периодах.
Задачей кода является детерминация наличия тренда (и какого) или флета для последующего применения в качестве фильтра сигналов на вход в рынок.
- Код: выделить все
string f_MAChannel(int tf, int pe, int me, int sh)
{
/* Закрытие свечи выше верхней линии канала - бычий тренд, закрытие свечи ниже нижней - медвежий
Канал образован МАшкой одного периода, но разным типом цены, для верхней линии канала
High, для нижней Low
Параметры:
tf - таймфрейм (0 - текущий ТФ)
pe - период МАшки
me - метод усреднения МАшки
sh - индекс сдвига назад
возвращает "UP" если свеча закрыта выше верхней линии канала
возвращает "DN" если свеча закрыта ниже нижней линии канала
возвращает "IN" если свеча закрыта внутри канала
возвращает "NO" положение цены не определено
*/
// верхняя линия канала:
double dblMAh = iMA(NULL, tf, pe, 0, me, PRICE_HIGH, sh);
// нижняя линия канала:
double dblMAl = iMA(NULL, tf, pe, 0, me, PRICE_LOW, sh);
if(Close[sh] > dblMAh) return("UP");
else if(Close[sh] < dblMAl) return("DN");
else if(Close[sh] <= dblMAh && Close[sh] >= dblMAl) return("IN");
return("NO");
}
Функция f_MAChannel:
возвращает "UP" если свеча закрыта выше верхней линии канала
возвращает "DN" если свеча закрыта ниже нижней линии канала
возвращает "IN" если свеча закрыта внутри канала
возвращает "NO" положение цены не определено.
Таким образом, поставленная задача решается. В коде советника, при получении другого сигнала на вход в сделку можно отфильтровать его на основе того, соответствует ли он тренду.