Учимся писать эксперты для MetaTrader. Урок №18
|

Учимся писать эксперты для MetaTrader. Урок №18

Обучение MQL II. Урок 18


   Добрый день дорогие читатели! Сегодня мы напишем очень простой эксперт. Но с этой идеей ко мне обращалось уже несколько клиентов. Речь идет о наклоне скользящей средней в тренде.


   Алгоритм
   Общая идея такая. Скользящая средняя с большим периодом (>50). Берем значение на прошлом баре, это значение считаем текущим. И значение несколько баров назад, например 5. Например, у нас восходящий тренд, и наша МА(70) наклонена вверх. Значит мы имеем, МА- гипотенуза, несколько баров назад (5)-горизонтальный катет, и разница между последним значением МА и значением МА 5 баров назад вертикальный катет, образовавшегося прямоугольного треугольника. И по идее наклон можно назвать угол между МА(гипотенузой) и горизонтальным катетом. Но мы сразу имеем несколько но.


   Во-первых, единицы измерения вертикального катета – пункты, а горизонтального бары.
   Во-вторых, хоть МА у нас и большого периода, тем не менее это не прямая, поэтому угол между кривой и прямой (горизонтальным катетом) брать не совсем корректно.
   Ну и в-третьих, достаточно изменить масштаб графиков, как визуально изменится угол наклона.


   Исходя из всего выше перечисленного, я решил оставить углы в градусах, для определения величины наклона МА. Лучшим и более простым способом определения наклона МА я решил выбрать определение величины вертикального катете в пунктах. Т.е. мы, например, всегда берем разницу между прошлым значением МА и значением 4 бара назад, и получаем некую величину, чем больше эта величина, тем больше наклон.
   Как дополнительный сигнал к входу будем определят находится ли текущая цена выше МА, для лонга и ниже для шорта.


   Итак конечный алгоритм.
   Вход в лонг осуществляется, если разница между значением МА на прошлом баре и 4 бара назад больше указанной величины и цена закрытия прошлого бара больше МА на прошлом баре на 10 пунктов или более.
   Вход в шорт, наоборот, соответственно.


   Условный выход осуществляется по обратному пересечению МА ценой. Т.е. условие для закрытия лонга является превышение значение МА над ценой закрытия.


   Во внешние переменные положим период средней и величину в пунктах определяющую тренд.


   Заключение
   Хоть и с большим дродауном эксперт показал на истории (евро Н4), положительный результат. Для Н1 и ниже я не подбирал параметры, но я думаю, эффективность эксперта ухудшится при переходе на меньшие фреймы.


   /*[[
   Name := NaklonMa
   Author := forextimes
   Link := fxtest.ru
   Lots := 1.00
   Stop Loss := 50
   Take Profit := 1000
   Trailing Stop := 100
   ]]*/
   defines: tr(10),per(70);
   var: cnt(0),k(0);


   k=0; //обнудение флага, определяющего тренд


   if iMA(per,MODE_SMA,1)-iMA(per,MODE_SMA,4)>tr*point then {k=1; };// условие на возходящий тренд
   if iMA(per,MODE_SMA,1)-iMA(per,MODE_SMA,4)<-tr*point then {k=-1;};// условие на низходящий тренд


   if TotalTrades=0 then { //если открых позиций нет…


   if k=1 and c[1]-iMA(per,MODE_SMA,1)>10*point then
   {Setorder(op_buy,lots,ask,3,bid-StopLoss*point,bid+TakeProfit*point,blue);
   exit;};
   if k=-1 and iMA(per,MODE_SMA,1)-c[1]>10*point then
   {Setorder(op_sell,lots,bid,3,ask+StopLoss*point,ask-TakeProfit*point,red);
   exit;};
   //проверка на дополнительное условие и расстановка ордеров
   };


   if TotalTrades>0 then //идем проверять на условие закрытия, если есть открытые позиции
   {
   for cnt=1 to TotalTrades
   {
   if OrderValue(cnt,VAL_TYPE)<=OP_SELL and
   OrderValue(cnt,VAL_SYMBOL)=Symbol then
   {
   If OrderValue(cnt,VAL_TYPE)=OP_BUY then
   {


   if c[1]<iMA(per,MODE_SMA,1) then // условие выхода из лонга


   {
   CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet);
   Exit;
   };


   };


   If OrderValue(cnt,VAL_TYPE)=OP_SELL then
   {


   if c[1]>iMA(per,MODE_SMA,1) then


   {
   CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),ask,3,Violet); //условие выхода из шорта


   Exit;
   };
   };
   };
   };};


Компания «Fxtest»
Халхальян Артур
техническая поддержка трейдеров
artur@fxtest.ru