BreakEven

Простой скрипт MQL4 для выставления уровня StopLoss в безубыток. Для исполльзования - просто закинуть скрипт на окно инструмента, он сам определит ордера для которых возможно поставить Beven и сделает всю необходимую работу

BreakEven.mq4
//+------------------------------------------------------------------+
//|                                                    BreakEven.mq4 |
//|                                                Maxim A.Kuznetsov |
//|                                                      luxtrade.tk |
//+------------------------------------------------------------------+
#property copyright "Maxim A.Kuznetsov"
#property link      "luxtrade.tk"
#property version   "1.00"
#property strict
 
sinput int SPREAD=0;// Typical Spread(points):
 
void OnStart()
{
   int type;
   double openPrice;
   double stopLoss;
   double spread=MathMax(Ask-Bid,(SPREAD==0?Ask-Bid:SPREAD*_Point));
   double stopLevel=MathMax(MarketInfo(_Symbol,MODE_STOPLEVEL)*_Point,spread*2);
   int count=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--) {
      if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol()!=_Symbol||OrderCloseTime()!=0) continue;
      type=OrderType();
      if (type!=OP_BUY && type!=OP_SELL) continue;
      openPrice=OrderOpenPrice();
      stopLoss=OrderStopLoss();
      if (type==OP_BUY) {
         if (Bid-openPrice<stopLevel*2) { continue;} ;
         if (stopLoss!=0 && stopLoss>openPrice+spread) { continue;}  // already 
         stopLoss=NormalizeDouble(openPrice+spread*2,_Digits);
      } else if (type==OP_SELL) {
         if (openPrice-Ask<stopLevel*2) continue;
         if (stopLoss!=0 && stopLoss<openPrice-spread) continue;
         stopLoss=NormalizeDouble(openPrice-spread*2,_Digits);
      }
      bool ok=OrderModify(OrderTicket(),openPrice,stopLoss,OrderTakeProfit(),OrderExpiration());
      if (ok) count++;
   }
   Alert(StringFormat("BreakEven %s: %d orders modified",_Symbol,count));
}