Форекс стратегии, торговые роботы, индикаторы

Сопровождает открытые позиции простым трейлинг стопом

Функция для сопровождения открытых позиций простым трейлинг стопом. Можно задать торговый инструмент, старт и шаг трейлинг стопа.


input intTrlStartBool=true; //Применить старт трейлинг стопа
input intTrlStart=200;      //Старт трейлинг стопа
input intTrlStop=200;       //Дистанция трейлинг стопа
input intTrlStep=1;         //Шаг трейлинг стопа
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SimpleTrailingStop(string symb = "",   // имя торгового инструмента ("" — все инструменты)
                        int op = -1,       // тип рыночного ордера (-1 — все типы рыночных ордеров)
                        int mn = -1)       // магическое число ордера (-1 — все магики)
  {
   double pnt, pp;
   int    dg, tot = OrdersTotal();
   if(symb == "0")
      symb = Symbol();
   for(int i = 0; i < tot; i++)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         int type = OrderType();
         if((OrderSymbol() == symb  || symb == "") && (op == -1 || type == op))
           {
            if(mn == -1 || OrderMagicNumber() == mn)
              {
               pnt = MarketInfo(OrderSymbol(), MODE_POINT);
               dg = (int)MarketInfo(OrderSymbol(), MODE_DIGITS);
               if(type == OP_BUY)
                 {
                  pp = MarketInfo(OrderSymbol(), MODE_BID);
                  if(!TrlStartBool || pp - OrderOpenPrice() > TrlStart * pnt)
                    {
                     if(OrderStopLoss() < NormalizeDouble(pp - (TrlStop + TrlStep - 1)*pnt, dg))
                       {
                        if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(pp - TrlStop * pnt, dg), OrderTakeProfit(), 0))
                           Print("Failed to modify stop loss orders #", OrderTicket(), ". Error: ", GetLastError());
                       }
                    }
                 }
               if(type == OP_SELL)
                 {
                  pp = MarketInfo(OrderSymbol(), MODE_ASK);
                  if(!TrlStartBool || OrderOpenPrice() - pp > TrlStart * pnt)
                    {
                     if(OrderStopLoss() > NormalizeDouble(pp + (TrlStop + TrlStep - 1)*pnt, dg) || OrderStopLoss() == 0)
                       {
                        if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(pp + TrlStop * pnt, dg), OrderTakeProfit(), 0))
                           Print("Failed to modify stop loss orders #", OrderTicket(), ". Error: ", GetLastError());
                       }
                    }
                 }
              }
           }
        }
     }
  }

Входные параметры советника:

  • TrlStartBool — вкл/выкл дистанции для старта трейлинг стопа, true — используем TrailingStart, false — не используем.
  • TrlStart — расстояние в пунктах от цены открытия позиции до уровня цены, при достижении которого включится трейлинг стоп.
  • TrlStop — дистанция с которой будет вести стоп лосс от текущей цены.
  • TrlStep — шаг трейлинг стопа, для разгрузки торгового сервера от многочисленных запросов при большом количестве позиций в пятизначной котировке рекомендуется устанавливать более 1.

Входные параметры функции:

  • sy — символьное имя торгового инструмента, чьи позиции нужно сопровождать. При пустом значении, функция будет сопровождать все позиции не зависимо от торгового инструмента.
  • op — тип ордера для сопровождения, допускается вводить 0 — Buy ордера и 1 — Sell ордера.
  • mnмагический номер сопровождаемых позиций.

Смотреть так же:


Комментарии ()