//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void TrailingAllBU()
{
bool rez=1;
slB=0; slS=0;
double AllBU=0,WeightB=0,WeightS=0,LotsB=0,LotsS=0;
BuyBU=0;SellBU=0;BuyTralBU=0;SellTralBU=0;
//================================================== Цикл определения БУ ================================================
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
{
WeightB+=OrderOpenPrice()*OrderLots();
LotsB+=OrderLots();
}
if(OrderType()==OP_SELL)
{
WeightS+=OrderOpenPrice()*OrderLots();
LotsS+=OrderLots();
}
}
if(LotsB>0)
BuyBU = NormalizeDouble(WeightB/LotsB + MinTP*_Point,_Digits); // БУ+ покупок
if(LotsS>0)
SellBU = NormalizeDouble(WeightS/LotsS - MinTP*_Point,_Digits); // БУ+ продаж
//============================================ Цикл траления SL BU каждого направления =================================
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY)
if(Bid>BuyBU+TrailingStop*_Point) // Если Bid оторвалась вверх от БУ покупок на дистанцию трала,
if(OrderStopLoss()<Bid-TrailingStop*_Point) // и если SL ордера ниже Bid более, чем на дистанцию трала,то
{
slB = NormalizeDouble(Bid-TrailingStop*_Point,_Digits); // подтягиваем SL вверх к цене Bid на дистанцию трала.
PutHLine("BU BUY",slB,clrBlue);
if(OrderStopLoss()!=slB)
rez=OrderModify(OrderTicket(),OrderOpenPrice(),slB,OrderTakeProfit(),0,Yellow);
}
if(OrderType()==OP_SELL)
if(Ask<SellBU-TrailingStop*_Point) // Если Ask оторвалась вниз от БУ продаж на дистанцию трала,
if(OrderStopLoss()>Ask+TrailingStop*_Point) // и если SL ордера выше Ask более, чем на дистанцию трала,то
{
slS = NormalizeDouble(Bid+TrailingStop*_Point,_Digits); // подтягиваем SL вниз к цене Ask на дистанцию трала.
PutHLine("BU SELL",slS,clrRed);
if(OrderStopLoss()!=slS)
rez=OrderModify(OrderTicket(),OrderOpenPrice(),slS,OrderTakeProfit(),0,Yellow);
}
}
}
//+------------------------------------------------------------------+

TraxTibiDoh_mod1.mq4 (14 Kb)
Сейчас приболел, надеюсь в след. заход все таки будет норм сова.
OSS5