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