CloseMultipleOrders

Author: Copyright 2014, Genius Fx
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
CloseMultipleOrders
//+------------------------------------------------------------------+
//|                                          CloseMultipleOrders.mq4 |
//|                                        Copyright 2014, Genius Fx |
//|                            https://www.mql5.com/en/signals/61548 |
//+------------------------------------------------------------------+
/*
   A simple script to close multiple market orders. 
   Parameters:
   *ClossAll   -> If this parameter is set to true, all orders (Buy, Sell, Pending orders) are close. This parameter supercedes every other.
   *CloseBuyOders -> Closes only Buy orders. If 'CloseOnlyProfit is set to true it closes only Buy positions in profit.
   *CloseSellOrders ->  Closes only Sell Orders. If 'CloseOnlyProfit' is set to true it closes only Sell positions in profit.
   *CloseBuyLimits   -> Delete all BuyLimit pending orders if set to true.
   *CloseSellLimit   -> Delete all SellLimit pending orders if set to true.
   *CloseOnlyProfit  -> Will close only trades in profit. If 'CloseAll' is set to true, this parameter will be ignored and all trades will be closed
   *Slippage   -> The minimum allow Slippage. Leave current settings intact if unsure of slippage to apply.
   
   Programming is my hobby. Just program for fun, though I am a newbie in mql, I do my best in learning new things.
   If you intend to modify this code for efficiency, flexibility, or for any other purpose, please do well to notify me on the modification.
   I shall really appreciate it.
   
   >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ENJOY THE RELEASE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
*/

#property copyright "Copyright 2014, Genius Fx"
#property link      "https://www.mql5.com/en/signals/61548"
#property version   "1.1"
#property strict
#property script_show_inputs
//--- input parameters
input bool     CloseAll=false;
input bool     CloseBuyOrders=false;
input bool     CloseSellOrders=false;
input bool     DeleteBuyLimits=false;
input bool     DeleteSellLimits=false;
input bool     CloseOnlyProfits=true;
input int      Slippage=3;

int ticket;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
      if(CloseAll){
         //Close everything
         for(int i=OrdersTotal()-1; i>=0; i--){
            if(!OrderSelect(i, SELECT_BY_POS))continue; //If order selection fails, move to the next loop
            
            if(OrderType()==OP_BUY || OrderType()==OP_SELL){
               if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage) ){
                  Alert("Block: CloseAll. Order #",OrderTicket()," not closed. Error Code: ",GetLastError());
               }
               else {
                  Alert("Block: CloseAll. Order #",OrderTicket()," closed successfully.");
               }
            }
            
            if(OrderType()==OP_BUYLIMIT && OrderType()==OP_SELLLIMIT){
               if(!OrderDelete(OrderTicket(), clrOrange)){
                  Alert("Block: PendingOrder. Order #", OrderTicket(), " not deleted");
               }
               else {
                  Alert("Block: PendingOrder. Order #", OrderTicket(), " deleted successfully.");
               }
            }
         }
      }//CloseAll ends
      else if(CloseOnlyProfits){
         if(CloseBuyOrders || CloseSellOrders){ //If close buy or sell is enabled
            for(int i=OrdersTotal()-1; i>=0; i--){
               if(!OrderSelect(i, SELECT_BY_POS))continue;
               
               //Check if it's close buy
               if(CloseBuyOrders){
                  if(OrderType() == OP_BUY) {
                      //Check to seen if in profit
                      if(OrderProfit()>0){  
                        if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage)){
                           Alert("Block: CloseOnlyProfits. Order #",OrderTicket()," not closed. Error Code: ",GetLastError());
                        }
                        else {
                           Alert("Block: CloseOnlyProfits. Buy Order #",OrderTicket()," closed successfull.");
                        }
                     }
                     else {//Order not in profit
                        Alert("Block: CloseOnlyProfits. Buy Order #",OrderTicket()," skipped. Not in profit");
                     }
                  }
               }
               
               //Check if it's close sell
               if(CloseSellOrders){
                  if(OrderType() == OP_SELL) {
                      //Check to seen if in profit
                      if(OrderProfit()>0){  
                        if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage)){
                           Alert("Block: CloseOnlyProfits. Sell Order #",OrderTicket()," not closed. Error Code: ",GetLastError());
                        }
                        else {
                           Alert("Block: CloseOnlyProfits. Sell Order #",OrderTicket()," closed successfull.");
                        }
                     }
                     else {//Order not in profit
                        Alert("Block: CloseOnlyProfits. Sell Order #",OrderTicket()," skipped. Not in profit");
                     }
                  }
               }
            }
         }
         else {
            //Close both buy and sell in profit
            for(int i=OrdersTotal()-1; i>=0; i--){
               if(!OrderSelect(i, SELECT_BY_POS))continue;
               
               if(OrderType()==OP_BUY || OrderType()==OP_SELL){
                  if(OrderProfit()>0){
                     //In profit
                     if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage) ){
                        Alert("Block: CloseOnlyProfits. Order #",OrderTicket()," not closed. Error Code: ",GetLastError());
                     }
                     else {
                        Alert("Block: CloseOnlyProfits. Order #",OrderTicket()," closed in profit.");
                     }
                  }
                  else {
                     //Not in profit
                     Alert("Block: CloseOnlyProfits. Order #",OrderTicket()," skipped. Not in profit.");
                  }
               }
            }
         }
         
      }//CloseOnlyProfits end
      
      if(DeleteBuyLimits || CloseAll){
         for(int i=0; i<OrdersTotal(); i++){
            if(!OrderSelect(i, SELECT_BY_POS)){
               Alert("Order not selected.");
            }
            else {
               switch(OrderType()){
                  case OP_BUYLIMIT:
                     if(!OrderDelete(OrderTicket(), clrOrangeRed)){
                        Alert("Block DeleteBuyLimits: Order #",OrderTicket()," not deleted.");
                     }
                     else {
                        Alert("Block DeleteBuyLimits: Order #",OrderTicket()," closed.");
                     }
                     continue;
               }
            }
         }
      }
      
      if(DeleteSellLimits || CloseAll){
         for(int i=0; i<OrdersTotal(); i++){
            if(!OrderSelect(i, SELECT_BY_POS)){
               Alert("Order not selected.");
            }
            else {
               switch(OrderType()){
                  case OP_SELLLIMIT:
                     if(!OrderDelete(OrderTicket(), clrOrangeRed)){
                        Alert("Block DeleteSellLimits: Order #",OrderTicket()," not deleted.");
                     }
                     else {
                        Alert("Block DeleteSellLimits: Order #",OrderTicket()," closed.");
                     }
                     continue;
               }
            }
         }
      }
  }
//+------------------------------------------------------------------+

Comments