Author: Copyright � 2008, ������� ��������
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
Grider2_2
//+------------------------------------------------------------------+
//|                                                      Grider2.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Àëåêñåé Õàð÷åíêî "

extern int 
         MagicNumber       = 1,
         Slippage          = 4;

extern bool
         TradeAgainAfterProfit = false, // Çàêðûâàåò âñå îòêðûòûå îðäåðà è ïîçèöèè, îñòàíàâëèâàåò òîðãîâëþ
         Orders                = true,  // Îòêëàäûâàåì îòëîæåííûå îðäåðà îò òåêóùåé öåíû èëè 
                                        // âõîäèì â ðûíîê ñðàçó, çàãëÿäûâàÿ â ãëóáü èñòîðèè
         TurnOff               = true;  // Ìåíÿåì íàïðàâëåíèå îðäåðîâ è ïîçèöèé íà ïðîòèâîïîëîæíûå
extern int
         LevelOffset       = 50,        // Îòñòóïàåì îò òåêóùåé öåíû
         LevelDistance     = 50,        // Ðàññòîÿíèå ìåæäó îðäåðàìè
         StopLoss          = 30,        // Òðåéëèíã ñòîï
         KolOrder          = 14;        // Ìàêñèìàëüíîå êîëè÷åñòâî îðäåðîâ 
extern double
         Lots_Level_1        = 1,       // Îáúåì ëîòà íà êàæäîì óðîâíå
         Lots_Level_2        = 1,
         Lots_Level_3        = 2,
         Lots_Level_4        = 3,
         Lots_Level_5        = 5,
         Lots_Level_6        = 8,
         Lots_Level_7        = 13,
         Lots_Level_8        = 21,
         Lots_Level_9        = 34,
         Lots_Level_10       = 55,
         Lots_Level_11       = 89,
         Lots_Level_12       = 144,
         Lots_Level_13       = 233,
         Lots_Level_14       = 377;

bool Open_Buy=true,Open_Sell=true;
datetime FirstTime;                            
double BestBuySL, BestSellSL;
int ticket1,ticket2,ticket3,ticket4,ticket5,ticket6,ticket7,ticket8,ticket9,ticket10,ticket11,ticket12,ticket13,ticket14;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if(LevelOffset<MarketInfo(Symbol(),MODE_STOPLEVEL))LevelOffset=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if(LevelDistance<MarketInfo(Symbol(),MODE_STOPLEVEL))LevelDistance=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if(StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL))StopLoss=MarketInfo(Symbol(),MODE_STOPLEVEL);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double OP=0;
   int ticketB=0,ticketS=0;
   bool tmp;
//----
   if(!IsConnected())return(1);

//   if(MarketInfo(Symbol(),MODE_TRADEALLOWED) != 1)return(1);

   if(!TradeAgainAfterProfit)
   {
      subCloseOrder();
      subCloseAllOrder();
      subCloseAllOrder();
      subCloseAllPending();
      subCloseAllPending();
      return(0);
   }

   if(subTotalTrade()>0)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
         if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
         if(OrderType()==OP_BUY)  
         {
            Open_Buy=true;
            Open_Sell=false;
            OP = OrderOpenPrice();
            ticket1=OrderTicket();
         }
         if(OrderType()==OP_SELL)  
         {
            Open_Buy=false;
            Open_Sell=true;
            OP = OrderOpenPrice();
            ticket1=OrderTicket();
         }
         if(OrderType()==OP_BUYSTOP)  
         {
            ticketB=OrderTicket();
         }
         if(OrderType()==OP_SELLSTOP)  
         {
            ticketS=OrderTicket();
         }
         if(OrderType()==OP_BUYLIMIT)  
         {
            ticketB=OrderTicket();
         }
         if(OrderType()==OP_SELLLIMIT)  
         {
            ticketS=OrderTicket();
         }
      }
      if(OP==0 && ticketB!=0 && ticketS!=0)return(0);
   }
   else
   {
      if(Orders)
      {
         if(TurnOff)
         {
            OP=Bid+LevelOffset*Point;
            OrderSend(Symbol(),OP_SELLLIMIT,Lots_Level_1,OP,Slippage,NormalizeDouble(OP+StopLoss*Point,Digits),NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),"",MagicNumber,0,CLR_NONE);  
            OP=Ask-LevelOffset*Point;
            OrderSend(Symbol(),OP_BUYLIMIT,Lots_Level_1,OP,Slippage,NormalizeDouble(OP-StopLoss*Point,Digits),NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),"",MagicNumber,0,CLR_NONE);  
         }
         else
         {
            OP=Ask+LevelOffset*Point;
            OrderSend(Symbol(),OP_BUYSTOP,Lots_Level_1,OP,Slippage,NormalizeDouble(OP-StopLoss*Point,Digits),NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),"",MagicNumber,0,CLR_NONE);  
            OP=Bid-LevelOffset*Point;
            OrderSend(Symbol(),OP_SELLSTOP,Lots_Level_1,OP,Slippage,NormalizeDouble(OP+StopLoss*Point,Digits),NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),"",MagicNumber,0,CLR_NONE);  
         }
         return(0);
      }
      else
      {
         ticket1 = 0;
         OpenOrder();
         if(TurnOff)
         {
            tmp=Open_Buy;
            Open_Buy=Open_Sell;
            Open_Sell=tmp;
         }
      }
   }

   ticket2 = 0;
   ticket3 = 0;
   ticket4 = 0;
   ticket5 = 0;
   ticket6 = 0;
   ticket7 = 0;
   ticket8 = 0;
   ticket9 = 0;
   ticket10 = 0;
   ticket11 = 0;
   ticket12 = 0;
   ticket13 = 0;
   ticket14 = 0;

//         Print(Open_Buy," ",Open_Sell);
      if(subTotalTrade()<=2)
      {
         if(ticketB!=0)OrderDelete(ticketB);
         if(ticketS!=0)OrderDelete(ticketS);
         //OPEN BUY
         if(Open_Buy&&!Open_Sell)
         {
            if(!Orders)
            {
               OP = Ask;
               if(ticket1==0)ticket1 = subOpenOrder(OP_BUY, Lots_Level_1, StopLoss, KolOrder*LevelDistance,MagicNumber);
            }
            if(ticket1>0&&ticket2==0)ticket2 = subOpenPendingOrder(OP_BUYSTOP, OP+(LevelDistance*Point),Lots_Level_2 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket2>0&&ticket3==0)ticket3 =subOpenPendingOrder(OP_BUYSTOP, OP+(2*LevelDistance*Point),Lots_Level_3 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket3>0&&ticket4==0)ticket4 =subOpenPendingOrder(OP_BUYSTOP, OP+(3*LevelDistance*Point),Lots_Level_4 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket4>0&&ticket5==0)ticket5 =subOpenPendingOrder(OP_BUYSTOP, OP+(4*LevelDistance*Point),Lots_Level_5 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket5>0&&ticket6==0)ticket6 =subOpenPendingOrder(OP_BUYSTOP, OP+(5*LevelDistance*Point),Lots_Level_6 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket6>0&&ticket7==0)ticket7 =subOpenPendingOrder(OP_BUYSTOP, OP+(6*LevelDistance*Point),Lots_Level_7 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket7>0&&ticket8==0)ticket8 =subOpenPendingOrder(OP_BUYSTOP, OP+(7*LevelDistance*Point),Lots_Level_8 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket8>0&&ticket9==0)ticket9 =subOpenPendingOrder(OP_BUYSTOP, OP+(8*LevelDistance*Point),Lots_Level_9 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket9>0&&ticket10==0)ticket10 =subOpenPendingOrder(OP_BUYSTOP, OP+(9*LevelDistance*Point),Lots_Level_10 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket10>0&&ticket11==0)ticket11 =subOpenPendingOrder(OP_BUYSTOP, OP+(10*LevelDistance*Point),Lots_Level_11 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket11>0&&ticket12==0)ticket12 =subOpenPendingOrder(OP_BUYSTOP, OP+(11*LevelDistance*Point),Lots_Level_12 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket12>0&&ticket13==0)ticket13 =subOpenPendingOrder(OP_BUYSTOP, OP+(12*LevelDistance*Point),Lots_Level_13 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket13>0&&ticket14==0)ticket14 =subOpenPendingOrder(OP_BUYSTOP, OP+(13*LevelDistance*Point),Lots_Level_14 ,NormalizeDouble(OP+KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
         }
              
         if(Open_Sell&&!Open_Buy)
         {
            if(!Orders)
            {
               OP = Bid;
               if(ticket1==0)ticket1 = subOpenOrder(OP_SELL, Lots_Level_1, StopLoss, KolOrder*LevelDistance,MagicNumber);
            }
            if(ticket1>0&&ticket2==0)ticket2 = subOpenPendingOrder(OP_SELLSTOP, OP-(LevelDistance*Point),Lots_Level_2 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket2>0&&ticket3==0)ticket3 = subOpenPendingOrder(OP_SELLSTOP, OP-(2*LevelDistance*Point),Lots_Level_3 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket3>0&&ticket4==0)ticket4 = subOpenPendingOrder(OP_SELLSTOP, OP-(3*LevelDistance*Point),Lots_Level_4 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket4>0&&ticket5==0)ticket5 = subOpenPendingOrder(OP_SELLSTOP, OP-(4*LevelDistance*Point),Lots_Level_5 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket5>0&&ticket6==0)ticket6 = subOpenPendingOrder(OP_SELLSTOP, OP-(5*LevelDistance*Point),Lots_Level_6 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket6>0&&ticket7==0)ticket7 = subOpenPendingOrder(OP_SELLSTOP, OP-(6*LevelDistance*Point),Lots_Level_7 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket7>0&&ticket8==0)ticket8 = subOpenPendingOrder(OP_SELLSTOP, OP-(7*LevelDistance*Point),Lots_Level_8 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket8>0&&ticket9==0)ticket9 = subOpenPendingOrder(OP_SELLSTOP, OP-(8*LevelDistance*Point),Lots_Level_9 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket9>0&&ticket10==0)ticket10 = subOpenPendingOrder(OP_SELLSTOP, OP-(9*LevelDistance*Point),Lots_Level_10 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket10>0&&ticket11==0)ticket11 = subOpenPendingOrder(OP_SELLSTOP, OP-(10*LevelDistance*Point),Lots_Level_11 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket11>0&&ticket12==0)ticket12 = subOpenPendingOrder(OP_SELLSTOP, OP-(11*LevelDistance*Point),Lots_Level_12 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket12>0&&ticket13==0)ticket13 = subOpenPendingOrder(OP_SELLSTOP, OP-(12*LevelDistance*Point),Lots_Level_13 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
            if(ticket13>0&&ticket14==0)ticket14 = subOpenPendingOrder(OP_SELLSTOP, OP-(13*LevelDistance*Point),Lots_Level_14 ,NormalizeDouble(OP-KolOrder*LevelDistance*Point,Digits),StopLoss,MagicNumber);
         }  
      }   
      //---DELETE ALL PENDING ORDERS   
      if(subTotalOpen()<1)
      {
         subCloseAllPending();
         subCloseAllPending();
         subCloseAllPending();
         return(0);
      }
      //---ModifySL
      if(subTotalOpen()>1)
      {
          
          BestSellSL = subBestSellSL();
          BestBuySL = subBestBuySL();
//          Print("BestBuySL:"+BestBuySL+"|BestSellSL:"+BestSellSL);
          int total = OrdersTotal();
          for(int cnt=0;cnt<total;cnt++)
          {
             OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

             if(OrderType()<=OP_SELL &&
                OrderSymbol()==Symbol() &&
                OrderMagicNumber()==MagicNumber)
             {
                subTrailingStop(OrderType());
             }
          }
      } 
//----
   return(0);
  }
//+------------------------------------------------------------------+
int OpenOrder()
{
   double         
         Max   = Bid+LevelOffset*Point,
         Min   = Bid-LevelOffset*Point;
         
   for(int i=0;i<Bars;i++)
   {
      if(High[i]>=Max) break;
      if(Low[i] <=Min) break;
   }
   
   if(High[i]>=Max && Low[i]<=Min)
   {
      if(High[i]-Bid<Bid-Low[i])
      {
         Open_Buy=true;
         Open_Sell=false;
      }
      else
      {
         Open_Buy=false;
         Open_Sell=true;
      }
   }
   if(High[i]>=Max && Low[i]>Min)
   {
      Open_Buy=false;
      Open_Sell=true;
   }
   if(High[i]<Max && Low[i]<=Min)
   {
      Open_Buy=true;
      Open_Sell=false;
   }
//Print(Open_Buy," ",Open_Sell," ",i);
   return(0);
}
//+------------------------------------------------------------------+
int subOpenOrder(int type, double Lotz, int stoploss, int takeprofit,int MagicNumber)
{
   int NumberOfTries = 10;
   string TicketComment = "Hedge EA";
   int
         ticket      = 0,
         err         = 0,
         c           = 0;
         
   double         
         aStopLoss   = 0,
         aTakeProfit = 0,
         bStopLoss   = 0,
         bTakeProfit = 0;

   if(stoploss!=0)
   {
      aStopLoss   = NormalizeDouble(Ask-stoploss*Point,4);
      bStopLoss   = NormalizeDouble(Bid+stoploss*Point,4);
   }
   
   if(takeprofit!=0)
   {
      aTakeProfit = NormalizeDouble(Ask+takeprofit*Point,4);
      bTakeProfit = NormalizeDouble(Bid-takeprofit*Point,4);
   }

   if(type==OP_BUY)
   {
      for(c=0;c<NumberOfTries;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUY,Lotz,Ask,Slippage,aStopLoss,aTakeProfit,"",MagicNumber,0,CLR_NONE);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELL)
   {   
      for(c=0;c<NumberOfTries;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELL,Lotz,Bid,Slippage,bStopLoss,bTakeProfit,"",MagicNumber,0,CLR_NONE);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }  
   return(ticket);
}
//+------------------------------------------------------------------+
void subCloseAllPending()
{
   int
         NumberOfTries=10,
         cnt, 
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;

   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderSymbol() == Symbol() &&
         OrderMagicNumber()==MagicNumber)
      {
         switch(OrderType())
         {               
            case OP_BUYLIMIT :
            case OP_BUYSTOP  :
            case OP_SELLLIMIT:
            case OP_SELLSTOP :
               OrderDelete(OrderTicket());
         }
      }
   }      
}
//+------------------------------------------------------------------+
int subTotalTrade()
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber)) total++;
   }
   return(total);
}
//+------------------------------------------------------------------+
int subTotalOpen()
{
   int
      cnt, 
      total = 0;

   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber)) total++;
   }
   return(total);
}

//+------------------------------------------------------------------+
int subOpenPendingOrder(int type, double OpenPrice,double Lots ,double takeprofit,double stoploss,int MagicNumber)
{
   string TicketComment = "Andrew EA";
   int
         ticket      = 0,
         err         = 0,
         c           = 0;
         
    double         
         aStopLoss   = 0,
         aTakeProfit = 0,
         aOpenPrice  = 0,
         bStopLoss   = 0,
        // OpenPrice  = 0,
         bTakeProfit = 0;
         
   if(stoploss!=0)
   {
      aStopLoss   = NormalizeDouble(OpenPrice-stoploss*Point,Digits);
      bStopLoss   = NormalizeDouble(OpenPrice+stoploss*Point,Digits);
   }

   if(type==OP_BUYSTOP)
   {
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,OpenPrice,6,aStopLoss,takeprofit,TicketComment,MagicNumber,0,CLR_NONE);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   if(type==OP_SELLSTOP)
   {   
      for(c=0;c<10;c++)
      {
         ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,OpenPrice,6,bStopLoss,takeprofit,TicketComment,MagicNumber,0,CLR_NONE);
         err=GetLastError();
         if(err==0)
         { 
            if(ticket>0) break;
         }
         else
         {
            if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
            {
               Sleep(5000);
               continue;
            }
            else //normal error
            {
               if(ticket>0) break;
            }  
         }
      }   
   }
   return(ticket);  
}
//+------------------------------------------------------------------+
double subBestBuySL()
{
   int
      cnt, 
      total = 0;
   double SL = 0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber))
        {
           if(OrderStopLoss()>SL)
           {
               SL = OrderStopLoss();
           }
        }
   }
   return(SL);
}
//+------------------------------------------------------------------+
double subBestSellSL()
{
   int
      cnt, 
      total = 0;
   double SL = 10000000;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&
        (OrderMagicNumber()==MagicNumber))
        {   
           if(OrderStopLoss()<SL)
           {
               SL = OrderStopLoss();
           }
        }   
   }
   return(SL);
}
//+------------------------------------------------------------------+
void subTrailingStop(int Type)
{
   if(Type==OP_BUY)   // buy position is opened   
   {
//----------------------- AFTER PROFIT TRAILING STOP      
        
            if(OrderStopLoss()<BestBuySL)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),subBestBuySL(),OrderTakeProfit(),0,Green);
               return(0);
            }
          
   }         
   if(Type==OP_SELL)   // sell position is opened   
   {
//----------------------- AFTER PROFIT TRAILING STOP      
     
            if(OrderStopLoss()>BestSellSL)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),subBestSellSL(),OrderTakeProfit(),0,Red);
               return(0);
            }
            
           
           
        
   }
}
//+------------------------------------------------------------------+
void subCloseAllOrder()
{
   int
         NumberOfTries=10,
         cnt, 
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;

   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderSymbol() == Symbol() &&
         (OrderMagicNumber()==MagicNumber))
      {
         switch(OrderType())
         {
            case OP_BUY      :
               for(c=0;c<NumberOfTries;c++)
               {
                  ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_SELL     :
               for(c=0;c<NumberOfTries;c++)
               {
                  ticket=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_BUYLIMIT :
            case OP_BUYSTOP  :
            case OP_SELLLIMIT:
            case OP_SELLSTOP :
               OrderDelete(OrderTicket());
         }
      }
   }      
}
//+------------------------------------------------------------------+
void subCloseOrder()
{
   int
         NumberOfTries=10,
         cnt, 
         total       = 0,
         ticket      = 0,
         err         = 0,
         c           = 0;

   total = OrdersTotal();
   for(cnt=total-1;cnt>=0;cnt--)
   {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

      if(OrderSymbol() == Symbol() &&
         (OrderMagicNumber()==MagicNumber))
      {
         switch(OrderType())
         {
            case OP_BUY      :
               for(c=0;c<NumberOfTries;c++)
               {
                  ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
            case OP_SELL     :
               for(c=0;c<NumberOfTries;c++)
               {
                  ticket=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet);
                  err=GetLastError();
                  if(err==0)
                  { 
                     if(ticket>0) break;
                  }
                  else
                  {
                     if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
                     {
                        Sleep(5000);
                        continue;
                     }
                     else //normal error
                     {
                        if(ticket>0) break;
                     }  
                  }
               }   
               break;
               
         }
      }
   }      
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---