Трейлинг-стоп по MA (трал по «машке»)

Функция трейлинг-стопа по индикатору Moving Average

Внешние переменные:

input int periodMA = 20; // период МА
input bool TralOnlyProfit = true; // тралить только профитные ордера или все
input int Step = 1;// можно настроить шаг трала

Сама функция трейлинга по МА (лайкните, и функция откроется):
[sociallocker]

void SimpleTrailing() 
{
   int tip,Ticket,STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   double OSL,OOP,StL=iMA(NULL,Period(),periodMA,0,MODE_SMA,PRICE_CLOSE,0),
   StLoB=NormalizeDouble(StL-Step*Point,Digits),
   StLoS=NormalizeDouble(StL+Step*Point,Digits);
   
   for (int i=0; i<OrdersTotal(); i++) 
   {  
      if (OrderSelect(i, SELECT_BY_POS))
      {  
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber() == Magic3)
         {
            OSL   = OrderStopLoss();
            OOP   = OrderOpenPrice();
            Ticket = OrderTicket();
            if (tip==OP_BUY)             
            {
               if (StLoB < OOP && TralOnlyProfit) continue;
               if (StLoB > NormalizeDouble(Bid-STOPLEVEL*Point,Digits)) continue;
               if (StLoB > OSL)
               {  
                  if (!OrderModify(Ticket,OOP,NormalizeDouble(StLoB,Digits),OrderTakeProfit(),0,White)) Print("Error order ",Ticket);
               }
            }                                         
            if (tip==OP_SELL)        
            {
               if (StLoS > OOP && TralOnlyProfit) continue;
               if (StLoS < NormalizeDouble(Ask+STOPLEVEL*Point,Digits)) continue;
               if (StLoS < OSL || OSL==0)
               {  
                  if (!OrderModify(Ticket,OOP,NormalizeDouble(StLoS,Digits),OrderTakeProfit(),0,White)) Print("Error order ",Ticket);
               }
            } 
         }
      }
   }
 }

[/sociallocker]
Всем приятных трейлингов!


Поделись с друзьями:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *