//+------------------------------------------------------------------+
//|                                        KurkaCloseEverything.mq4  |
//|                                    Copyright © 2007, Kurka Fund. |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, KurkaFund."
#property link      "kurkafund@yahoo.com"

//Ticks
double TickBid;
double TickAsk;
int Restarts;
int err;

int start(){
   int tickStart = GetTickCount();
   //Check to make sure our pricing has not changed
   TickBid = Bid;
   TickAsk = Ask;
   Comment(" Kurka - KILL IT ALL ========================================== -CLOSING ALL OPEN AND PENDING POSITIONS- ===============================");
       // Open long positions ======================================================================================
       for (int lcnt=0;lcnt<OrdersTotal();lcnt++) {
          OrderSelect(lcnt, SELECT_BY_POS, MODE_TRADES);
             if (OrderType()==OP_BUY) {
                RefreshRates();if (Bid != TickBid || Ask != TickAsk){Restarts++;start();}
		          int lticket = OrderClose(OrderTicket(),OrderLots(),Bid,0,White);
		          if (lticket > 0) break;
                PlaySound("alert.wav");
                err=GetLastError();
                if(err==0){ 
                break;
                }
            else{
               if(err==4 || err==137 ||err==146 || err==136){ //Busy errors
                  Print ("..................Busy Error............");
                  Sleep(5);
                  Restarts++;
                  start();
                  continue;
                  }
               if(err==138){ //Requote
                  Print ("..................ReQuote Long Order..............");
                  WindowScreenShot("L_REQUOTE_"+Month()+"_D"+Day()+"_H"+Hour()+"_M"+Minute()+"_S"+Seconds()+".gif",1440,900);
                  Restarts++;
                  start();
                  continue;
                  }
                else{ //normal error
                  Print(".......................Error Code= ", err);
                  Restarts++;
                  start();
                  break;
                  }  
		           }
		         }
           }
      // Open Short positions ========================================================================================
      for (int scnt=0;scnt<OrdersTotal();scnt++) {
          OrderSelect(scnt, SELECT_BY_POS, MODE_TRADES);
             if (OrderType()==OP_SELL) {
                RefreshRates();if (Bid != TickBid || Ask != TickAsk){Restarts++;start();}
		          int sticket = OrderClose(OrderTicket(),OrderLots(),Ask,0,White);
		          if (sticket > 0) break;
                PlaySound("alert.wav");
                err=GetLastError();
                if(err==0){ 
                break;
                }
            else{
               if(err==4 || err==137 ||err==146 || err==136){ //Busy errors
                  Print ("..................Busy Error............");
                  Sleep(5);
                  Restarts++;
                  start();
                  continue;
                  }
               if(err==138){ //Requote
                  Print ("..................ReQuote Long Order..............");
                  WindowScreenShot("L_REQUOTE_"+Month()+"_D"+Day()+"_H"+Hour()+"_M"+Minute()+"_S"+Seconds()+".gif",1440,900);
                  Restarts++;
                  start();
                  continue;
                  }
                else{ //normal error
                  Print(".......................Error Code= ", err);
                  Restarts++;
                  start();
                  break;
                  }  
		           }
		         }
           }
        // Open Pending Orders  ========================================================================================
      for (int pcnt=0;pcnt<OrdersTotal();pcnt++){
          OrderSelect(pcnt, SELECT_BY_POS, MODE_TRADES);
             if (OrderType()==OP_SELLSTOP||OP_BUYSTOP||OP_BUYLIMIT||OP_SELLLIMIT){
                RefreshRates();if (Bid != TickBid || Ask != TickAsk){Restarts++;start();}
		          int pticket = OrderDelete( OrderTicket() );
		          if (pticket > 0) break;
                PlaySound("alert.wav");
                err=GetLastError();
                if(err==0){ 
                break;
                }
            else{
               if(err==4 || err==137 ||err==146 || err==136){ //Busy errors
                  Print ("..................Busy Error............");
                  Sleep(5);
                  Restarts++;
                  start();
                  continue;
                  }
               if(err==138){ //Requote
                  Print ("..................ReQuote Long Order..............");
                  WindowScreenShot("L_REQUOTE_"+Month()+"_D"+Day()+"_H"+Hour()+"_M"+Minute()+"_S"+Seconds()+".gif",1440,900);
                  Restarts++;
                  start();
                  continue;
                  }
                else{ //normal error
                  Print(".......................Error Code= ", err);
                  Restarts++;
                  start();
                  break;
                  }  
		           }
		         }
           }
  WindowScreenShot("KILL_IT_ALL_"+Month()+"_D"+Day()+"_H"+Hour()+"_M"+Minute()+".gif",1440,900); 
  Print("Script took "+(GetTickCount()-tickStart)+" milliseconds. With "+Restarts+" Restarts...");
  Restarts = 0;
  Comment(" Kurka - KILL IT ALL ========= Completed");
  ObjectsDeleteAll(); 
  return(0);
}




