//+------------------------------------------------------------------+ //| 1ClickCloseAllv03.mq4 | //| Copyright 2016, Ozan Buyuksemerci | //| https://www.ozan.org | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Ozan Buyuksemerci (grandaevus)" #property link "https://ozan.org" #property version "3.00" #property strict //--- input parameters input bool RunOnCurrentCurrencyPair = true; input bool CloseOnlyManualTrades = true; input bool DeletePendingOrders = false; input int MaxSlippage = 5; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ObjectCreate(0,"CloseButton",OBJ_BUTTON,0,0,0); ObjectSetInteger(0,"CloseButton",OBJPROP_XDISTANCE,25); ObjectSetInteger(0,"CloseButton",OBJPROP_YDISTANCE,100); ObjectSetInteger(0,"CloseButton",OBJPROP_XSIZE,100); ObjectSetInteger(0,"CloseButton",OBJPROP_YSIZE,50); ObjectSetString(0,"CloseButton",OBJPROP_TEXT,"Close All"); ObjectSetInteger(0,"CloseButton",OBJPROP_COLOR, White); ObjectSetInteger(0,"CloseButton",OBJPROP_BGCOLOR, Red); ObjectSetInteger(0,"CloseButton",OBJPROP_BORDER_COLOR,Red); ObjectSetInteger(0,"CloseButton",OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,"CloseButton",OBJPROP_BACK,false); ObjectSetInteger(0,"CloseButton",OBJPROP_HIDDEN,true); ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false); ObjectSetInteger(0,"CloseButton",OBJPROP_FONTSIZE,12); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- ObjectDelete(0,"CloseButton"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- if(sparam== "CloseButton") { if(RunOnCurrentCurrencyPair == true && CloseOnlyManualTrades == true) CloseAllOrdersV01(DeletePendingOrders,MaxSlippage); else if(RunOnCurrentCurrencyPair == true && CloseOnlyManualTrades == false) CloseAllOrdersV02(DeletePendingOrders,MaxSlippage); else if(RunOnCurrentCurrencyPair == false && CloseOnlyManualTrades == true) CloseAllOrdersV03(DeletePendingOrders,MaxSlippage); else if(RunOnCurrentCurrencyPair == false && CloseOnlyManualTrades == false) CloseAllOrdersV04(DeletePendingOrders,MaxSlippage); ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false); } //--- } //+------------------------------------------------------------------+ void CloseAllOrdersV01(bool boolPendingOrders, int intMaxSlippage) { bool checkOrderClose = true; int index = OrdersTotal()-1; while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderSymbol() == Symbol() && OrderMagicNumber() ==0 && (OrderType()==OP_BUY || OrderType()==OP_SELL)) { checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), intMaxSlippage, CLR_NONE); } else if (boolPendingOrders == true && OrderSymbol() == Symbol() && OrderMagicNumber() ==0 && OrderType() != OP_BUY && OrderType() != OP_SELL) { checkOrderClose = OrderDelete (OrderTicket(),CLR_NONE); } if(checkOrderClose == false) { int errorCode = GetLastError(); if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break; else continue; } index--; } } void CloseAllOrdersV02(bool boolPendingOrders, int intMaxSlippage) { bool checkOrderClose = true; int index = OrdersTotal()-1; while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderSymbol() == Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL)) { checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), intMaxSlippage, CLR_NONE); } else if (boolPendingOrders == true && OrderSymbol() == Symbol() && OrderType() != OP_BUY && OrderType() != OP_SELL) { checkOrderClose = OrderDelete (OrderTicket(),CLR_NONE); } if(checkOrderClose == false) { int errorCode = GetLastError(); if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break; else continue; } index--; } } void CloseAllOrdersV03(bool boolPendingOrders, int intMaxSlippage) { bool checkOrderClose = true; int index = OrdersTotal()-1; while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true) { if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderMagicNumber() ==0) { checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), intMaxSlippage, CLR_NONE); } else if (boolPendingOrders == true && OrderType() != OP_BUY && OrderType() != OP_SELL && OrderMagicNumber() ==0) { checkOrderClose = OrderDelete (OrderTicket(),CLR_NONE); } if(checkOrderClose == false) { int errorCode = GetLastError(); if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break; else continue; } index--; } } void CloseAllOrdersV04(bool boolPendingOrders, int intMaxSlippage) { bool checkOrderClose = true; int index = OrdersTotal()-1; while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), intMaxSlippage, CLR_NONE); } else if (boolPendingOrders == true && OrderType() != OP_BUY && OrderType() != OP_SELL) { checkOrderClose = OrderDelete (OrderTicket(),CLR_NONE); } if(checkOrderClose == false) { int errorCode = GetLastError(); if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break; else continue; } index--; } }