//-[Close ALL]

input int MaxSlippage = 5;

int OnInit(){

ObjectCreate(0,"CloseButton",OBJ_BUTTON,0,0,0);
ObjectSetInteger(0,"CloseButton",OBJPROP_XDISTANCE,20);
ObjectSetInteger(0,"CloseButton",OBJPROP_YDISTANCE,300);
ObjectSetInteger(0,"CloseButton",OBJPROP_XSIZE,100);
ObjectSetInteger(0,"CloseButton",OBJPROP_YSIZE,50);
ObjectSetString(0,"CloseButton",OBJPROP_TEXT,"Close All");

ObjectSetInteger(0,"CloseButton",OBJPROP_COLOR,Blue);
ObjectSetInteger(0,"CloseButton",OBJPROP_BGCOLOR,Aqua);
ObjectSetInteger(0,"CloseButton",OBJPROP_BORDER_COLOR,Blue);
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);}

void OnDeinit(const int reason){

ObjectDelete(0,"CloseButton");}

void OnTick(){}

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam){

if(sparam == "CloseButton"){
CloseAllOpenPositions(MaxSlippage);
ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);}}

void CloseAllOpenPositions(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(),MaxSlippage,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--;}}