CloseAll-PL





//+------------------------------------------------------------------+
//|                                                  CloseAll-PL.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+


extern int	Profit=30;

double myProfit=0;
int EnableClose=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----

myProfit=CalcProfit();

ShowInit();


if (EnableClose==1 && CntOrdAll(OP_BUY)==0 && CntOrdAll(OP_SELL)==0 && CntOrdAll(OP_BUYSTOP)==0 
   && CntOrdAll(OP_BUYLIMIT)==0 && CntOrdAll(OP_SELLSTOP)==0 && CntOrdAll(OP_SELLLIMIT)==0) {
   EnableClose=0; // Before Debug: EnableClose=1 
}

if ( (Profit>0 && myProfit>=Profit) || (Profit<0 && myProfit<=Profit)) {
	EnableClose=1;
}    



CloseAll();

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



void CloseAll () {   // #function of CloseAll
if (EnableClose==1) {  // #if Close is yes
int _total=OrdersTotal(); // number of lots or trades  ????
int _ordertype;// order type   
if (_total==0) {return;}  // if total==0
int _ticket; // ticket number
double _priceClose;// price to close orders;
for(int _i=_total-1;_i>=0;_i--)
      {  //# for loop
      if (OrderSelect(_i,SELECT_BY_POS))
         { //# if 
         _ordertype=OrderType();
         _ticket=OrderTicket();
         switch(_ordertype)
            {  //# switch
	    case OP_BUYLIMIT:
	                    OrderDelete(OrderTicket());
	    case OP_BUYSTOP:
                        OrderDelete(OrderTicket());
       case OP_BUY:
               // close buy                
               _priceClose=MarketInfo(OrderSymbol(),MODE_BID);
               Print("Close on ",_i," position order with ticket ¹",_ticket);
               OrderClose(_ticket,OrderLots(),_priceClose,3,Red);
               break;
	    case OP_SELLLIMIT:
	                    OrderDelete(OrderTicket());
	    case OP_SELLSTOP:
                       OrderDelete(OrderTicket());
       case OP_SELL:
               // close sell
               _priceClose=MarketInfo(OrderSymbol(),MODE_ASK);
               Print("Close on ",_i," position order with ticket ¹",_ticket);
               OrderClose(_ticket,OrderLots(),_priceClose,3,Red);
               break;
            default:
               // values from  1 to 5, deleting pending orders
//               Print("Delete on ",_i," position order with ticket ¹",_ticket);
//               OrderDelete(_ticket);  
               break;
            }    //# switch
         }  // # if 
}  // # for loop

} // #if Close yes

return;
} // #function of CloseAll


void ShowInit() {

   string sComment   = "";
   string sp         = "-----------------------------------------------------\n";
   string NL         = "\n";
   sComment = sp;
   sComment = sComment + "CloseByPL will close all trades at: " + Profit + NL;
   sComment = sComment + sp;
   sComment = sComment + "Current P/L="+DoubleToStr(myProfit,0)+ NL;
   Comment(sComment);

return;
}

double CalcProfit() {
double _sum=0;
int _total=OrdersTotal(); // number of lots  
  
if (_total==0) {return (0);}

_sum=AccountProfit();

return(_sum);

}


int CntOrdAll(int Type) {
//return number of orders with specific parameters
int _CntOrd;
_CntOrd=0;
for(int i=0;i<OrdersTotal();i++)
{
   OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
   if (OrderType()==Type) _CntOrd++;
}
return(_CntOrd);
}





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself

Other Features: