Функция трейлинг-стопа по индикатору 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]
Всем приятных трейлингов!