Трейлинг стоп для сетки

 

Здравствуйте, имеется вот такой трейлинг стоп, он отлично тралит один ордер. Подскажите, пожалуйста, как переделать, чтобы он тралил несколько ордеров, которые были открыты по усреднению. У меня имеется функция выставления единого тейк-профита на усреднеющиеся ордера, пробовал их синтезировать, ничего не получается. Тоже сюда прикреплю на всякий случай.



extern bool UseTrailing  = true; // Вкл\выкл трейлинг стоп
extern int lMinProfit    = 30;   // Мин. кол-во пунктов покупка
extern int sMinProfit    = 30;   // Мин. кол-во пунктов продажа
extern int lTrailingStop = 15;   // Уровень выставления трала покупка
extern int sTrailingStop = 15;   // Уровень выставления трала продажа
extern int lTrailingStep = 5;    // Шаг трала покупка
extern int sTrailingStep = 5;    // Шаг трала продажа

//+------------------------------------------------------------------+
//|  Трейлинг                                                        |
//+------------------------------------------------------------------+
void TrailingPositions(int otype) 
{
  int cnt = OrdersTotal();

  for (int i=0; i<cnt; i++) {
        if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
        if (OrderSymbol() != Symbol()) continue;                

        if (OrderType() == OP_BUY && otype == OP_BUY) {
        if (Bid-OrderOpenPrice() > lMinProfit*Point) {
                if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
                if(OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point, OrderTakeProfit(), 0, Blue))
                Print("Работает трейлинг");
                }
        }
        }

        if (OrderType() == OP_SELL && otype == OP_SELL) {
        if (OrderOpenPrice()-Ask > sMinProfit*Point) {
                if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point || OrderStopLoss() == 0) {
                if(OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point, OrderTakeProfit(), 0, Red))
                Print("Работает трейлинг");
                }
        }
        }
  }
  
}


//+------------------------------------------------------------------+
// Фунция выставления единого Тейк-профита
//+------------------------------------------------------------------+
void ModifyOrders(int otype)
{
  double avg_price, order_lots = 0;
  double price = 0;
  double tp = 0;
  
  for (int trade = OrdersTotal() -1; trade >=0; trade--)
    {
    if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) 
         {
           price += OrderOpenPrice() * OrderLots();
           order_lots += OrderLots();
         }
    }
  }
  avg_price = NormalizeDouble(price / order_lots, Digits);
  
  if (otype == OP_BUY)  tp = NormalizeDouble(avg_price + TakeP*Point,Digits);
  if (otype == OP_SELL) tp = NormalizeDouble(avg_price - TakeP*Point,Digits);
  
  for (int trade = OrdersTotal() -1; trade >=0; trade--)
  {
    if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype) 
         {
           if(OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0))
              Print("Ордера успешно модифицированы");
         }
    }
  }
}