//+------------------------------------------------------------------+
//|                                            William_TradeInfo.mq4 |
//+------------------------------------------------------------------+
#property copyright   "p.villy"
#property link        "pvilly@yahoo.com"
#property description "Плечо. Спред."
#property description "Цена пипса или пункта торгуемого лота в валюте депозита."
#property description "Прибыль/убыток. Средства. Баланс."
#property description "Свободная маржа в валюте депозита. Уровень маржи в %%."
#property description "Алерт на изменение плеча со стороны брокера, изменение цвета отображения."
#property description "Алерт, если уровень маржи (%%) ниже заданного."
#property strict    

#property indicator_chart_window
//----
enum   pointcalc {
                  novopoint  = 0,            // Цена пункта (нового)
                  olldpoint  = 1,            // Цена Пипса (старого)
                 };
//----
enum   Spread    {
                  standard   = 0,            // Спред: стандарт размера,шрифта
                  optional   = 1             // Спред: выбор размера,шрифта
                 };
//----
enum   Profit    {
                  Standard   = 0,            // Профит: стандарт размера,шрифта
                  Optional   = 1             // Профит: выбор размера,шрифта
                 };
//----
enum   LCorner   {
                  LeftUpper  = 1,           // Левый верхний угол
                  LeftDown   = 2,           // Левый нижний угол
                  RightDown  = 3,           // Правый нижний угол
                  RightUpper = 4            // Правый верхний угол
                 };
//----                 
enum   RCorner   {
                  Left_Upper  = 1,           // Левый верхний угол
                  Left_Down   = 2,           // Левый нижний угол
                  Right_Down  = 3,           // Правый нижний угол
                  Right_Upper = 4            // Правый верхний угол
                 };
//----                 
enum   Alarm     {            
                  yes   = 0,                // Да
                  no    = 1                 // Нет
                 };
//----
enum   alarm     {            
                  Yes   = 0,                // Да
                  No    = 1                 // Нет
                 };
//---- input parameters
extern string    OPTIONS;                                     // Опции
extern string    line12                    ="";               // ========
extern double    LotSize                   = 0.1;             // Размер Лота
extern pointcalc PP_Select                 = 1;               // Пипсы или пункты
extern string    Acc_Currency_Symbol       ="$";              // Обозначение символа
extern LCorner   Acc_Corner                = 2;               // Угол привязки Техпараметров
extern RCorner   Old_Corner                = 3;               // Угол привязки Финпараметров
extern string line0="";                                       // ========
extern Alarm  AlertLeverage                = 0;               // Алерт на изменение плеча
extern ushort OrderedLeverage              = 100;             // Запланированное торговое плечо
extern string line1="";                                       // ========
extern alarm  AlertMargin                  = 0;               // Алерт на снижение маржи
extern double MinMarginLevel               = 120;             // Мин. уровень маржи в %%
extern string line2="";                                       // ========
extern Spread SpreadView                   = 1;               // Спред: отображение
extern Profit ProfitView                   = 1;               // Профит: отображение
extern string line3="";                                       // ========
extern int    Spread_Size                  = 26;              // Размер шрифта "Спред"
extern string Spread_Font=                 "Cambria";         // Тип шрифта "Спред"
extern string line4="";                                       // ========
extern int    Profit_Size                  = 26;              // Размер шрифта "Профит"
extern string Profit_Font                  = "Cambria";       // Тип шрифта "Профит"
extern string line5="";                                       // ========
extern int    Acc_Font_Size                = 12;              // Стандартный размер шрифта
extern string Acc_Font_Type                = "Arial";         // Стандартный шрифт
extern string line6="";                                       // ========
extern bool   Acc_X_distance_Control_All_X = false;           // Общий сдвиг по горизонтали
extern int    Acc_X_distance_Set_All_X     = 1400;            // Дистанция горизонтального сдвига 
extern string line7="";                                       // Привязка к левому нижнему углу
extern int    Acc_X_distance_Leverage    = 8;                 // Сдвиг Плеча по Х
extern int    Acc_X_distance_Spread      = 170;               // Сдвиг Спреда по Х
extern int    Acc_X_distance_PointPrice  = 320;               // Сдвиг Цены пипса по Х
extern string line14="";                                      // Привязка к правому нижнему углу
extern int    Acc_X_distance_Profit      = 8;                 // Сдвиг Профита по Х
extern int    Acc_X_distance_Equity      = 230;               // Сдвиг Средств по Х
extern int    Acc_X_distance_Balance     = 350;               // Сдвиг Баланса по Х
extern int    Acc_X_distance_Free_Margin = 550;               // Сдвиг Маржи в %% по Х
extern int    Acc_X_distance_Margin      = 710;               // Сдвиг СвободнойМаржи по Х
extern string line8="";                                       // ========
extern bool   Acc_Y_distance_Control_All_Y= true;             // Общий сдвиг по вертикали
extern int    Acc_Y_distance_Set_All_Y    = 1;                // Дистанция вертикального сдвига 
extern string line9="";                                       // ========
extern int    Acc_Y_distance_Leverage    = 8;                 // Сдвиг Плеча по Y
extern int    Acc_Y_distance_Spread      = 20;                // Сдвиг Спреда по Y
extern int    Acc_Y_distance_PointPrice  = 30;                // Сдвиг Цены пипса по Y
extern int    Acc_Y_distance_Profit      = 40;                // Сдвиг Профита по Y
extern int    Acc_Y_distance_Equity      = 50;                // Сдвиг Средств по Y
extern int    Acc_Y_distance_Balance     = 60;                // Сдвиг Баланса по Y
extern int    Acc_Y_distance_Free_Margin = 70;                // Сдвиг Маржи в %% по Y
extern int    Acc_Y_distance_Margin      = 80;                // Сдвиг Свободной Маржи по Y
extern string line10="";                 // ========
extern color  Acc_Color_Leverage         = clrDodgerBlue;     // Цвет Плеча
extern color  Acc_Color_Spread           = clrLightCyan;      // Цвет Спреда
extern color  Acc_Color_PointPrice       = clrDodgerBlue;     // Цвет Цены пипса
extern color  Acc_Color_Balance          = clrAqua;           // Цвет Баланса
extern color  Acc_Color_Equity           = clrYellow;         // Цвет Средств
extern color  Acc_Color_Margin           = clrDodgerBlue;     // Цвет Маржи%%
extern color  Acc_Color_Free_Margin      = clrDodgerBlue;     // Цвет Свободной Маржи
extern color  Acc_Color_Profit           = clrLimeGreen;      // Цвет Профита
extern color  Acc_Color_Loss             = clrRed;            // Цвет Философского Профита
extern color  Acc_Color_PnL_Closed       = clrLightSlateGray; // Цвет Промежуточный
extern string line11="";                 // ========
extern bool   Acc_HIDE_ALL               = false;             // Спрятать ВСЕ
extern bool   Acc_HIDE_Leverage          = false;             // Спрятать Плечо
extern bool   Acc_HIDE_Spread            = false;             // Спрятать надпись Спред
extern bool   Acc_HIDE_Value             = false;             // Спрятать показания Спреда
extern bool   Acc_HIDE_PointPrice        = false;             // Спрятать Цену Пипса
extern bool   Acc_HIDE_Balance           = false;             // Спрятать Баланс
extern bool   Acc_HIDE_Equity            = false;             // Спрятать Средства
extern bool   Acc_HIDE_Margin            = false;             // Спрятать Маржу%%
extern bool   Acc_HIDE_Free_Margin       = false;             // Спрятать Свободную Маржу
extern bool   Acc_HIDE_Profit            = false;             // Спрятать Профит
//----
int    SpreadShift          = 60; // Сдвиг Спреда относительно надписи Spread:
int    Acc_X_distance_Value = Acc_X_distance_Spread+SpreadShift;
int    Acc_Y_distance_Value = 17;
int    OrdersInMarket       = 0;  // Данные для алерта
//----
double point;
// Profit alternative color
color  PnL_Color;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//----
   point=Point;
   if((Digits==3) || (Digits==5))
     {
      point*=10;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// delete 
   ObjectDelete("Acc_Leverage");
   ObjectDelete("Acc_Balance_Label");
   ObjectDelete("Acc_Equity_Label");
   ObjectDelete("Acc_Margin_Level");
   ObjectDelete("Acc_Free_Margin_Label");
   ObjectDelete("Acc_Profit_Label");
   ObjectDelete("Acc_Spread");
   ObjectDelete("SpreadValue");
   ObjectDelete("Acc_PointPrice");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   // Account Trade Info:    
      if(Acc_HIDE_ALL==false)
       {
   // Leverage                              AlertLeverage          
      if(Acc_HIDE_Leverage==false)
        {
         long Acc_Leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
         //----
         if(AlertLeverage && OrderedLeverage != Acc_Leverage)
            Alert(_Symbol,"Плечо изменилось!");
         //-----
         ObjectCreate("Acc_Leverage",OBJ_LABEL,0,0,0);
         ObjectSetText("Acc_Leverage","Leverage 1:"+IntegerToString(Acc_Leverage)+"",Acc_Font_Size,Acc_Font_Type,Acc_Color_Leverage);
         //----
         if(OrderedLeverage != Acc_Leverage)
         ObjectSetText("Acc_Leverage","Leverage 1:"+IntegerToString(Acc_Leverage)+"",Acc_Font_Size,Acc_Font_Type,clrRed);
         //----
         ObjectSet("Acc_Leverage",OBJPROP_CORNER,Acc_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Leverage=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Leverage",OBJPROP_XDISTANCE,Acc_X_distance_Leverage);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Leverage=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Leverage",OBJPROP_YDISTANCE,Acc_Y_distance_Leverage);
         //----
        }
   
   // Spread                                                
      if(Acc_HIDE_Spread==false)
        {
         double Acc_Spread=MarketInfo(Symbol(), MODE_SPREAD);
         
         ObjectCreate("Acc_Spread",OBJ_LABEL,0,0,0);
         //----
         if(SpreadView==0) 
         ObjectSetText("Acc_Spread","Spread: "+DoubleToString(Acc_Spread,0)+"",Acc_Font_Size,Acc_Font_Type,Acc_Color_Spread);
         //----
         if(SpreadView==1) 
         {
         ObjectSetText("Acc_Spread","Spread:",Acc_Font_Size,Acc_Font_Type,Acc_Color_Spread);
         //----
         }
         //----
         ObjectSet("Acc_Spread",OBJPROP_CORNER,Acc_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Spread=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Spread",OBJPROP_XDISTANCE,Acc_X_distance_Spread);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Spread=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Spread",OBJPROP_YDISTANCE,Acc_Y_distance_Spread);
         //----
        }
         
   //SpreadValue                               
      if(Acc_HIDE_Value==false)
        {
         double Acc_SpreadValue=MarketInfo(Symbol(), MODE_SPREAD);
         //----
         if(SpreadView==1) 
         ObjectCreate("SpreadValue",OBJ_LABEL,0,0,0);
         //----
         ObjectSetText("SpreadValue",""+DoubleToString(Acc_SpreadValue,0)+"",Spread_Size,Spread_Font,Acc_Color_Spread);
         //----
         ObjectSet("SpreadValue",OBJPROP_CORNER,Acc_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Value=Acc_X_distance_Set_All_X;
           }
         ObjectSet("SpreadValue",OBJPROP_XDISTANCE,Acc_X_distance_Value);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Value=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("SpreadValue",OBJPROP_YDISTANCE,Acc_Y_distance_Value);
         //----
        }
        
   // PointPrice
      if(Acc_HIDE_PointPrice==false)
        {
         string DepositCurrency=AccountInfoString(ACCOUNT_CURRENCY);
         
         double PipValue=(((MarketInfo(Symbol(),MODE_TICKVALUE)*point)/MarketInfo(Symbol(),MODE_TICKSIZE))*LotSize);
         double PointValue=PipValue/10;
         //----
         ObjectCreate("Acc_PointPrice",OBJ_LABEL,0,0,0);
         //----
         if(PP_Select==0) 
         ObjectSetText("Acc_PointPrice","Лот ("+DoubleToString(LotSize,2)+")  Пункт = $ "+DoubleToStr(PointValue,3)+"",Acc_Font_Size,Acc_Font_Type,Acc_Color_PointPrice);
         //----
         if(PP_Select==1) 
         ObjectSetText("Acc_PointPrice","Лот ("+DoubleToString(LotSize,2)+")  Пипс = $ "+DoubleToStr(PipValue,3)+"",Acc_Font_Size,Acc_Font_Type,Acc_Color_PointPrice);
         //----
         ObjectSet("Acc_PointPrice",OBJPROP_CORNER,Acc_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_PointPrice=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_PointPrice",OBJPROP_XDISTANCE,Acc_X_distance_PointPrice);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_PointPrice=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_PointPrice",OBJPROP_YDISTANCE,Acc_Y_distance_PointPrice);
         //----
        }
   
   // Profit                                          
      if(Acc_HIDE_Profit==false)
        {
         string Acc_Profit=NumberToStr(AccountProfit(),",T12.2");
         ObjectCreate("Acc_Profit_Label",OBJ_LABEL,0,0,0);
         //----   
         if(AccountProfit()>=0.01){PnL_Color=Acc_Color_Profit;}
         else if(AccountProfit()<=-0.01){PnL_Color=Acc_Color_Loss;}
         else {PnL_Color=Acc_Color_PnL_Closed;}
         //----
         if(!ProfitView)
         ObjectSetText("Acc_Profit_Label"," Prf: "+Acc_Currency_Symbol+" "+Acc_Profit,Acc_Font_Size,Acc_Font_Type,PnL_Color);
         else
         ObjectSetText("Acc_Profit_Label"," Prf: "+Acc_Currency_Symbol+" "+Acc_Profit,Profit_Size,Profit_Font,PnL_Color);
         //----
         ObjectSet("Acc_Profit_Label",OBJPROP_CORNER,Old_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Profit=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Profit_Label",OBJPROP_XDISTANCE,Acc_X_distance_Profit);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Profit=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Profit_Label",OBJPROP_YDISTANCE,Acc_Y_distance_Profit);
        }
   
   // Equity                                          
      if(Acc_HIDE_Equity==false)
        {
         string Acc_Equity=NumberToStr(AccountEquity(),",T12.2");
         ObjectCreate("Acc_Equity_Label",OBJ_LABEL,0,0,0);
         ObjectSetText("Acc_Equity_Label"," Eq: "+Acc_Currency_Symbol+" "+Acc_Equity,Acc_Font_Size,Acc_Font_Type,Acc_Color_Equity);
         ObjectSet("Acc_Equity_Label",OBJPROP_CORNER,Old_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Equity=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Equity_Label",OBJPROP_XDISTANCE,Acc_X_distance_Equity);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Equity=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Equity_Label",OBJPROP_YDISTANCE,Acc_Y_distance_Equity);
        }
   
   // Balance                                          
       if(Acc_HIDE_Balance==false)
        {
         string Acc_Balance=NumberToStr(AccountBalance(),",T12.2");
         ObjectCreate("Acc_Balance_Label",OBJ_LABEL,0,0,0);
         ObjectSetText("Acc_Balance_Label"," Bl: "+Acc_Currency_Symbol+" "+Acc_Balance,Acc_Font_Size,Acc_Font_Type,Acc_Color_Balance);
         ObjectSet("Acc_Balance_Label",OBJPROP_CORNER,Old_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Balance=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Balance_Label",OBJPROP_XDISTANCE,Acc_X_distance_Balance);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Balance=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Balance_Label",OBJPROP_YDISTANCE,Acc_Y_distance_Balance);
        }

   // Free_Margin                                          
      if(Acc_HIDE_Free_Margin==false)
        {
         string Acc_Free_Margin=NumberToStr(AccountFreeMargin(),",T12.2");
         //----
         ObjectCreate("Acc_Free_Margin_Label",OBJ_LABEL,0,0,0);
         ObjectSetText("Acc_Free_Margin_Label"," Free: "+Acc_Currency_Symbol+" "+Acc_Free_Margin,Acc_Font_Size,Acc_Font_Type,Acc_Color_Free_Margin);
         ObjectSet("Acc_Free_Margin_Label",OBJPROP_CORNER,Old_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Free_Margin=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Free_Margin_Label",OBJPROP_XDISTANCE,Acc_X_distance_Free_Margin);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Free_Margin=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Free_Margin_Label",OBJPROP_YDISTANCE,Acc_Y_distance_Free_Margin);
        }

   // Margin                                          
      if(Acc_HIDE_Margin==false)
        {
         string Acc_Margin=DoubleToString(AccountInfoDouble(ACCOUNT_MARGIN_LEVEL),2);
         //----
         if(AlertMargin && OrdersInMarket < OrdersTotal() && MinMarginLevel > StringToDouble(Acc_Margin))
            Alert(_Symbol,"Мало денег!");
         //-----
         ObjectCreate("Acc_Margin_Level",OBJ_LABEL,0,0,0);
         //----
         if(OrdersInMarket == OrdersTotal())
         ObjectSetText("Acc_Margin_Level"," MrgLev: % Нет Ордеров",Acc_Font_Size,Acc_Font_Type,Acc_Color_Margin);
         else
         ObjectSetText("Acc_Margin_Level"," MrgLev: % "+Acc_Margin,Acc_Font_Size,Acc_Font_Type,Acc_Color_Margin);
         //----
         ObjectSet("Acc_Margin_Level",OBJPROP_CORNER,Old_Corner);
         if(Acc_X_distance_Control_All_X==true)
           {
            Acc_X_distance_Margin=Acc_X_distance_Set_All_X;
           }
         ObjectSet("Acc_Margin_Level",OBJPROP_XDISTANCE,Acc_X_distance_Margin);
         if(Acc_Y_distance_Control_All_Y==true)
           {
            Acc_Y_distance_Margin=Acc_Y_distance_Set_All_Y;
           }
         ObjectSet("Acc_Margin_Level",OBJPROP_YDISTANCE,Acc_Y_distance_Margin);
        }
   //----        
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|         Double to String                                         |
//+------------------------------------------------------------------+
string NumberToStr(double n,string mask)
  {return(DoubleToStr(n,2));}
//+------------------------------------------------------------------+