//+------------------------------------------------------------------+ //| CloseByPL.mq4 | //| | //+------------------------------------------------------------------+ extern double Profit=10; 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) { EnableClose=0; // Before Debug: EnableClose=1 } if ( (Profit>0 && myProfit>Profit) || (Profit<0 && myProfit=0;_i--) { //# for loop if (OrderSelect(_i,SELECT_BY_POS)) { //# if _ordertype=OrderType(); _ticket=OrderTicket(); switch(_ordertype) { //# switch case 0: // close buy _priceClose=MarketInfo(OrderSymbol(),MODE_BID); Print("Close on ",_i," position order with ticket ¹",_ticket); OrderClose(_ticket,OrderLots(),_priceClose,3,Red); break; case 1: // 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 int _ordertype;// order type if (_total==0) {return (0);} int _ticket; // ticket number double _priceClose;// price to close orders; for(int _i=_total-1;_i>=0;_i--) { if (OrderSelect(_i,SELECT_BY_POS)) { _ordertype=OrderType(); _ticket=OrderTicket(); switch(_ordertype) { case OP_BUY: // buy // _priceClose=MarketInfo(OrderSymbol(),MODE_BID); // _sum=_sum+(_priceClose-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT); _sum=_sum+OrderProfit(); break; case OP_SELL: // sell // _priceClose=MarketInfo(OrderSymbol(),MODE_ASK); // _sum=_sum+(OrderOpenPrice()-_priceClose)/MarketInfo(OrderSymbol(),MODE_POINT); _sum=_sum+OrderProfit(); break; default: break; } } } return(_sum); } int CntOrdAll(int Type) { //return number of orders with specific parameters int _CntOrd; _CntOrd=0; for(int i=0;i