нужна функция к советнику по закрытию всех ордеров

 

Здравствуйте!. Нужна ваша помощь. Нужна функция к советнику которая закроет все ордера с определенным меджиком в случае ошибки закрытия повторит ордер по закрытию пока не закроет все ордера.

так то написал как обработку ошибок прописать не знаю.Помогите плиз. вот исходник моей функции может туда пропишите?

int zakryt()
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
if(OrderMagicNumber()!=magic)continue;

bool result = false;

switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;

//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
break;


}

if(result == false)
{
Alert("Order ", OrderTicket(), " failed to close. Error:", GetLastError() );
Sleep(3000);
}
}

return(0);
}

 
void CloseAllOrder()
{
   int tot_util=1;
   int TimeStart=GetTickCount();
   while(tot_util>0)
   {
      if(GetTickCount()-TimeStart>600000)
      {
         Alert("Что-то пошло не так, процедура закрытия ордеров завершилась аварийно!");
         Print("Что-то пошло не так, процедура закрытия ордеров завершилась аварийно!");
         break;
      }
      tot_util=0;
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS)&&OrderMagicNumber()==Magik&&OrderSymbol()==Symbol_)
         {
            RefreshRates();
            tot_util++;
            int cmd=OrderType();
            if(cmd>=2&&cmd<=5)
            {
               if(OrderDelete(OrderTicket()))
               {
                  continue;
               }
            }
            if(cmd==OP_BUY)
            {
               if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage))
               {
                  continue;
               }
            }
            if(cmd==OP_SELL)
            {
               if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage))
               {
                  continue;
               }
            }
         }
      }
   }
   return;
}
 
спасибо то что нужно было
Причина обращения: