Close All the Old trade except Most X recent Trade

 

Hello,


I want to close all opened or which open trade automatically except 2 most recently opened trade.


My code

extern int BlindClose = 2;

void CloseOldOrder(int MagicNumber)
{
   int OldOrderClose_totalOrders = OrdersTotal();
   int OldOrderClose_count = 0;

   int      OldOrderClose_ticketArray[];
   datetime OldOrderClose_openTimeArray[];

   // Step 1: Gather all matching trades
   for(int i = 0; i < OldOrderClose_totalOrders; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {
            ArrayResize(OldOrderClose_ticketArray, OldOrderClose_count + 1);
            ArrayResize(OldOrderClose_openTimeArray, OldOrderClose_count + 1);
            OldOrderClose_ticketArray[OldOrderClose_count] = OrderTicket();
            OldOrderClose_openTimeArray[OldOrderClose_count] = OrderOpenTime();
            OldOrderClose_count++;
         }
      }
   }

   // Step 2: Sort by open time descending (most recent first)
   for(int j = 0; j < OldOrderClose_count - 1; j++)
   {
      for(int k = j + 1; k < OldOrderClose_count; k++)
      {
         if(OldOrderClose_openTimeArray[j] < OldOrderClose_openTimeArray[k])
         {
            datetime tempTime = OldOrderClose_openTimeArray[j];
            OldOrderClose_openTimeArray[j] = OldOrderClose_openTimeArray[k];
            OldOrderClose_openTimeArray[k] = tempTime;

            int tempTicket = OldOrderClose_ticketArray[j];
            OldOrderClose_ticketArray[j] = OldOrderClose_ticketArray[k];
            OldOrderClose_ticketArray[k] = tempTicket;
         }
      }
   }

   // Step 3: Close all except the most recent 'BlindClose' orders
   for(int l = BlindClose; l < OldOrderClose_count; l++)
   {
      if(OrderSelect(OldOrderClose_ticketArray[l], SELECT_BY_TICKET))
      {
         if(OrderType() == OP_BUY || OrderType() == OP_SELL)
         {
            if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, clrNONE))
               Print(__FUNCTION__ + " => Failed to Close Order #", OrderTicket(), " Error: ", GetLastError());
         }
      }
   }
}


Problem : it closing all the trade except the most recent one. But i want Most 2 recent trade should not close.

 
anuj71:

Hello,


I want to close all opened or which open trade automatically except 2 most recently opened trade.


My code


Problem : it closing all the trade except the most recent one. But i want Most 2 recent trade should not close.

Can you create a (long) array of OrderOpenTime()s and OrderTicket()s ,sort the array then close all but the last/first two elements of the array?
 

Just skip the newest two.

   for(int i = OrdersTotal() - 1 - BlindClose; i >= 0; --i) if(OrderSelect(i, SELECT_BY_POS))
      {
         if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, clrNONE))
            Print(__FUNCTION__ + " => Failed to Close Order #", OrderTicket(), " Error: ", GetLastError());
      }