//+------------------------------------------------------------------+
//|                                                       Info_Close_all.mq4 |
//|                                            Copyright 2014, Mell. |
//|                                              |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Mell."
#property version   "1.00"
#property strict
color MainInfoBack=LightGray;
color MainInfo=Black;
color BuyInfoBack=LightGray;
color BuyInfo=Black;
color SellInfoBack=LightGray;
color SellInfo=Black;
//-----------------------------
bool state=false;              // нажата/отжата
bool back=false;               // отобразим на переднем (false) или заднем (true) плане
bool selection=false;          // режим перемещения кнопки мышью
bool hidden=true;              // скроем (true) или отобразим (false) имя графического объекта в списке объектов
int xsize0 = 120;
int ysize0= 30;
long colbut0 = clrGold; 
long colbutB0=clrMediumBlue;
long colbut1 = clrRed;
int xsize1 = 117;
int ysize1= 28;
long colbut=0, colbutB=0;
int xsize=0, ysize=0;
int cnt,slippage=5,cu,dig,totb=0,tots=0;
string txt1,txt2,txt3,txt4,txtVTP,txtLOT;
double smbuy, smsell, ztpb, ztps;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   colbut=colbut0;
   xsize=xsize0;
   ysize=ysize0;
   ObjectCreate("Закрыть все Селлы",OBJ_BUTTON,0,0,0);
   //--- установим координаты кнопки
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_YDISTANCE,80);
//--- установим размер кнопки
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_XSIZE,xsize);
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_YSIZE,ysize);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_CORNER,CORNER_LEFT_UPPER);
//--- установим текст
   ObjectSetString(0,"Закрыть все Селлы",OBJPROP_TEXT,"Закрыть все Селл");
//--- установим шрифт текста
   ObjectSetString(0,"Закрыть все Селлы",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_FONTSIZE,10);
//--- установим цвет текста
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_COLOR,clrBlack);
//--- установим цвет фона
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_BGCOLOR,colbut);
//--- установим цвет границы
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_BORDER_COLOR,clrOrangeRed);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_BACK,back);
//--- переведем кнопку в заданное состояние
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_STATE,state);
//--- включим (true) или отключим (false) режим перемещения кнопки мышью
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_HIDDEN,hidden);

//========Buy====
   colbutB=colbutB0;
   xsize=xsize0;
   ysize=ysize0;
   ObjectCreate("Закрыть все Бай",OBJ_BUTTON,0,0,0);
   //--- установим координаты кнопки
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_YDISTANCE,40);
//--- установим размер кнопки
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_XSIZE,xsize);
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_YSIZE,ysize);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_CORNER,CORNER_LEFT_UPPER);
//--- установим текст
   ObjectSetString(0,"Закрыть все Бай",OBJPROP_TEXT,"Закрыть все Бай");
//--- установим шрифт текста
   ObjectSetString(0,"Закрыть все Бай",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_FONTSIZE,10);
//--- установим цвет текста
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_COLOR,clrAntiqueWhite);
//--- установим цвет фона
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_BGCOLOR,colbutB);
//--- установим цвет границы
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_BORDER_COLOR,clrOrangeRed);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_BACK,back);
//--- переведем кнопку в заданное состояние
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_STATE,state);
//--- включим (true) или отключим (false) режим перемещения кнопки мышью
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_HIDDEN,hidden);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
if (!IsTesting())
      {
      Comment("");
      ObjectDelete("SellZeroLevel"); ObjectDelete("BuyZeroLevel");
      ObjectDelete("y_MainInfoBack1"); ObjectDelete("y_MainInfoBack2"); ObjectDelete("y_MainInfoBack3");
      ObjectDelete("z_MainInfo_1"); ObjectDelete("z_MainInfo_2"); ObjectDelete("z_MainInfo_3"); ObjectDelete("z_MainInfo_4"); ObjectDelete("z_MainInfo_5"); ObjectDelete("z_MainInfo_6"); ObjectDelete("z_MainInfo_7"); 
      ObjectDelete("z_BuyInfo_1");  ObjectDelete("z_BuyInfo_2");  ObjectDelete("z_BuyInfo_3");  ObjectDelete("z_BuyInfo_4");  ObjectDelete("z_BuyInfo_5");  ObjectDelete("z_BuyInfo_6");  ObjectDelete("z_BuyInfo_7"); 
      ObjectDelete("z_SellInfo_1"); ObjectDelete("z_SellInfo_2"); ObjectDelete("z_SellInfo_3"); ObjectDelete("z_SellInfo_4"); ObjectDelete("z_SellInfo_5"); ObjectDelete("z_SellInfo_6"); ObjectDelete("z_SellInfo_7"); 
      ObjectDelete("Закрыть все Селлы"); ObjectDelete("Закрыть все Бай");
      }
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_BGCOLOR, colbut0);
  ObjectSetInteger(0, "Закрыть все Селлы",OBJPROP_XSIZE, xsize0);
  ObjectSetInteger(0, "Закрыть все Селлы",OBJPROP_YSIZE, ysize0);
  ObjectSetString(0,"Закрыть все Селлы",OBJPROP_TEXT,"Закрыть все Селл");
  
  //----------
  ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_BGCOLOR, colbutB0);
  ObjectSetInteger(0, "Закрыть все Бай",OBJPROP_XSIZE, xsize0);
  ObjectSetInteger(0, "Закрыть все Бай",OBJPROP_YSIZE, ysize0);
  ObjectSetString(0,"Закрыть все Бай",OBJPROP_TEXT,"Закрыть все Бай");
//================================================================================
   double minLot = MarketInfo(Symbol(),MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);
   string symbol = Symbol();
   double LOTStep = MarketInfo(Symbol(),MODE_LOTSTEP);
   double TV=MarketInfo(Symbol(),MODE_TICKVALUE);
   double spread = MarketInfo(Symbol(),MODE_SPREAD);
   double profitbuy=0, profitsell=0;
   if (Digits==4 || Digits==2) cu=1; else cu=10;   // множитель для разных типов счетов 4/2 и 5/3
   if (LOTStep==0.01)dig=2;
   if (LOTStep==0.1) dig=1;
   totb=Total_B();
   tots=Total_S();
   smbuy=0;smsell=0;
//---------------------Собираем инфу----------------------------------
if(totb>0)
  {
    
  for (cnt=0;cnt<OrdersTotal();cnt++)
    {
    if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderType() == OP_BUY) 
      {
      smbuy+=OrderLots(); profitbuy+=OrderProfit()+OrderCommission()+OrderSwap();
      
      }
    }
    ztpb = NormalizeDouble(Bid+((0-profitbuy)/(smbuy*TV))*Point,Digits);
  }
//---------------------
if(tots>0)
  {

  for (cnt=0;cnt<OrdersTotal();cnt++)
    {
    if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
      {
      smsell+=OrderLots(); profitsell+=OrderProfit()+OrderCommission()+OrderSwap();
      }     
    }
    ztps = NormalizeDouble(Ask-((0-profitsell)/(smsell*TV))*Point,Digits);
  }
//---------------------Рисуем таблички--------------------------------
string spips; 
      double pips=0;
      double stopout_balance=AccountBalance()*AccountStopoutLevel()/100;
      if (MathAbs(smbuy-smsell)>0) pips=NormalizeDouble((AccountEquity()-stopout_balance)/MathAbs(smbuy-smsell)/TV,0);
      if (smbuy>smsell) spips="До слива "+DoubleToString(pips,0)+" пунктов вниз";
      if (smbuy<smsell) spips="До слива "+DoubleToString(pips,0)+" пунктов вверх";
      if (smbuy==smsell) {if (smbuy==0) spips="Нет ордеров"; else spips="Лок";}
int x1,y1,x2,y2,x3,y3;
      if (ObjectFind("y_MainInfoBack1")==-1) Text("y_MainInfoBack1","gggg",58,"Webdings",180,15,MainInfoBack);
      if (ObjectFind("y_MainInfoBack2")==-1) Text("y_MainInfoBack2","gggg",58,"Webdings",180,95,BuyInfoBack);
      if (ObjectFind("y_MainInfoBack3")==-1) Text("y_MainInfoBack3","gggg",58,"Webdings",180,175,SellInfoBack);

      x1 =(int)ObjectGet("y_MainInfoBack1",OBJPROP_XDISTANCE);
      y1 =(int)ObjectGet("y_MainInfoBack1",OBJPROP_YDISTANCE);
      x2 =(int)ObjectGet("y_MainInfoBack2",OBJPROP_XDISTANCE);
      y2 =(int)ObjectGet("y_MainInfoBack2",OBJPROP_YDISTANCE);
      x3 =(int)ObjectGet("y_MainInfoBack3",OBJPROP_XDISTANCE);
      y3 =(int)ObjectGet("y_MainInfoBack3",OBJPROP_YDISTANCE);
      
      Text("z_MainInfo_3","мин.лот:  "+DoubleToStr(minLot,2),9,"Arial Black",x1+20,y1+21,MainInfo);
      Text("z_MainInfo_4","макс.лот:  "+DoubleToStr(maxLot,2),9,"Arial Black",x1+165,y1+21,MainInfo);
      Text("z_MainInfo_5","спред:  "+DoubleToStr(spread,0)+"п",9,"Arial Black",x1+20,y1+36,MainInfo);
      Text("z_MainInfo_6","плечо:  1:"+IntegerToString(AccountLeverage()),9,"Arial Black",x1+165,y1+36,MainInfo);
      Text("z_MainInfo_7",spips,9,"Arial Black",x1+20,y1+51,MainInfo);
      
      Text("z_BuyInfo_1","BUY",9,"Arial Black",x2+130,y2+6,BuyInfo);
      Text("z_BuyInfo_2","Ордеров:  "+IntegerToString(Total_B()),9,"Arial Black",x2+20,y2+21,BuyInfo);
      Text("z_BuyInfo_3","Объем:  "+DoubleToStr(smbuy,2),9,"Arial Black",x2+165,y2+21,BuyInfo);
      Text("z_BuyInfo_6","Профит:  "+DoubleToStr(profitbuy,2),9,"Arial Black",x2+20,y2+51,BuyInfo);
      
      Text("z_SellInfo_1","SELL",9,"Arial Black",x3+125,y3+6,SellInfo);
      Text("z_SellInfo_2","Ордеров:  "+IntegerToString(Total_S()),9,"Arial Black",x3+20,y3+21,SellInfo);
      Text("z_SellInfo_3","Объем:  "+DoubleToStr(smsell,2),9,"Arial Black",x3+165,y3+21,SellInfo);
      Text("z_SellInfo_6","Профит:  "+DoubleToStr(profitsell,2),9,"Arial Black",x3+20,y3+51,SellInfo);
 //-------линии бу-----------
      ObjectDelete("SellZeroLevel");
      ObjectDelete("BuyZeroLevel");
   
      ObjectCreate("SellZeroLevel",OBJ_HLINE, 0, 0,ztps-spread*Point);
      ObjectSet("SellZeroLevel", OBJPROP_COLOR, clrRed);
      ObjectSet("SellZeroLevel", OBJPROP_WIDTH, 0);
      ObjectSet("SellZeroLevel", OBJPROP_RAY, False);

      ObjectCreate("BuyZeroLevel",OBJ_HLINE, 0, 0,ztpb);
      ObjectSet("BuyZeroLevel", OBJPROP_COLOR, clrBlue);
      ObjectSet("BuyZeroLevel", OBJPROP_WIDTH, 0);
      ObjectSet("BuyZeroLevel", OBJPROP_RAY, False);      

//---
   return(0);
  }
 
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---

if(id == CHARTEVENT_OBJECT_CLICK)
    if(sparam == "Закрыть все Селлы")
      if((bool)ObjectGetInteger(0, "Закрыть все Селлы", OBJPROP_STATE))
      {
        ObjectSetInteger(0,"Закрыть все Селлы",OBJPROP_BGCOLOR, colbut1);
        ObjectSetInteger(0, "Закрыть все Селлы",OBJPROP_XSIZE, xsize1);
        ObjectSetInteger(0, "Закрыть все Селлы",OBJPROP_YSIZE, ysize1);
        ObjectSetString(0, "Закрыть все Селлы",OBJPROP_TEXT, "ЗАКРЫВАЮ!");
        
        closeSELLorders();
        Sleep(200);
        ObjectSetInteger(0, "Закрыть все Селлы", OBJPROP_STATE, False);
               
      }
if(id == CHARTEVENT_OBJECT_CLICK)
    if(sparam == "Закрыть все Бай")
      if((bool)ObjectGetInteger(0, "Закрыть все Бай", OBJPROP_STATE))
      {
        ObjectSetInteger(0,"Закрыть все Бай",OBJPROP_BGCOLOR, colbut1);
        ObjectSetInteger(0, "Закрыть все Бай",OBJPROP_XSIZE, xsize1);
        ObjectSetInteger(0, "Закрыть все Бай",OBJPROP_YSIZE, ysize1);
        ObjectSetString(0, "Закрыть все Бай",OBJPROP_TEXT, "ЗАКРЫВАЮ!");
        
        closeBUYorders();
        Sleep(200);
        ObjectSetInteger(0, "Закрыть все Бай", OBJPROP_STATE, False);
               
      }
            
  }
//+------------------------Функции------------------------------------------+
//======================================================================================================================
                                int Total_B()                   
 {
   int j=0,r=0;
   for (r=0;r<OrdersTotal();r++) {
     if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol() && OrderType()==OP_BUY) j++;
   }   
 return(j); 
 }
//======================================================================================================================
                                int Total_S()
{
   int d=0,n;
   for (n=0;n<OrdersTotal();n++) {
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)  && OrderSymbol() == Symbol() && OrderType()==OP_SELL) d++;
   }    
 return(d);
  }     

                                    void closeBUYorders()
{
   
      while(Total_B()>0)
   { int ord=0;
   for (cnt=0;cnt<OrdersTotal();cnt++)
      {
      if(OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)&&OrderSymbol() == Symbol() && OrderType() == OP_BUY)
         {
          if (IsTradeAllowed() == TRUE) {
         RefreshRates();
         ord = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage*cu,clrBlue);
        }
        
         }
      }
   }
}

//======================================================================================================================
                                    void closeSELLorders()
{
  
      while(Total_S()>0)
   {int ord=0;
   for (cnt=0;cnt<OrdersTotal();cnt++)
      {
      if(OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)&&OrderSymbol() == Symbol() && OrderType() == OP_SELL)
      
         {
          if (IsTradeAllowed() == TRUE) {
         RefreshRates();
         ord = OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage*cu,clrRed);
         }
         }
      }
   }
}
//-----------------
 void Text(string name, string text, int size, string font, int xd, int yd, color colT)
{
   ObjectCreate(name, OBJ_LABEL, 0,0,0);
   ObjectSetText(name, text, size, font);
   ObjectSet(name, OBJPROP_XDISTANCE, xd);
   ObjectSet(name, OBJPROP_YDISTANCE, yd);      
   ObjectSet(name, OBJPROP_COLOR, colT);
   ObjectSet(name, OBJPROP_BACK, false);

}
