Download MetaTrader 5

OrderClose Template

To add comments, please log in or register
Winsor Hoang
5061
Winsor Hoang  

Does anyone have an OrderClose function that you can share with the forum? I am using the following two close functions (CareCloseOrder & CloseTrade)but they are not working very well. Do you have any recommendation to improve them? Do you think that one close function is better than the other. 

 

int CareCloseOrder(int buyorsell, double lotsize) 
   {
   bool checkroutine  = FALSE;
   color colorselect  = CLR_NONE;
   int cnt  = 0;
   int errorcheck = 0;
   double currenypricing = 0;
   if (buyorsell == 0) 
      {
      RefreshRates();
      currenypricing = Bid;
      colorselect  = Green;
      } 
  else 
      {
      RefreshRates();
      currenypricing = Ask;
      colorselect  = Red;
      }
   bool currentordercount = FALSE;

      for (cnt  = 0; cnt  < MaxCount ; cnt ++) 
         {
         currentordercount = OrderClose(OrderTicket(), lotsize, NormalizeDouble(currenypricing,Digits), 90, colorselect );
         errorcheck = 0;
         if (!currentordercount) errorcheck = GetLastError();
         if (!currentordercount) 
            {
            Sleep(delay_30s);
            RefreshRates();
            if (buyorsell == 0) 
               {
               currenypricing = Bid;
               continue;
               }
               currenypricing = Ask;
            } 
        else 
         {
            checkroutine  = TRUE;
            break;
         }
      }

   return (checkroutine );
}



void CloseTrade(int _type, int _magic) 
   {
   int ordtotal = OrdersTotal();
   for (int cnt = ordtotal - 1; cnt >= 0; cnt--)
      {
      if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == 0) continue;
      if (OrderSymbol() != Symbol()) continue;
      int ordmagic = OrderMagicNumber();
      if (ordmagic == _magic)
         {
         if (OrderType()==_type)
            {
            if (OrderClose(OrderTicket(),lot,OrderClosePrice(),90,Red)) continue;         
            }
         }

      }
   }
   
honest_knave
Moderator
2322
honest_knave  
for (cnt  = 0; cnt  < MaxCount ; cnt ++)
 

Don't count up, always count down. See here, which also gives you some sample code for correctly closing orders.


currentordercount = OrderClose(OrderTicket(), lotsize, NormalizeDouble(currenypricing,Digits), 90, colorselect );
if (OrderClose(OrderTicket(),lot,OrderClosePrice(),90,Red)) continue; 

 Check out OrderLots() and OrderClosePrice()

Winsor Hoang
5061
Winsor Hoang  
Thanks for the info. Greatly appreciated. 
To add comments, please log in or register