Close_Orders_V0_02

Author: Robbie Ruan Ver 0.02 2011.11.06
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
Close_Orders_V0_02
//+------------------------------------------------------------------+
//|                                                CloseOrders.mq4   |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|History:                                                           
//|Ver 0.01 2009.5.26                                                
//|Ver 0.02 2011.11.06  
//|   1. Added time control                                            
//|   2. changed some names for convenient use                                                
//+------------------------------------------------------------------+

#property copyright "Robbie Ruan Ver 0.02 2011.11.06"
#property link      "robbie.ruan@gmail.com"
extern bool    CloseAllSymbols = true; // if CloseAllSymbols = false, just close the symbol you are applying your EA; if CloseAllSymbols = true, it will close all symbol satisfying the upper condition.
extern bool    CloseOpenLongOrders = true; // if close open positions
extern bool    CloseOpenShortOrders = true; // if close open positions
extern bool    ClosePendingLongOrders = true;
extern bool    ClosePendingShortOrders = true;
extern string  Note1 = "If JustCloseSpecificMagicNumber is 0, close all MagicNumber orders;if JustCloseSpecificMagicNumber is not 0, just close the specific MagicNumber orders";
extern int     JustCloseSpecificMagicNumber = 0;
extern string  Note2 = "Just close orders whose open prices are with this range";
extern bool    JustCloseOrdersWithinTheRange = false;
extern double  CloseRangeHigh = 0;           // close orders within the specified region, both should be above 0 if JustCloseOrdersWithinTheRange = false
extern double  CloseRangeLow = 0;

extern bool    EnableCloseTimeControl = false;
extern double  StartCloseTime  = 2.00;
extern double  StopCloseTime   = 2.30;
extern string  Note3 = "Time set 0.00~23.59";

string GridName = "Grid";       // identifies the grid. allows for several co-existing grids
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
      //---- 
      #property show_inputs                  // shows the parameters  
      //----
      //   GridName = StringConcatenate( "Grid", Symbol() );
      return(0);
  }
  
//+------------------------------------------------------------------------+
//| closes  orders                                                      |
//+------------------------------------------------------------------------+
void CloseOrders()
{
  int total = OrdersTotal();
  for(int i=total-1;i>=0;i--)
  {
    OrderSelect(i, SELECT_BY_POS);
    int type    = OrderType();
    bool result = false;

    if ( ( OrderSymbol()==Symbol() || CloseAllSymbols == true ) && ( OrderMagicNumber() == JustCloseSpecificMagicNumber || JustCloseSpecificMagicNumber == 0 ) ) // only look if mygrid and symbol...
    {
    
      // close orders within the specified region.
      if ( (!JustCloseOrdersWithinTheRange && (CloseRangeLow==0) && (CloseRangeHigh ==0)) || ( JustCloseOrdersWithinTheRange && (CloseRangeLow >0) && (CloseRangeHigh >0) && (OrderOpenPrice()<CloseRangeHigh) && (OrderOpenPrice()>CloseRangeLow) ) )
      {
         // close pending Long orders
         if ( ClosePendingLongOrders == true )
         {
            switch(type)
            {
               //Close pending orders
               case OP_BUYLIMIT  : result = OrderDelete( OrderTicket() ); break;
               case OP_BUYSTOP   : result = OrderDelete( OrderTicket() ); break;
            }  
         }
         
         // close pending Short orders
         if ( ClosePendingShortOrders == true )
         {
            switch(type)
            {
               //Close pending orders
               case OP_SELLLIMIT : result = OrderDelete( OrderTicket() ); break;
               case OP_SELLSTOP  : result = OrderDelete( OrderTicket() ); break;
            }
         }
                 
         // close open Long orders
         if ( CloseOpenLongOrders == true )
         {
            switch(type)
            {
               //Close opened long positions
               case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );  break;
            }
         }
         // close open Short orders
         if (CloseOpenShortOrders == true )
         {
            switch(type)
            {
               //Close opened short positions
               case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );  break;   
            }
         }
         
      } // if region control end here
      
    } // if symgol and magicnumber control end here
               
    
    if(result == false)
    {
//     Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
//     Sleep(3000);
    }  
    
    
  } //for end here
  
  return;
}
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//---- 
   int i;
      
   int    CurrentHour = Hour();                  
   double CurrentMinute = Minute();              
   double CurrentTime = CurrentHour + CurrentMinute/100;
   
   //Print("CurrentTime:",CurrentTime);

   if ( EnableCloseTimeControl == true )
   {
      if ( StartCloseTime < StopCloseTime )
      {
         //example, execute close operation in 19->20->21->22
         if (CurrentTime < StartCloseTime || CurrentTime >= StopCloseTime )
         {
            return(0);
         }
      }
      
      else if ( StartCloseTime > StopCloseTime )
      {
         //example, execute close operation in 22->23->0->1
         if ( CurrentTime < StartCloseTime && CurrentTime >= StopCloseTime )
         {
            return(0);
         }
         
      }
      
      else if ( StartCloseTime == StopCloseTime )
      {
         return(0);
      }
   }

   CloseOrders();
  
   return(0);
  }
//+------------------------------------------------------------------+

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 ---