//
// ButtonCloseBuySell.mq5
// getYournet.ch
//

#property copyright "Copyright 2019, getYourNet.ch"
#property version   "1.00"

#include <Trade\Trade.mqh>

string namespace="ButtonCloseBuySell";
enum Objects
{
   BuyButton,
   BuyText,
   SellButton,
   SellText
};


void OnInit()
{
   CreateButtons();
   EventSetTimer(1);
}


void OnDeinit(const int reason)
{
   EventKillTimer();
   ObjectsDeleteAll(0,namespace);
}


void OnTick()
{
}


void OnTimer()
{
   Calculate();
}


void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
   if(id==CHARTEVENT_OBJECT_CLICK)
   {
      if(StringFind(sparam,namespace+IntegerToString(BuyButton))>-1)
         CloseTrades(POSITION_TYPE_BUY);
      if(StringFind(sparam,namespace+IntegerToString(SellButton))>-1)
         CloseTrades(POSITION_TYPE_SELL);
   }
}


void CreateButtons()
{
   string on;

   on=namespace+IntegerToString(BuyButton);
   ObjectCreate(0,on,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,on,OBJPROP_WIDTH,0);
   ObjectSetInteger(0,on,OBJPROP_FILL,true);
   ObjectSetInteger(0,on,OBJPROP_BGCOLOR,SeaGreen);
   ObjectSetInteger(0,on,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,on,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,on,OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,on,OBJPROP_YDISTANCE,25);
   ObjectSetInteger(0,on,OBJPROP_XSIZE,100);
   ObjectSetInteger(0,on,OBJPROP_YSIZE,22);

   on=namespace+IntegerToString(BuyText);
   ObjectCreate(0,on,OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,on,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,on,OBJPROP_ANCHOR,ANCHOR_CENTER);
   ObjectSetInteger(0,on,OBJPROP_XDISTANCE,70);
   ObjectSetInteger(0,on,OBJPROP_YDISTANCE,36);
   ObjectSetInteger(0,on,OBJPROP_COLOR,White);
   ObjectSetInteger(0,on,OBJPROP_FONTSIZE,8);
   ObjectSetInteger(0,on,OBJPROP_ZORDER,-100);
   ObjectSetString(0,on,OBJPROP_TEXT," ");

   on=namespace+IntegerToString(SellButton);
   ObjectCreate(0,on,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,on,OBJPROP_WIDTH,0);
   ObjectSetInteger(0,on,OBJPROP_FILL,true);
   ObjectSetInteger(0,on,OBJPROP_BGCOLOR,Crimson);
   ObjectSetInteger(0,on,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,on,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ObjectSetInteger(0,on,OBJPROP_XDISTANCE,120);
   ObjectSetInteger(0,on,OBJPROP_YDISTANCE,25);
   ObjectSetInteger(0,on,OBJPROP_XSIZE,100);
   ObjectSetInteger(0,on,OBJPROP_YSIZE,22);

   on=namespace+IntegerToString(SellText);
   ObjectCreate(0,on,OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,on,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,on,OBJPROP_ANCHOR,ANCHOR_CENTER);
   ObjectSetInteger(0,on,OBJPROP_XDISTANCE,170);
   ObjectSetInteger(0,on,OBJPROP_YDISTANCE,36);
   ObjectSetInteger(0,on,OBJPROP_COLOR,White);
   ObjectSetInteger(0,on,OBJPROP_FONTSIZE,8);
   ObjectSetInteger(0,on,OBJPROP_ZORDER,-100);
   ObjectSetString(0,on,OBJPROP_TEXT," ");
}


void Calculate()
{
   ObjectSetString(0,namespace+IntegerToString(BuyText),OBJPROP_TEXT,"Close Buys 0.0");
   ObjectSetString(0,namespace+IntegerToString(SellText),OBJPROP_TEXT,"Close Sells 0.0");
}


void CloseTrades(ENUM_POSITION_TYPE type)
{
   CTrade trade;
   for(int i=PositionsTotal()-1;i>=0;i--)
      if(PositionGetSymbol(i)==Symbol())
         if(PositionGetInteger(POSITION_TYPE)==type)
            trade.PositionClose(PositionGetInteger(POSITION_TICKET));
}
