//+------------------------------------------------------------------+
//|                                                 Market_Info.mq4 |
//|                                                          Alex-W- |
//|                                              mail: alex-w-@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Alex-W-"
#property link      "mail: alex-w-@bk.ru"

#property indicator_chart_window
//------------------- Входные параметры советника -------------------+

extern int     FontSize = 10;
extern color   FontCL   = Gold;

//------------------ Глобальные переменные советника ----------------+
int   shift_y = 0, shift_x = 0, binding = 2;                                                          // Сдвинуть текст, Binding (Привязка к углу)

//--------------------- Подключаемые библиотеки ---------------------+
#include      <stdlib.mqh>                                                 // Стандартная библиотека МТ4

//+------------------------------------------------------------------+
//| #############--- expert initialization function ---############# |
//+------------------------------------------------------------------+
int init()
{
//----
   
//----
   return(0);
}
//+------------------------------------------------------------------+
//| ###########--- expert deinitialization function ---############# |
//+------------------------------------------------------------------+
int deinit()
{
//----
   ObjectDelete( "spread" );
   ObjectDelete( "spread_max" );
   ObjectDelete( "spread_min" );
   ObjectDelete( "symb" );
   ObjectDelete( "clB" );
   ObjectDelete( "lots" );
   ObjectDelete( "op_orders" );
   ObjectDelete( "pst_orders" );
   ObjectDelete( "dep" );
   ObjectDelete( "prof_tx" );
   ObjectDelete( "prof_s" );
   ObjectDelete( "type_acc" );
   ObjectDelete( "st_level" );
   ObjectDelete( "st_level_max" );
   ObjectDelete( "st_level_min" );
   
   
   CreateBackground("background");
   CreateFrame("frame");
   
   //ObjectsDeleteAll();
   
//----
   return(0);
}
//+------------------------------------------------------------------+
//| ##############---  expert start function ---#################### |
//+------------------------------------------------------------------+
int start()
{
//---------------- Проверка флагов советника ------------------------+

//----------------- Variable Initialization -------------------------+

   int spr = MarketInfo(Symbol(),MODE_SPREAD);
   static int st_spr, spr_max, spr_min, sl_max, sl_min;
   double free_margin, profit;
   int topen, tserver, tperiod, tclbar, thour, tminute, tsek, op_or, pst_or, otype, minSt;
   color cl_profit;
   string txt_clbar, txt_hour, txt_minute, txt_sek, deposit, type_account;
   
   
   
//----

   // ============================ Фон ===========================================
   CreateBackground("background", 0, 11, 10, 42, 16, Black, binding);
   CreateFrame("frame", 1, 10, 10, 40, 15, Gold, binding);

   // ============================== Тип счёта ===================================
   
   if(IsDemo()) type_account = "   ### Демо счёт ###";
   else type_account = "### Реальный счёт ###";
   
   SetLabelText("type_acc", type_account, 50, 175, FontCL, binding, "Times New Roman", FontSize);
   
   // =========================== Валютная пара ===================================
   SetLabelText("symb", "Пара: " + Symbol(), 25, 155, FontCL, binding, "Times New Roman", FontSize);
   
   // ============================== Спред =======================================
   if(st_spr != spr){
      string Spread = "Спред: " + DoubleToStr(spr, 0);
      SetLabelText("spread", Spread, 25, 140, FontCL, binding, "Times New Roman", FontSize);
      st_spr = spr;
      
      if(st_spr!=spr_max && st_spr > spr_max){
         spr_max=st_spr;
         Spread="Max: " + DoubleToStr(spr_max, 0);
         SetLabelText("spread_max", Spread, 105, 140, FontCL, binding, "Times New Roman", FontSize);
      }
      if((st_spr!=spr_min && st_spr!=0 && st_spr < spr_min) || (spr_min==0)){
         spr_min=st_spr;
         Spread="Min: " + DoubleToStr(spr_min, 0);
         SetLabelText("spread_min", Spread, 160, 140, FontCL, binding, "Times New Roman", FontSize);
      }
   }
   // ========================= Min Stop Level ====================================
   minSt=MarketInfo(Symbol(), MODE_STOPLEVEL);
   SetLabelText("st_level", "MinStop: "+minSt, 25, 125, FontCL, binding, "Times New Roman", FontSize);
   if((sl_max != minSt && sl_max < minSt)||(sl_max==0)){
      sl_max=minSt;
      SetLabelText("st_level_max", "Max: "+sl_max, 105, 125, FontCL, binding, "Times New Roman", FontSize);
   }
   if((sl_min!=minSt && sl_min !=0 && sl_min > minSt) || (sl_min==0)){
      sl_min=minSt;
      SetLabelText("st_level_min", "Min: "+minSt, 160, 125, FontCL, binding, "Times New Roman", FontSize);
   }
   // ======================== До закрытия бара ===================================
   
   tperiod = Period() * 60;                  // Запрашиваем период графика и переводим его в секунды.
   topen = Time[0];                          // Время открытия бара
   tserver = TimeCurrent();                  // Время сервера
   tclbar = topen + tperiod;                 // Вычисляем время закрыия бара в секундах
   
   thour = ((tclbar - tserver) / 60) / 60;
   tminute = ((tclbar - tserver) / 60) % 60;
   tsek = (tclbar - tserver) % 60;
   
   if(thour < 10) txt_hour = "0" + thour;
      else txt_hour = thour;
   if(tminute < 10) txt_minute = "0" + tminute;
      else txt_minute = tminute;
   if(tsek < 10) txt_sek = "0" + tsek;
      else txt_sek = tsek;
   
   txt_clbar = "Close Bar: " + txt_hour + ":" + txt_minute + ":" + txt_sek;
   
   SetLabelText("clB", txt_clbar, 25, 110, FontCL, binding, "Times New Roman", FontSize);
   
   // ======================== Доступно лот ===================================
   
   free_margin = AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED);      // Доступные лоты.
   
   SetLabelText("lots", "Доступно лот: "+DoubleToStr(free_margin ,2), 25, 95, FontCL, binding, "Times New Roman", FontSize);
 
   // ======================== Информация об ордерах ==============================
   
   if(OrdersTotal() > 0){
      for(int i=0; i<OrdersTotal(); i++){
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){
            otype = OrderType();
            if((otype == OP_BUY) || (otype == OP_SELL)) op_or ++;
            if((otype == OP_BUYSTOP) || (otype == OP_SELLSTOP)) pst_or ++;
         }
      }
   }
   
   SetLabelText("op_orders", "Открытых ордеров: "+op_or, 25, 80, FontCL, binding, "Times New Roman", FontSize);
   
   SetLabelText("pst_orders", "Отложенных ордеров: "+pst_or, 25, 65, FontCL, binding, "Times New Roman", FontSize);
   
   deposit = DoubleToStr(AccountBalance(), 2);
   
   SetLabelText("dep", "Депозит: "+deposit, 25, 50, FontCL, binding, "Times New Roman", FontSize);
   
   SetLabelText("prof_tx", "PROFIT:", 25, 25, FontCL, binding, "Times New Roman", FontSize+2);
   
   
   profit = AccountEquity()-AccountBalance();
   
   if(profit > 0) cl_profit = Green;
   if(profit == 0) cl_profit = White;
   if(profit < 0) cl_profit = Red;
   
   SetLabelText("prof_s", DoubleToStr(profit,2), 95, 21, cl_profit, binding, "Times New Roman", FontSize+8);
  
   // ================================= END CODE ==================================




//----
   return(0);
}
//+------------------------------------------------------------------+
//|  автор: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Рисует квадрат (Рамку)                                           |
//+------------------------------------------------------------------+
//| параметры:                                                       |
//|   id       - ID                                                  |
//|   ty       - тип рамки (от 0 до 3)                               |
//|   x        - координата в пикселях, по горизонтали               |
//|   y        - координата в пикселях по вертикали                  |
//|   width    - ширина квадрата Символов (1 символ 5 px в ширину)   |
//|   height   - высота квадрата Символов (1 символ 12 px в высоту)  |
//|   cl       - цвет                                                |
//|   bd       - привязка к углу                                     |
//+------------------------------------------------------------------+   
void CreateFrame(string id="", int ty=0, int x=0, int y=0, int width=0, int height=0, color cl=Gold, int bd=0){
// шрифт 12 = 12-пикселей в высоту (перенос строки), и 5 пикселей в ширину (пробел)
//---
int      top_y, bot_y, cx, id_1, id_2;
string   top_ab, bot_cd;
//---
string arrA[]={"Ъ", "Й", "Х", "Ц"};    // Левый верхний угол
string arrB[]={"ї", "»", "ё", "·"};    // Правый верхний угол
string arrC[]={"Щ", "ј", "ѕ", "Ѕ"};    // Правый нижний угол
string arrD[]={"А", "И", "Ф", "У"};    // Левый нижний угол
string arrH[]={"Д", "Н", "Н", "Д"};    // Горизонтальная линия
string arrV[]={"і", "є", "і", "є"};    // Вертикальная линия
//---
   top_ab=arrA[ty];
   bot_cd=arrD[ty];
   for(int tb=0; tb<width-1; tb++){
      top_ab=StringConcatenate(top_ab, arrH[ty]);
      bot_cd=StringConcatenate(bot_cd, arrH[ty]);
   }
   top_ab=StringConcatenate(top_ab, arrB[ty]);
   bot_cd=StringConcatenate(bot_cd, arrC[ty]);
   
   if(x!=0&&y!=0){
      if(bd==0 || bd==1){
         top_y=y;
         bot_y=y+height*12;
      }else{
         top_y=y+height*12;
         bot_y=y;
      }
      SetLabelText(id+"_ab", top_ab, x, top_y, cl, bd, "Terminal", 12);
      SetLabelText(id+"_cd", bot_cd, x, bot_y, cl, bd, "Terminal", 12);
      
      for(int vl=0; vl<height-1; vl++){
         SetLabelText(id+"_bc:"+vl, arrV[ty], x, y+12+(vl*12), cl, bd, "Terminal", 12);
         SetLabelText(id+"_da:"+vl, arrV[ty], x+width*5, y+12+(vl*12), cl, bd, "Terminal", 12);
      }
   }else{
      if(ObjectFind(id+"_ab")>=0)ObjectDelete(id+"_ab");
      if(ObjectFind(id+"_cd")>=0)ObjectDelete(id+"_cd");
      while(true){
         id_1=ObjectFind(id+"_bc:"+cx);
         id_2=ObjectFind(id+"_da:"+cx);
         if(id_1>=0)ObjectDelete(id+"_bc:"+cx);
         if(id_2>=0)ObjectDelete(id+"_da:"+cx);
         if(id_1<0&&id_2<0)break;
         cx++;
      }
   }
}
//+------------------------------------------------------------------+
//|  автор: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Рисует закрашенный квадрат (для фона)                            |
//+------------------------------------------------------------------+
//| параметры:                                                       |
//|   id       - ID                                                  |
//|   ty       - Тип фона(от 0 до 3)                                 |
//|   x        - координата в пикселях, по горизонтали               |
//|   y        - координата в пикселях по вертикали                  |
//|   width    - ширина квадрата Символов (1 символ 5 px в ширину)   |
//|   height   - высота квадрата Символов (1 символ 12 px в высоту)  |
//|   cl       - цвет                                                |
//|   bd       - привязка к углу                                     |
//+------------------------------------------------------------------+
void CreateBackground(string id="", int ty=0, int x=0, int y=0, int width=0, int height=0, color cl=Black, int bd=0){
// шрифт 12 = 12-пикселей в высоту (перенос строки), и 5 пикселей в ширину (пробел)
//---
string line, type[]={"Ы","І","±","°"};
int    cx;
//---
   if(x!=0&&y!=0){
      for(int tb=0; tb<width; tb++)line=StringConcatenate(line, type[ty]);
      for(int vl=0; vl<height; vl++)SetLabelText(id+"bg"+vl, line, x-3, y+(vl*12), cl, bd, "Terminal", 12);
   }else{
      while(true){
         if(ObjectFind(id+"bg"+cx)<0)break;
         ObjectDelete(id+"bg"+cx);
         cx++;
      }
   }
}
//+------------------------------------------------------------------+
//|  автор: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Создаёт текстовую метку                                          |
//+------------------------------------------------------------------+
//| параметры:                                                       |
//|   id  - идентификатор метки (уникальное имя)                     |
//|   tx  - текст метки                                              |
//|   x   - координата в пикселях, по горизонтали                    |
//|   y   - координата в пикселях по вертикали                       |
//|   cl  - цвет                                                     |
//|   bd  - Binding, угол привязки объекта 0-3                       |
//|   ft  - шрифт                                                    |
//|   sz  - размер шрифта                                            |
//|   wd  - номер окна в котором создавать метку                     |
//|   rt  - вращение объекта в градусах                              |
//+------------------------------------------------------------------+
void SetLabelText(string id, string tx="NULL", int x=0, int y=0, color cl=Black, int bd=0, string ft="Georgia", int sz=12, int wd=0, int rt=0){
   //--- Если метка уже есть но не переданы координаты то удаляем ---
   if(tx!="NULL"){
      if(ObjectFind(id)<0)ObjectCreate(id, OBJ_LABEL, wd, 0, 0);
      ObjectSetText(id, tx, sz, ft, cl);
      ObjectSet(id, OBJPROP_CORNER, bd);
      ObjectSet(id, OBJPROP_XDISTANCE, x);
      ObjectSet(id, OBJPROP_YDISTANCE, y);
      ObjectSet(id,OBJPROP_ANGLE,rt);
   }else{
      if(tx=="NULL"&&ObjectFind(id)>=0)ObjectDelete(id);
   }
}  
  

//+------------------------------------------------------------------+