Функция для сопровождения открытых позиций простым трейлинг стопом. Можно задать торговый инструмент, старт и шаг трейлинг стопа.
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 — магический номер сопровождаемых позиций.
Написать комментарий
Комментарии ()