//+------------------------------------------------------------------+
//|                           [EA][Qj] - Setka v1.41 - InfoPanel.mq4 |
//|               Ilnur17021992. Special for http://tradelikeapro.ru |
//|                                          http://tradelikeapro.ru |
//+------------------------------------------------------------------+
#property copyright "Ilnur17021992. Special for http://tradelikeapro.ru"
#property link      "http://tradelikeapro.ru"
#property version   "1.01"
#property strict
#property indicator_chart_window

extern string     DisplayParameters;
extern color      BackgroundColor            = Black;
extern color      TextColor                  = White;
extern string     ExpertParameters;
extern int        MagicNumber                = 1110;
extern int        MaxSpread                  = 0;
extern int        MinLeverage                = 0;
extern string     DrawdownAlertParameters;
extern bool       PopupDrawdownAlert         = false;
extern bool       EmailDrawdownAlert         = false;
extern bool       PushDrawdownAlert          = false;
extern int        DrawdownAlertPeriod        = 300;
extern double     DrawdownMoney              = 0;
extern double     DrawdownPercent            = 0;
extern string     ReportParameters;
extern bool       PopupReport                = false;
extern bool       EmailReport                = false;
extern bool       PushReport                 = false;
extern int        ReportPeriod               = 3600;

int DrawdownAlertSignal, ReportSignal;
datetime DrawdownAlertTime, ReportTime;
double DM, DP, MaxDD, SELL_Last, SELL_Length, SELL_TP, SELL_TPPercent, SELL_CurrTP, SELL_CurrTPPercent, BUY_Last, BUY_Length, BUY_TP, BUY_TPPercent, BUY_CurrTP, BUY_CurrTPPercent;
string spread, leverage, DrawdownAlertMessage, ReportMessage;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int start()
{   
   //Расчет максимальной просадки
   if (AccountProfit() < 0)
   {
      if (AccountProfit()<MaxDD)
      MaxDD=AccountProfit();
   }
//+------------------------------------------------------------------+
   
   //Подсчет Sell и Buy ордеров
   int CountSell=0, CountBuy=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
   {
      if(OrderType()==OP_BUY) CountBuy++;        
      if(OrderType()==OP_SELL) CountSell++;
   }
//+------------------------------------------------------------------+
   
   //Расчет длины сетки и дистанции до ТР
   for(int i=1;i<=OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
      {
         SELL_Last = OrderOpenPrice();
         for(int ii=OrdersTotal();ii>=0;ii--)
         {
            if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
            {
               SELL_Length = (SELL_Last-OrderOpenPrice())*MathPow(10,Digits);
               SELL_TP = (SELL_Last-OrderTakeProfit())*MathPow(10,Digits);
               if(SELL_Length>0) SELL_TPPercent = SELL_TP/SELL_Length*100;
               SELL_CurrTP = (Bid-OrderTakeProfit())*MathPow(10,Digits);
               if(SELL_Length>0) SELL_CurrTPPercent = SELL_CurrTP/SELL_Length*100;
            }       
         } 
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
      { 
         BUY_Last = OrderOpenPrice();
         for(int ii=OrdersTotal();ii>=0;ii--)
         {
            if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
            {
               BUY_Length = (OrderOpenPrice()-BUY_Last)*MathPow(10,Digits);
               BUY_TP = (OrderTakeProfit()-BUY_Last)*MathPow(10,Digits);
               if(BUY_Length>0) BUY_TPPercent = BUY_TP/BUY_Length*100;
               BUY_CurrTP = (OrderTakeProfit()-Bid)*MathPow(10,Digits);
               if(BUY_Length>0) BUY_CurrTPPercent = BUY_CurrTP/BUY_Length*100;
            }
         } 
      }   
   }
//+------------------------------------------------------------------+
  
   //Проверка спреда и кредитного плеча
   if(MarketInfo(Symbol(),MODE_SPREAD)>MaxSpread || MaxSpread==0)
   {
      spread = "High spread!";
      {
         if(MaxSpread==0) spread="Control disabled!";
      }
   } else spread="Normal";
     
   if(AccountLeverage()<MinLeverage || MinLeverage==0)
   {
      leverage = "Low leverage!";
      {
         if(MinLeverage==0) leverage="Control disabled!";
      }
   } else leverage="Normal";
//+------------------------------------------------------------------+
   
   //Отправка алертов и отчетов
   DM = NormalizeDouble(AccountEquity()-AccountBalance(),2);
   DP = NormalizeDouble((AccountEquity()-AccountBalance())/AccountBalance()*100,2);

   DrawdownAlertMessage="Account: "+IntegerToString(AccountNumber())+" Drawdown: "+DoubleToString(DM,2)+" ("+DoubleToString(DP,2)+"%)";
   ReportMessage="Account: "+IntegerToString(AccountNumber())+
                 "\n"+"Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency()+
                 "\n"+"Profit/DD: "+DoubleToString (AccountProfit(), 2 )+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)"+
                 "\n"+"Equity: "+DoubleToString (AccountEquity(),2)+
                 "\n"+"Free margin: "+DoubleToString (AccountFreeMargin(),2)+
                 "\n"
                 "\n"+"SELL:"+
                 "\n"+"Level: "+DoubleToString(CountSell,0)+
                 "\n"+"Length: "+DoubleToString(SELL_Length,0)+
                 "\n"+"Take profit: "+DoubleToString(SELL_TP,0)+" ("+DoubleToString(SELL_TPPercent,2)+"%)"
                 "\n"+"Distanse to TP: "+DoubleToString(SELL_CurrTP,0)+" ("+DoubleToString(SELL_CurrTPPercent,2)+"%)"
                 "\n"
                 "\n"+"BUY:"+
                 "\n"+"Level: "+DoubleToString(CountBuy,0)+
                 "\n"+"Length: "+DoubleToString(BUY_Length,0)+
                 "\n"+"Take profit: "+DoubleToString(BUY_TP,0)+" ("+DoubleToString(BUY_TPPercent,2)+"%)"+
                 "\n"+"Distanse to TP: "+DoubleToString(BUY_CurrTP,0)+" ("+DoubleToString(BUY_CurrTPPercent,2)+"%)";        

   if((TimeCurrent() - DrawdownAlertTime) >= DrawdownAlertPeriod) 
      {
      DrawdownAlertTime = TimeCurrent();
      DrawdownAlertSignal = 1;
      }
      
   if(DrawdownAlertPeriod>0)
   {
      if(DrawdownPercent>0)
      {   
         if((-1)*DP >= DrawdownPercent && DrawdownAlertSignal == 1)
         {
            if(PopupDrawdownAlert)
               Alert(DrawdownAlertMessage);
            if(EmailDrawdownAlert)
               SendMail("InfoPanel email drawdown alert", DrawdownAlertMessage);
            if(PushDrawdownAlert)
               SendNotification(DrawdownAlertMessage);
            DrawdownAlertSignal = 0;
         }
      }
      if(DrawdownMoney>0)
      {   
         if((-1)*DM >= DrawdownMoney && DrawdownAlertSignal == 1)
         {
            if(PopupDrawdownAlert)
               Alert(DrawdownAlertMessage);
            if(EmailDrawdownAlert)
               SendMail("InfoPanel email drawdown alert", DrawdownAlertMessage);
            if(PushDrawdownAlert)
               SendNotification(DrawdownAlertMessage);
            DrawdownAlertSignal = 0;
         }
      }
   }
   
   if((TimeCurrent() - ReportTime) >= ReportPeriod) 
      {
      ReportTime = TimeCurrent();
      ReportSignal = 1;
      }
      
   if(ReportPeriod>0 && ReportSignal == 1)
   {
      if(PopupReport)
         Alert(ReportMessage);
      if(EmailReport)
         SendMail("InfoPanel email report", ReportMessage);
      if(PushReport)
         SendNotification(ReportMessage);
      ReportSignal = 0;
   }
//+------------------------------------------------------------------+
  
   //Создание объектов
   ObjectCreate(0,"Fon",OBJ_RECTANGLE_LABEL,0,0,0);// Создание объ.
   ObjectSetInteger(0,"Fon",OBJPROP_CORNER,0);     // Привязка угол
   ObjectSetInteger(0,"Fon",OBJPROP_XDISTANCE,5);  // Координата Х
   ObjectSetInteger(0,"Fon",OBJPROP_YDISTANCE,35); // Координата Y
   ObjectSetInteger(0,"Fon",OBJPROP_XSIZE,215);    // Ширина фона
   ObjectSetInteger(0,"Fon",OBJPROP_YSIZE,395);  
   ObjectSetInteger(0,"Fon",OBJPROP_BGCOLOR,BackgroundColor); // Цвет фона

   ObjectCreate("Account information", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Account information", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Account information", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Account information", OBJPROP_YDISTANCE, 45);// Координата Y
   ObjectSetText("Account information","=====Account information=====",10,"Arial",TextColor);

   ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Balance", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Balance", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Balance", OBJPROP_YDISTANCE, 60);// Координата Y
   ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",TextColor);

   ObjectCreate("Profit/DD", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Profit/DD", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Profit/DD", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Profit/DD", OBJPROP_YDISTANCE, 75);// Координата Y
   ObjectSetText("Profit/DD","Profit/DD: "+DoubleToString (AccountProfit(), 2 )+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)",10,"Arial",TextColor);
   
   ObjectCreate("Max DD", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Max DD", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Max DD", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Max DD", OBJPROP_YDISTANCE, 90);// Координата Y
   ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",TextColor);
   
   ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Equity", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Equity", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Equity", OBJPROP_YDISTANCE, 105);// Координата Y
   ObjectSetText("Equity","Equity: "+DoubleToString (AccountEquity(),2),10,"Arial",TextColor);

   ObjectCreate("Free margin", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Free margin", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Free margin", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Free margin", OBJPROP_YDISTANCE, 120);// Координата Y
   ObjectSetText("Free margin","Free margin: "+DoubleToString (AccountFreeMargin(),2),10,"Arial",TextColor);

   ObjectCreate("Sell information", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Sell information", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Sell information", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Sell information", OBJPROP_YDISTANCE, 150);// Координата Y
   ObjectSetText("Sell information","======SELL information======",10,"Arial",TextColor);

   ObjectCreate("Sell level", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Sell level", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Sell level", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Sell level", OBJPROP_YDISTANCE, 165);// Координата Y
   ObjectSetText("Sell level","Level: "+DoubleToString(CountSell,0),10,"Arial",TextColor);
   
   ObjectCreate("Sell length", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Sell length", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Sell length", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Sell length", OBJPROP_YDISTANCE, 180);// Координата Y
   ObjectSetText("Sell length","Length: "+DoubleToString(SELL_Length,0),10,"Arial",TextColor);
   
   ObjectCreate("Sell TP", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Sell TP", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Sell TP", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Sell TP", OBJPROP_YDISTANCE, 195);// Координата Y
   ObjectSetText("Sell TP","Take profit: "+DoubleToString(SELL_TP,0)+" ("+DoubleToString(SELL_TPPercent,2)+"%)",10,"Arial",TextColor);
   
   ObjectCreate("Sell distanse to TP", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Sell distanse to TP", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Sell distanse to TP", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Sell distanse to TP", OBJPROP_YDISTANCE, 210);// Координата Y
   ObjectSetText("Sell distanse to TP","Distanse to TP: "+DoubleToString(SELL_CurrTP,0)+" ("+DoubleToString(SELL_CurrTPPercent,2)+"%)",10,"Arial",TextColor);
   
   ObjectCreate("Buy information", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Buy information", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Buy information", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Buy information", OBJPROP_YDISTANCE, 240);// Координата Y
   ObjectSetText("Buy information","======BUY information=======",10,"Arial",TextColor);

   ObjectCreate("Buy level", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Buy level", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Buy level", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Buy level", OBJPROP_YDISTANCE, 255);// Координата Y
   ObjectSetText("Buy level","Level: "+DoubleToString(CountBuy,0),10,"Arial",TextColor);
   
   ObjectCreate("Buy length", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Buy length", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Buy length", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Buy length", OBJPROP_YDISTANCE, 270);// Координата Y
   ObjectSetText("Buy length","Length: "+DoubleToString(BUY_Length,0),10,"Arial",TextColor);
   
   ObjectCreate("Buy TP", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Buy TP", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Buy TP", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Buy TP", OBJPROP_YDISTANCE, 285);// Координата Y
   ObjectSetText("Buy TP","Take profit: "+DoubleToString(BUY_TP,0)+" ("+DoubleToString(BUY_TPPercent,2)+"%)",10,"Arial",TextColor);
   
   ObjectCreate("Buy distanse to TP", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Buy distanse to TP", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Buy distanse to TP", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Buy distanse to TP", OBJPROP_YDISTANCE, 300);// Координата Y
   ObjectSetText("Buy distanse to TP","Distanse to TP: "+DoubleToString(BUY_CurrTP,0)+" ("+DoubleToString(BUY_CurrTPPercent,2)+"%)",10,"Arial",TextColor);   

   ObjectCreate("Pair information", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Pair information", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Pair information", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Pair information", OBJPROP_YDISTANCE, 325);// Координата Y
   ObjectSetText("Pair information","=======Pair information======",10,"Arial",TextColor);

   ObjectCreate("Pair", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Pair", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Pair", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Pair", OBJPROP_YDISTANCE, 340);// Координата Y
   ObjectSetText("Pair","Pair: "+Symbol(),10,"Arial",TextColor);

   ObjectCreate("Margin required", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Margin required", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Margin required", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Margin required", OBJPROP_YDISTANCE, 355);// Координата Y
   ObjectSetText("Margin required","Margin required: "+DoubleToString(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2)+" $",10,"Arial",TextColor);

   ObjectCreate("Price pips", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Price pips", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Price pips", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Price pips", OBJPROP_YDISTANCE, 370);// Координата Y
   ObjectSetText("Price pips","Price pips: "+DoubleToString(MarketInfo(Symbol(), MODE_TICKVALUE), 2)+" $",10,"Arial",TextColor);

   ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Spread", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Spread", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Spread", OBJPROP_YDISTANCE, 385);// Координата Y
   ObjectSetText("Spread","Spread: "+DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),2)+" "+spread,10,"Arial",TextColor);

   ObjectCreate("Leverage", OBJ_LABEL, 0, 0, 0);// Создание объ.
   ObjectSet("Leverage", OBJPROP_CORNER, 0);    // Привязка угол
   ObjectSet("Leverage", OBJPROP_XDISTANCE, 15);// Координата Х
   ObjectSet("Leverage", OBJPROP_YDISTANCE, 400);// Координата Y
   ObjectSetText("Leverage","Leverage: 1:"+DoubleToString(AccountLeverage(), 0)+" "+leverage,10,"Arial",TextColor);   
   
   return(0);                             // Выход из start()
}
//---------------------------------------------------------------

void deinit() 
{
   //Удаление объектов
   ObjectDelete("Account information");
   ObjectDelete("Fon");                   // Удаление объекта
   ObjectDelete("Balance");               // Удаление объекта
   ObjectDelete("Profit/DD");             // Удаление объекта
   ObjectDelete("Max DD");                // Удаление объекта
   ObjectDelete("Equity");                // Удаление объекта
   ObjectDelete("Free margin");           // Удаление объекта
   ObjectDelete("Setka information");     // Удаление объекта
   ObjectDelete("Sell information");      // Удаление объекта
   ObjectDelete("Sell level");            // Удаление объекта
   ObjectDelete("Sell length");           // Удаление объекта
   ObjectDelete("Sell TP");               // Удаление объекта
   ObjectDelete("Sell distanse to TP");   // Удаление объекта
   ObjectDelete("Buy information");       // Удаление объекта
   ObjectDelete("Buy level");             // Удаление объекта
   ObjectDelete("Buy length");            // Удаление объекта
   ObjectDelete("Buy TP");                // Удаление объекта
   ObjectDelete("Buy distanse to TP");    // Удаление объекта
   ObjectDelete("Total");                 // Удаление объекта
   ObjectDelete("Pair information");      // Удаление объекта
   ObjectDelete("Pair");                  // Удаление объекта
   ObjectDelete("Margin required");       // Удаление объекта
   ObjectDelete("Price pips");            // Удаление объекта
   ObjectDelete("Spread");                // Удаление объекта
   ObjectDelete("Leverage");              // Удаление объекта                                     
}
//---------------------------------------------------------------