//+------------------------------------------------------------------+
//|                                Copyright 2014, cmillion@narod.ru |
//|                                               http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property version   "1.00"
#property indicator_chart_window
#property strict
#property description "Индикатор помогает увидеть результаты торговли"


input color    Color1     = clrBlack;          // цвет 
input color    Color2     = clrWhite;          // цвет 
input color    Color3     = clrBlue;           // цвет 
input color    Color4     = clrRed;            // цвет 
input color    Color5     = clrGreen;          // цвет 
input color    Color6     = clrLemonChiffon;   // цвет 
input color    Color7     = clrLightGray;      // цвет 
input color    Color8     = clrSnow;           // цвет 
input color    Color9     = clrGray;           // цвет 

string Font        = "Times New Roman"; // Шрифт
int    Width       = 10;                // размер
long   X=30;
long   Y=30;


string InpName="cm-Trade Info";
double STOPLEVEL;
string AC;
//+------------------------------------------------------------------+
int OnInit()
{
   AC=" "+AccountCurrency();
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Del();
}
//--------------------------------------------------------------------
void Del()
{
   ObjectDelete(0,InpName);
   ObjectDelete(0,"cm__fon1_");
   ObjectDelete(0,"cm__kn Orders Line");
   ObjectDelete(0,"cm__kn History");
   ObjectDelete(0,"cm__kn MarketInfo");
   ObjectDelete(0,"cm__kn NL");
   ObjectDelete(0,"cm__NoLoss_NLb");
   ObjectDelete(0,"cm__NoLoss_NLs");
   ObjectDelete(0,"cm__NoLoss_NL");
   ObjectDelete(0,"cm__Buy");
   ObjectDelete(0,"cm__Sell");
   ObjectDelete(0,"cm__BL");
   ObjectDelete(0,"cm__SL");
   ObjectDelete(0,"cm__00_");
   ObjectDelete(0,"cm__0_");
   ObjectDelete(0,"cm__1_");
   ObjectDelete(0,"cm__2_");
   ObjectDelete(0,"cm__3_");
   ObjectDelete(0,"cm__4_");
   ObjectDelete(0,"cm__5_");
   ObjectDelete(0,"cm__6_");
   ObjectDelete(0,"cm__60_");
   ObjectsDeleteAll(0,OBJ_TREND);
   ObjectDelete(0,"cm__ сегодня");
   ObjectDelete(0,"cm__ вчера");
   ObjectDelete(0,"cm__ неделя");
   ObjectDelete(0,"cm__ месяц");
   ObjectDelete(0,"cm__ сегодн1");
   ObjectDelete(0,"cm__ сегодн2");
   ObjectDelete(0,"cm__ сегодн3");
   ObjectDelete(0,"cm__ сегодн4");
   ObjectDelete(0,"cm__ сегодн5");
   ObjectDelete(0,"cm__ сегодн6");
   ObjectDelete(0,"cm__ сегодн7");
   ObjectDelete(0,"cm__ сегодн8");
}
//--------------------------------------------------------------------
int start()
{

   Redraw();

   return(0);
}
//--------------------------------------------------------------------

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{

   if(id==CHARTEVENT_OBJECT_CLICK)
   {
      string clickedChartObject=sparam;
      //if (clickedChartObject=="cm__kn Orders Line")
      //{
         //PlaySound("Ok.wav");
      //}
      if (clickedChartObject=="cm__kn History")
      {
         if (ObjectGetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE))
         {
            Del();
            RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
            ObjectSetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE,false);
         }
         if (!ObjectGetInteger(0,"cm__kn History",OBJPROP_STATE))
         {
            if (ObjectFind("cm__ сегодня")==0) Del();
            RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
         }
      }
      if (clickedChartObject=="cm__kn MarketInfo")
      {
         if (ObjectGetInteger(0,"cm__kn History",OBJPROP_STATE))
         {
            if (ObjectFind("cm__ сегодня")==0) Del();
            RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
            ObjectSetInteger(0,"cm__kn History",OBJPROP_STATE,false);
         }
         if (!ObjectGetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE))
         {
            Del();
            RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
         }
      }
      //Comment(clickedChartObject);
      Redraw();
   }
}
//--------------------------------------------------------------------
int Redraw()
{
   if (ObjectFind(InpName)==0)
   {
      ObjectGetInteger(0,InpName,OBJPROP_XDISTANCE,0,X);
      ObjectGetInteger(0,InpName,OBJPROP_YDISTANCE,0,Y);
   }
   else
   {
      //X=30; Y=30;
      RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
   }
   RectLabelCreate(0,"cm__fon1_"        ,0,X+1  ,Y+1 ,198,103,Color6,Color7,STYLE_SOLID,1,false,false,true,0);
   ButtonCreate(0,"cm__kn Orders Line"  ,0,X+2  ,Y+22,88,18 ,"Orders",Font,Width,Color1,Color8,Color7,false);
   ButtonCreate(0,"cm__kn NL"           ,0,X+2  ,Y+40,88,18 ,"NL",Font,Width,Color1,Color8,Color7,false);

   RectLabelCreate(0,"cm__0_" ,0 ,X+1,Y+1,198,18,Color3,Color7,STYLE_SOLID,1,false,false,true,0);
   LabelCreate(0    ,"cm__00_",0 ,X+100,Y+10,CORNER_LEFT_UPPER,StringConcatenate(InpName," ",Symbol()),Font,Width+0,Color2,0,ANCHOR_CENTER,false,false,true,0);
   RefreshRates();
   double OOP;
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   double stoplevel=STOPLEVEL*Point;
   int b=0,s=0,bs=0,ss=0,bl=0,sl=0,tip;
   double OL,LB=0,LS=0,ProfitB=0,ProfitS=0;
   double price_b=0,price_s=0;
   int i,Ticket;string NameLine;datetime OOT;
   bool WiewOrdersLine=ObjectGetInteger(0,"cm__kn Orders Line",OBJPROP_STATE);

   for (i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol())
         { 
            OOP = NormalizeDouble(OrderOpenPrice(),Digits);
            OOT = OrderOpenTime();
            Ticket=OrderTicket();
            tip = OrderType(); 
            OL = OrderLots();
            if (tip==OP_BUY)             
            {  
               b++; 
               LB+=OL;price_b+=(Bid-OOP)*OL+(OrderCommission()+OrderSwap())*Point;
               ProfitB+=OrderProfit()+OrderCommission()+OrderSwap();
               if (WiewOrdersLine)
               {
                  NameLine=StringConcatenate("Bay, Lot ",DoubleToStr(OL,2),"  Ticket ",DoubleToStr(Ticket,0));
                  ObjectDelete(NameLine);
                  ObjectCreate(NameLine,OBJ_TREND,0,OOT,OOP,Time[0],Bid);
                  ObjectSetInteger(0,NameLine, OBJPROP_COLOR,Color3); 
               }
            }
            if (tip==OP_SELL) 
            {
               s++;
               LS+=OL;price_s+=(OOP-Ask)*OL+(OrderCommission()+OrderSwap())*Point;
               ProfitS+=OrderProfit()+OrderCommission()+OrderSwap();
               if (WiewOrdersLine)
               {
                  NameLine=StringConcatenate("Sell, Lot ",DoubleToStr(OL,2),"  Ticket ",DoubleToStr(Ticket,0));
                  ObjectDelete(NameLine);
                  ObjectCreate(NameLine,OBJ_TREND,0,OOT,OOP,Time[0],Ask);
                  ObjectSetInteger(0,NameLine, OBJPROP_COLOR,Color4);
               }
            }
            if (WiewOrdersLine)
            {
               ObjectSetInteger(0,NameLine, OBJPROP_STYLE, STYLE_DOT);
               ObjectSetInteger(0,NameLine, OBJPROP_RAY,   false);
               ObjectSetInteger(0,NameLine,OBJPROP_SELECTABLE,false);
               ObjectSetInteger(0,NameLine,OBJPROP_SELECTED,false);
               ObjectSetInteger(0,NameLine,OBJPROP_HIDDEN,true);
            }
         }
      }
   }
   RectLabelCreate(0,"cm__1_" ,0 ,X+91,Y+22,58,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
   RectLabelCreate(0,"cm__2_" ,0 ,X+150,Y+22,48,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
   LabelCreate(0    ,"cm__Buy" ,0 ,X+120,Y+32,CORNER_LEFT_UPPER,StringConcatenate("Buy ",DoubleToStr(b,0)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
   LabelCreate(0    ,"cm__BL"  ,0 ,X+175,Y+32,CORNER_LEFT_UPPER,DoubleToStr(LB,2),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
   RectLabelCreate(0,"cm__3_" ,0 ,X+91,Y+42,58,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
   RectLabelCreate(0,"cm__4_" ,0 ,X+150,Y+42,48,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
   LabelCreate(0    ,"cm__Sell",0 ,X+120,Y+52,CORNER_LEFT_UPPER,StringConcatenate("Sell ",DoubleToStr(s,0)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
   LabelCreate(0    ,"cm__SL"  ,0 ,X+175,Y+52,CORNER_LEFT_UPPER,DoubleToStr(LS,2),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
   if (!WiewOrdersLine) ObjectsDeleteAll(0,OBJ_TREND);
//---
   if (ObjectGetInteger(0,"cm__kn NL",OBJPROP_STATE))
   {
      double NL=0,NLb=0,NLs=0;
      if(LB>0) NLb=Bid-price_b/LB;
      ARROW("cm__NoLoss_NLb", NLb, 6, Color3);
      if(LS>0) NLs=Ask+price_s/LS;
      ARROW("cm__NoLoss_NLs", NLs, 6, Color4);
      if(LB-LS>0) NL=Bid-(price_b+price_s)/(LB-LS);
      if(LB-LS<0) NL=Ask-(price_b+price_s)/(LB-LS);
      ARROW("cm__NoLoss_NL", NL, 6, Color5);
   }
   else
   {
      ObjectDelete(0,"cm__NoLoss_NLb");
      ObjectDelete(0,"cm__NoLoss_NLs");
      ObjectDelete(0,"cm__NoLoss_NL");
   }

//---

   RectLabelCreate(0,"cm__5_" ,0 ,X+1,Y+61,198,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
   ButtonCreate(0,"cm__kn History"      ,0,X+2  ,Y+82,98,18 ,"History",Font,Width,Color1,Color8,Color7,false);
   ButtonCreate(0,"cm__kn MarketInfo"   ,0,X+100 ,Y+82,98,18 ,"MarketInfo",Font,Width,Color1,Color8,Color7,false);
   double Profit=0;datetime OCT;
   double сегодня=0,вчера=0,неделя=0,месяц=0;
   if (ObjectGetInteger(0,"cm__kn History",OBJPROP_STATE))
   {
      for (i=OrdersHistoryTotal()-1; i>=0; i--)
      {                                               
         if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
            if (OrderSymbol()!=Symbol()) continue;
            Profit = OrderProfit()+OrderSwap()+OrderCommission();
            OOP = OrderOpenPrice();
            OOT = OrderOpenTime();
            OCT = OrderCloseTime();
            Ticket=OrderTicket();
            tip = OrderType(); 
            OL = OrderLots();
            if (tip==OP_BUY)             
            {  
               NameLine=StringConcatenate("Bay, Lot ",DoubleToStr(OL,2),"  Ticket ",DoubleToStr(Ticket,0));
               ObjectDelete(NameLine);
               ObjectCreate(NameLine,OBJ_TREND,0,OOT,OOP,OCT,OrderClosePrice());
               ObjectSetInteger(0,NameLine, OBJPROP_COLOR,Color3); 
            }
            if (tip==OP_SELL) 
            {
               NameLine=StringConcatenate("Sell, Lot ",DoubleToStr(OL,2),"  Ticket ",DoubleToStr(Ticket,0));
               ObjectDelete(NameLine);
               ObjectCreate(NameLine,OBJ_TREND,0,OOT,OOP,OCT,OrderClosePrice());
               ObjectSetInteger(0,NameLine, OBJPROP_COLOR,Color4);
            }
            ObjectSetInteger(0,NameLine, OBJPROP_STYLE, STYLE_DOT);
            ObjectSetInteger(0,NameLine, OBJPROP_RAY,   false);
            ObjectSetInteger(0,NameLine,OBJPROP_SELECTABLE,false);
            ObjectSetInteger(0,NameLine,OBJPROP_SELECTED,false);
            ObjectSetInteger(0,NameLine,OBJPROP_HIDDEN,true);
            //---
            if (OCT>=iTime(NULL,1440,0)) сегодня+=Profit;
            if (OCT>=iTime(NULL,1440,1) && OCT<iTime(NULL,1440,0)) вчера+=Profit;
            if (OCT>=iTime(NULL,PERIOD_W1,0)) неделя+=Profit;
            if (OCT>=iTime(NULL,PERIOD_MN1,0)) месяц+=Profit;
         } 
      }  
      RectLabelCreate(0,InpName,0,X,Y,200,225,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
      RectLabelCreate(0,"cm__fon1_"        ,0,X+1  ,Y+1 ,198,223,Color6,Color7,STYLE_SOLID,1,false,false,true,0);
      RectLabelCreate(0,"cm__6_" ,0 ,X+1,Y+104,198,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
      LabelCreate(0    ,"cm__60_",0 ,X+100,Y+112,CORNER_LEFT_UPPER,"Profit",Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
      LabelCreate(0    ,"cm__ сегодня" ,0 ,X+100,Y+135,CORNER_LEFT_UPPER,StringConcatenate("сегодня ",DoubleToStr(сегодня,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
      LabelCreate(0    ,"cm__ вчера"   ,0 ,X+100,Y+155,CORNER_LEFT_UPPER,StringConcatenate("вчера ",DoubleToStr(вчера,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
      LabelCreate(0    ,"cm__ неделя"  ,0 ,X+100,Y+175,CORNER_LEFT_UPPER,StringConcatenate("неделя ",DoubleToStr(неделя,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
      LabelCreate(0    ,"cm__ месяц"   ,0 ,X+100,Y+195,CORNER_LEFT_UPPER,StringConcatenate("месяц ",DoubleToStr(месяц,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
   }
//---
   if (ObjectGetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE))
   {
      RectLabelCreate(0,InpName,0,X,Y,200,345,Color2,Color1,STYLE_SOLID,3,false,true,true,0);
      RectLabelCreate(0,"cm__fon1_"        ,0,X+1  ,Y+1 ,198,343,Color6,Color7,STYLE_SOLID,1,false,false,true,0);
      RectLabelCreate(0,"cm__6_" ,0 ,X+1,Y+104,198,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0);
      LabelCreate(0    ,"cm__60_",0 ,X+100,Y+112,CORNER_LEFT_UPPER,"MarketInfo",Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
      LabelCreate(0    ,"cm__ сегодня" ,0 ,X+100,Y+135,CORNER_LEFT_UPPER,StringConcatenate("SPREAD ",MarketInfo(Symbol(),MODE_SPREAD)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);
      LabelCreate(0    ,"cm__ вчера"   ,0 ,X+100,Y+155,CORNER_LEFT_UPPER,StringConcatenate("STOPLEVEL ",MarketInfo(Symbol(),MODE_STOPLEVEL)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах  "+"\n"+
      LabelCreate(0    ,"cm__ неделя"  ,0 ,X+100,Y+175,CORNER_LEFT_UPPER,StringConcatenate("LOTSIZE ",MarketInfo(Symbol(),MODE_LOTSIZE)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 15 Размер контракта в базовой валюте инструмента  "+"\n"+
      LabelCreate(0    ,"cm__ месяц"   ,0 ,X+100,Y+195,CORNER_LEFT_UPPER,StringConcatenate("TICKVALUE ",MarketInfo(Symbol(),MODE_TICKVALUE)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 16 Размер минимального изменения цены инструмента в валюте депозита  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн1" ,0 ,X+100,Y+215,CORNER_LEFT_UPPER,StringConcatenate("TICKSIZE ",MarketInfo(Symbol(),MODE_TICKSIZE)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 17 Минимальный шаг изменения цены инструмента в валюте котировки  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн2" ,0 ,X+100,Y+235,CORNER_LEFT_UPPER,StringConcatenate("SWAPLONG ",MarketInfo(Symbol(),MODE_SWAPLONG)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 18 Размер свопа для длинных позиций  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн3" ,0 ,X+100,Y+255,CORNER_LEFT_UPPER,StringConcatenate("SWAPSHORT ",MarketInfo(Symbol(),MODE_SWAPSHORT)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 19 Размер свопа для коротких позиций  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн4" ,0 ,X+100,Y+275,CORNER_LEFT_UPPER,StringConcatenate("MINLOT ",MarketInfo(Symbol(),MODE_MINLOT)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 23 Минимальный размер лота  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн5" ,0 ,X+100,Y+295,CORNER_LEFT_UPPER,StringConcatenate("LOTSTEP ",MarketInfo(Symbol(),MODE_LOTSTEP)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 24 Шаг изменения размера лота  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн6" ,0 ,X+100,Y+315,CORNER_LEFT_UPPER,StringConcatenate("MAXLOT ",MarketInfo(Symbol(),MODE_MAXLOT)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 25 Максимальный размер лота  "+"\n"+
      LabelCreate(0    ,"cm__ сегодн7" ,0 ,X+100,Y+335,CORNER_LEFT_UPPER,StringConcatenate("MARGINREQUIRED ",MarketInfo(Symbol(),MODE_MARGINREQUIRED)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 32 Размер свободных средств, необходимых для открытия 1 лота на покупку  "+"\n"+
   }
   return(0);
}
//+------------------------------------------------------------------+
void ARROW(string Name, double Price, int ARROWCODE, color c)
{
   ObjectDelete(Name);
   ObjectCreate(Name,OBJ_ARROW,0,Time[0],Price,0,0,0,0);                     
   ObjectSetInteger(0,Name,OBJPROP_ARROWCODE,ARROWCODE);
   ObjectSetInteger(0,Name,OBJPROP_COLOR, c);
   ObjectSetInteger(0,Name,OBJPROP_WIDTH, 1);
}
//--------------------------------------------------------------------
bool ButtonCreate(const long              chart_ID=0,               // ID графика
                  const string            name="Button",            // имя кнопки
                  const int               sub_window=0,             // номер подокна
                  const long               x=0,                     // координата по оси X
                  const long               y=0,                     // координата по оси y
                  const int               width=50,                 // ширина кнопки
                  const int               height=18,                // высота кнопки
                  const string            text="Button",            // текст
                  const string            font="Arial",             // шрифт
                  const int               font_size=10,             // размер шрифта
                  const color             clr=clrNONE,      //цвет текста
                  const color             clrON=clrNONE,    //цвет фона
                  const color             clrOFF=clrNONE,   //цвет фона
                  const bool              state=false)              // нажата/отжата
  {
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE);
   }
   color back_clr;
   if (ObjectGetInteger(chart_ID,name,OBJPROP_STATE)) back_clr=clrON; else back_clr=clrOFF;
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}
//--------------------------------------------------------------------
bool RectLabelCreate(const long             chart_ID=0,               // ID графика
                     const string           name="RectLabel",         // имя метки
                     const int              sub_window=0,             // номер подокна
                     const long              x=0,                     // координата по оси X
                     const long              y=0,                     // координата по оси y
                     const int              width=50,                 // ширина
                     const int              height=18,                // высота
                     const color            back_clr=clrNONE,         // цвет фона
                     const color            clr=clrNONE,              //цвет плоской границы (Flat)
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // стиль плоской границы
                     const int              line_width=1,             // толщина плоской границы
                     const bool             back=false,               // на заднем плане
                     const bool             selection=false,          // выделить для перемещений
                     const bool             hidden=true,              // скрыт в списке объектов
                     const long             z_order=0)                // приоритет на нажатие мышью
  {
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   return(true);
}
//--------------------------------------------------------------------
bool LabelCreate(const long              chart_ID=0,               // ID графика
                 const string            name="Label",             // имя метки
                 const int               sub_window=0,             // номер подокна
                 const long              x=0,                      // координата по оси X
                 const long              y=0,                      // координата по оси y
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
                 const string            text="Label",             // текст
                 const string            font="Arial",             // шрифт
                 const int               font_size=10,             // размер шрифта
                 const color             clr=clrNONE,      
                 const double            angle=0.0,                // наклон текста
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
                 const bool              back=false,               // на заднем плане
                 const bool              selection=false,          // выделить для перемещений
                 const bool              hidden=true,              // скрыт в списке объектов
                 const long              z_order=0)                // приоритет на нажатие мышью
{
   ResetLastError();
   if (ObjectFind(chart_ID,name)==-1)
   {
      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
      {
         Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
         return(false);
      }
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   }
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   return(true);
  }
//--------------------------------------------------------------------