//+------------------------------------------------------------------+
//| 1ClickCloseAllv02.mq4 |
//| Copyright 2016, Ozan Buyuksemerci |
//| https://www.ozan.org |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Ozan Buyuksemerci (grandaevus)"
#property link "https://ozan.org"
#property version "2.00"
#property strict
//--- input parameters
input bool CloseOnlyManualTrades = true;
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(CloseOnlyManualTrades == false) CloseAllOpenPositionsV01(MaxSlippage);
else if(CloseOnlyManualTrades == true) CloseAllOpenPositionsV02(MaxSlippage);
ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);
}
//---
}
//+------------------------------------------------------------------+
void CloseAllOpenPositionsV01(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) && OrderSymbol() == Symbol())
{
checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), intMaxSlippage, 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 CloseAllOpenPositionsV02(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) && OrderSymbol() == Symbol() && OrderMagicNumber() ==0)
{
checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), intMaxSlippage, 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--;
}
}
Comments