//+------------------------------------------------------------------+
//|                                                         TLSS.mq4 |
//|                               Copyright 2014, Andriy Ostafiychuk |
//|                       https://login.mql5.com/ru/users/geoscience |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Andriy Ostafiychuk"
#property link      "https://login.mql5.com/ru/users/geoscience"
#property version   "1.00"
#property indicator_chart_window
#property strict

enum ENUM_RASPOLOGENIE
{
   r1  = CORNER_LEFT_UPPER,    // Левый верхний угол графика
   r2  = CORNER_LEFT_LOWER,    // Левый нижний угол графика
   r3  = CORNER_RIGHT_LOWER,   // Правый нижний угол графика
   r4  = CORNER_RIGHT_UPPER   // Правый верхний угол графика
};

extern ENUM_RASPOLOGENIE  i_Corner = r1;  // Угол графика для привязки графического объекта
extern int     i_Coord_X         = 5;                    // Координата X положения надписей относительно угла привязки
extern int     i_Coord_Y         = 20;                   // Координата Y положения надписей относительно угла привязки
extern bool   Clock              = true;                 // Отображать время
extern bool   Leverage           = true;                 // Отображать плечо
extern bool   Swap               = true;                 // Отображать своп
extern bool   SwapFlash          = true;                 // Подсветка  +/- своп
extern bool   Spread             = true;                 // Отображать спред
extern bool   Background         = true;                 // Отображать фон
extern bool   PipCost            = true;                 // Отображать цену пункта
extern double Lot1               = 0.05;                 // Lot 1
extern double Lot2               = 0.1;                  // Lot 2
extern double Lot3               = 1.00;                 // Lot 3
extern string FontType           = "Verdana";            // Шрифт
extern int    FontSize           = 10;                   // Размер шрифта
extern color  Clock_Color        = Yellow;               // Цвет времени
extern color  General_text       = White;                // Цвет текста
extern color  Swap_Buy_Color     = Red;                  // Цвет текста своп покупки
extern color  Swap_Sell_Color    = Gainsboro;            // Цвет текста своп продажи
extern color  PipCostColor       = White;                 // Цвет текста стоимости пункта 
extern color  Background_Color   = DarkSlateGray;        // Цвет фона фрейма
extern color  Background_Frame   = Gainsboro;            // Цвет плоской рамки фрейма

int X_Size = 150;
int Y_Size = 130;
//bool  EventSetTimer(int seconds);
int i;
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorShortName("TLSS "+Symbol());
   if(!PipCost)Y_Size = 90;
   if(Background)
     {
      ObjectCreate(0,"TLSS_bg",OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_CORNER,i_Corner);
      int XX=0,YY=0;
      if (i_Corner == r1) // Левый верхний угол графика
      { 
         XX = i_Coord_X;
         YY = i_Coord_Y;
      }
      if (i_Corner == r2) // Левый нижний угол графика
      { 
         XX = i_Coord_X;
         YY = i_Coord_Y+Y_Size;
      }
      if (i_Corner == r3)// Правый нижний угол графика
      { 
         XX = i_Coord_X+X_Size;
         YY = i_Coord_Y+Y_Size;
      }
      if (i_Corner == r4)// Правый верхний угол графика
      { 
         XX = i_Coord_X+X_Size;
         YY = i_Coord_Y;
      }
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_XDISTANCE,XX);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_YDISTANCE,YY);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_YSIZE,Y_Size);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_XSIZE,X_Size);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_BGCOLOR,Background_Color);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_BORDER_TYPE,BORDER_FLAT);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_COLOR,Background_Frame);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,"TLSS_bg",OBJPROP_WIDTH,1);
     }
   Sleep(100);
   EventSetTimer(1);
   if(Clock) comment(0,Clock_Color,"",TimeToStr(TimeLocal(),TIME_SECONDS));
   if(Swap)
     {
      color  buySwapColor  = Swap_Buy_Color;
      color  sellSwapColor = Swap_Sell_Color;
      double Swaplong=MarketInfo(Symbol(),MODE_SWAPLONG);
      double Swapshort=MarketInfo(Symbol(),MODE_SWAPSHORT);
      if(SwapFlash)
        {
         if(Swaplong>0)buySwapColor=Green;
         else buySwapColor=Red;
         if(Swapshort>0)sellSwapColor=Green;
         else sellSwapColor=Red;
        }
      comment(2,buySwapColor,"Buy Swap: ",DoubleToStr(Swaplong,2));
      comment(3,sellSwapColor,"Sell Swap: ",DoubleToStr(Swapshort,2));
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   int obj_total=ObjectsTotal();
   for(int obj=obj_total-1; obj>=0; obj--)
     {
      string objname=ObjectName(obj);
      if(StringFind(objname,"TLSS")>=0)ObjectDelete(objname);
     }
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//|  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[])
  {
   if(Leverage) comment(1,General_text,"Leverage:  1:",IntegerToString(AccountLeverage()));
   if(Spread) comment(4,General_text,"Current spread: ",DoubleToStr(MarketInfo(Symbol(),MODE_SPREAD),0));
   if(PipCost)
     {
      int d=2;
      if(Lot1<0.1)d=3;
      comment(5,PipCostColor,"Lot "+DoubleToStr(Lot1,2)+":  ",DoubleToStr(PipsCost(Lot1),d));
      d=2;
      if(Lot2<0.1)d=3;
      comment(6,PipCostColor,"Lot "+DoubleToStr(Lot2,2)+":  ",DoubleToStr(PipsCost(Lot2),d));
      d=2;
      if(Lot3<0.1)d=3;
      comment(7,PipCostColor,"Lot "+DoubleToStr(Lot3,2)+":  ",DoubleToStr(PipsCost(Lot3),d));
     } 
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(Clock) comment(0,Clock_Color,"",TimeToStr(TimeLocal(),TIME_SECONDS));
   return;
  }
//+------------------------------------------------------------------+
//|  Output parameters in objects                                    |
//+------------------------------------------------------------------+
void comment(int n,color c,string s0="",string s1="")
  {
   string r=s0+s1;
   string name="TLSS_"+IntegerToString(n);
   if (i_Corner == r2||i_Corner == r3) // нижние углы графика
   { 
      n=4-n;
   }   
   int y=i_Coord_Y+5+n*15;
   int x=i_Coord_X+5;
   if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
   ObjectSet(name,OBJPROP_CORNER,i_Corner);
   ObjectSet(name,OBJPROP_XDISTANCE,x);
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   ObjectSetText(name,r,FontSize,FontType,c);
  }
//+------------------------------------------------------------------+
double PipsCost(double Lot)
{
 
 double pipcost=NormalizeDouble(MarketInfo(Symbol(),MODE_TICKVALUE)*Lot,4);
 if(Digits==5||Digits==3)pipcost*=10;
 
 return (pipcost);
}