button_orderclose_v1

Author: Copyright 2015, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
button_orderclose_v1
//+------------------------------------------------------------------+
//|                                                     magic_no.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

string bname="";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    datetime x = D'2015.07.07 09:00:00';
    bname="B"+TimeToStr(TimeCurrent());
    if(!ObjectCreate(0,bname,OBJ_BUTTON,0,0,0))
     {
      Print("failed to create the button! Error code = ",GetLastError());
      return(false);
     }
//--- set button coordinates
   ObjectSetInteger(0,bname,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,bname,OBJPROP_XDISTANCE,350);
   ObjectSetInteger(0,bname,OBJPROP_YDISTANCE,10);
   ObjectSetString(0,bname,OBJPROP_TEXT,"Close Market Orders and Delete Pending Orders");
   ObjectSetInteger(0,bname,OBJPROP_XSIZE,300);
   ObjectSetInteger(0,bname,OBJPROP_YSIZE,30);
//--- set button size

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+---------
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
//OnChartEvent(CHARTEVENT_OBJECT_CLICK,D'2015.07.07 02:00:00',0.71015,bname);
{
   if(CHARTEVENT_OBJECT_CLICK==true && sparam==bname)
   {
    while(CloseAllOrders(0,10)!=0)
    {
     Sleep(20);
    }
   
   } 
}

int CloseAllOrders(int MagicNumber,int Slippage=10)
{
   int cl = 0;
   int TotalOrder=OrdersTotal();
   for(int i =0;i <TotalOrder;i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {   
            switch(OrderType())
            {
               case OP_BUY:
                           if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
                           {
                              Print("Buy Order Closed successfully");
                           }
                           else
                           {
                              cl=-1;
                               int Error = GetLastError() ;
                               if(Error ==129 )
                               {
                                   Alert("Invalid price. Retrying..");
                                   RefreshRates();                     // Update data
                                   if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
                                   {
                                       cl = 0 ; 
                                       Print("Buy Order Closed successfully");
                                   }
                               }   
                               else if(Error ==135 )
                               {       // Price changed
                                    RefreshRates();                
                                     if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
                                   {
                                       cl = 0 ; 
                                       Print("Buy Order Closed successfully");
                                   }               // Renew data
                               }  
                                else if(Error ==136 )
                               {       // Price changed
                                   while(RefreshRates()==false)     // Before new tick
                                    Sleep(1);                    
                                     if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
                                   {   
                                       cl = 0 ; 
                                       Print("Buy Order Closed successfully");
                                   }        // Error is overcomable
                                else if(Error ==146 )
                               {       // Price changed
                                   while(RefreshRates()==false)     // Before new tick
                                    Sleep(1);                    
                                   if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrBlue))
                                   {
                                       cl = 0 ; 
                                       Print("Buy Order Closed successfully");
                                   }               // Renew data
                               }                    // Error is overcomable
                                
                              //Print("Buy Order place Error #",GetLastError());
                           }
                          
                       }
                           break;           
               case OP_SELL:
                           if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed)) 
                           {
                              Print("Sell Order Closed successfully");
                           }
                           else
                           {
                               cl=-2;
                               int Error = GetLastError(); 
                               if(Error ==129 )
                               {
                                   Alert("Invalid price. Retrying..");
                                   RefreshRates();                     // Update data
                                     if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed)) 
                                    {
                                         cl = 0 ; 
                                       Print("Sell Order Closed successfully");
                                    }
                               }   
                               else if(Error ==135 )
                               {       // Price changed
                                    RefreshRates();                
                                   if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed)) 
                                    {
                                         cl = 0 ; 
                                       Print("Sell Order Closed successfully");
                                    }           // Renew data
                               }  
                                else if(Error ==136 )
                               {       // Price changed
                                   while(RefreshRates()==false)     // Before new tick
                                    Sleep(1);                    
                                   if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed)) 
                                    {
                                         cl = 0 ; 
                                       Print("Sell Order Closed successfully");
                                    }
                               }   // Error is overcomable
                                else if(Error ==146 )
                               {       // Price changed
                                   while(RefreshRates()==false)     // Before new tick
                                    Sleep(1);                    
                                  if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed)) 
                                    {
                                         cl = 0 ; 
                                       Print("Sell Order Closed successfully");
                                    }        // Renew data
                               }                    // Error is overcomable
                                
                              //Print("Sell close Place Error #",Error);
                           }
                           break;
               case OP_BUYLIMIT  :  if(OrderDelete(OrderTicket(),clrBlue))
                                       {
                                          Print("BUYLIMIT Order Closed successfully");
                                       }
                                       else
                                       {
                                          cl=-7;
                                          Print("Buy limit delete Error #",GetLastError());
                                       }
                                       break; 
               case OP_SELLLIMIT :  if(OrderDelete(OrderTicket(),clrBlue))
                                    {
                                       Print("SELLLIMIT Order Closed successfully");
                                    }
                                    else
                                    {
                                       cl=-4;
                                       Print("SELLLIMIT Order Deletion failed with Error #",GetLastError());
                                    }
                                    break;
               case OP_BUYSTOP   :  if(OrderDelete(OrderTicket(),clrBlue))
                                    {
                                       Print("BUYSTOP Order Closed successfully");
                                    }
                                    else
                                    {
                                       cl=-5;
                                        Print("Buy Stop deletion Error #",GetLastError());
                                    }
                                    break;
               case OP_SELLSTOP  :  if(OrderDelete(OrderTicket(),clrBlue))
                                    {
                                       Print("SELLSTOP Order Closed successfully");
                                    }
                                    else
                                    {
                                       cl=-6;
                                       Print("SELLStop Order Deletion failed with Error #",GetLastError());
                                    }
                                    break;
               
            }
         }
      }
      else
      {
         cl=-3;
      }
   }
   return(cl);
}

Comments