//+------------------------------------------------------------------+
//|                                                  i-Profit v2.mq4 |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                               Доработал: Kolosov |
//|  12.05.2008  Индикатор:                                          |
//|              - текущей прибыли                                   |
//|              - прибыли за сегодня                                |
//|              - прибыли за вчера                                  |
//|              - прибыли за несколько прошедших дней               |
//|              - прибыли за текущую неделю                         |
//|              - прибыли за текущий месяц                          |
//|              - прибыли за текущий квартал                        |
//|              - прибыли за текущий год                            |
//|  04.02.2009  Добавлен столбец прибыли в пунктах.                 |
//|  07.11.2011  Добавлен столбец накопления лотов ( Kordan ).       |
//|  23.09.2014  Переписан на новый билд. Добавлена возможность      |
//|              смены угла привязки индикатора                      |
//|  11.11.2014  Небольшие правки внешнего вида                      |
//+------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property version   "2.00"
#property strict
#property indicator_chart_window
// Original version http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

//------- Внешние параметры индикатора ----------------------------------------+
extern int    corner    = 1;            // Угол привязки индикатора
extern int    eiPercent = 3;            // Расчёт процента прибыли относительно:
                                        //  0 - текущего баланса
                                        //  1 - баланса на начало дня
                                        //  2 - баланса на начало недели
                                        //  3 - баланса на начало месяца
                                        //  4 - баланса на начало квартала
                                        //  5 - баланса на начало года
extern int    eiOffsetY = 30;           // Смещение текста по вертикали
extern int    eiStepY   = 12;           // Шаг смещения текста по вертикали
extern int    eiX1Row   = 3;            // Координата X первой колонки
extern int    eiX2Row   = 165;          // Координата X второй колонки
extern int    eiX3Row   = 220;          // Координата X третей колонки
extern int    eiX4Row   = 285;          // Координата X четвёртой колонки
extern int    eiX5Row   = 355;          // Координата X пятой колонки
extern color  ecText    = clrSilver;    // Цвет текста
extern color  ecProfit  = clrLime;      // Цвет прибыли
extern color  ecLoss    = clrDarkOrange;// Цвет убытка
extern string font_face = "Calibri";    // Шрифт текста
extern int    font_size = 9;            // Размер шрифта

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   DeleteObjects();
   return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
  DeleteObjects();
}
//+------------------------------------------------------------------+
//| 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[])
{
   datetime d0, d1, d2, d3, d4, d5, d6, d7, d8;

   d0 = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
   while (TimeDayOfWeek(d0)<1 || TimeDayOfWeek(d0)>5) d0-=24*60*60;
   d1 = d0-24*60*60;
   while (TimeDayOfWeek(d1)<1 || TimeDayOfWeek(d1)>5) d1-=24*60*60;
   d2 = d1-24*60*60;
   while (TimeDayOfWeek(d2)<1 || TimeDayOfWeek(d2)>5) d2-=24*60*60;
   d3 = d2-24*60*60;
   while (TimeDayOfWeek(d3)<1 || TimeDayOfWeek(d3)>5) d3-=24*60*60;
   d4 = d3-24*60*60;
   while (TimeDayOfWeek(d4)<1 || TimeDayOfWeek(d4)>5) d4-=24*60*60;
   d5 = DateOfMonday();
   d6 = StrToTime(IntegerToString(Year(),0,' ') + "." + IntegerToString(Month(),0,' ') + ".01");
   d7 = DateBeginQuarter();
   d8 = StrToTime(IntegerToString(Year(),0,' ') + ".01.01");

   double l  = GetSumLot("",-1,-1);
   double lu = NormalizeDouble(l,2);
   double l0 = GetLotFromDate("", -1, -1, d0);
   double l1 = GetLotFromDate("", -1, -1, d1)-l0;
   double l2 = GetLotFromDate("", -1, -1, d2)-l1-l0;
   double l3 = GetLotFromDate("", -1, -1, d3)-l2-l1-l0;
   double l4 = GetLotFromDate("", -1, -1, d4)-l3-l2-l1-l0;
   double l5 = GetLotFromDate("", -1, -1, d5);
   double l6 = GetLotFromDate("", -1, -1, d6);
   double l7 = GetLotFromDate("", -1, -1, d7);
   double l8 = GetLotFromDate("", -1, -1, d8);

   double tu = GetProfitOpenPosInPoint();
   double u0 = GetProfitFromDateInPoint("", -1, -1, d0);
   double u1 = GetProfitFromDateInPoint("", -1, -1, d1)-u0;
   double u2 = GetProfitFromDateInPoint("", -1, -1, d2)-u1-u0;
   double u3 = GetProfitFromDateInPoint("", -1, -1, d3)-u2-u1-u0;
   double u4 = GetProfitFromDateInPoint("", -1, -1, d4)-u3-u2-u1-u0;
   double u5 = GetProfitFromDateInPoint("", -1, -1, d5);
   double u6 = GetProfitFromDateInPoint("", -1, -1, d6);
   double u7 = GetProfitFromDateInPoint("", -1, -1, d7);
   double u8 = GetProfitFromDateInPoint("", -1, -1, d8);

   double tb = AccountBalance(), tp = AccountProfit();
   if (tb == 0) return (-1);
   double p0 = GetProfitFromDateInCurrency("", -1, -1, d0);
   double p1 = GetProfitFromDateInCurrency("", -1, -1, d1)-p0;
   double p2 = GetProfitFromDateInCurrency("", -1, -1, d2)-p1-p0;
   double p3 = GetProfitFromDateInCurrency("", -1, -1, d3)-p2-p1-p0;
   double p4 = GetProfitFromDateInCurrency("", -1, -1, d4)-p3-p2-p1-p0;
   double p5 = GetProfitFromDateInCurrency("", -1, -1, d5);
   double p6 = GetProfitFromDateInCurrency("", -1, -1, d6);
   double p7 = GetProfitFromDateInCurrency("", -1, -1, d7);
   double p8 = GetProfitFromDateInCurrency("", -1, -1, d8);

   string st;
   switch (eiPercent) {
      case 0 :         st="текущего"          ; break;
      case 1 : tb-=p0; st="на начало дня"     ; break;
      case 2 : tb-=p5; st="на начало недели"  ; break;
      case 3 : tb-=p6; st="на начало месяца"  ; break;
      case 4 : tb-=p7; st="на начало квартала"; break;
      default: tb-=p8; st="на начало года"    ; break;
   }
   double tr = tp*100/tb;
   double r0 = p0*100/tb;
   double r1 = p1*100/tb;
   double r2 = p2*100/tb;
   double r3 = p3*100/tb;
   double r4 = p4*100/tb;
   double r5 = p5*100/tb;
   double r6 = p6*100/tb;
   double r7 = p7*100/tb;
   double r8 = p8*100/tb;
   
   // New block
   int c_x_1 = eiX1Row;
   int c_x_2 = eiX2Row + 40;
   int c_x_3 = eiX3Row + 40;
   int c_x_4 = eiX4Row + 40;
   int c_x_5 = eiX5Row + 40;
   int c_x_6 = eiX4Row;
   int c_y_1 = eiOffsetY;
   int c_y_c = eiOffsetY-eiStepY;
   int k     = 1;

   if (corner == 1 || corner == 3) {
      c_x_2 = eiX5Row - eiX2Row;
      c_x_3 = eiX5Row - eiX3Row;
      c_x_1 = eiX5Row + eiX1Row*10;
      c_x_4 = eiX5Row - eiX4Row;
      c_x_5 = eiX1Row;
      c_x_6 = eiX1Row;
   }
   if (corner == 2 || corner == 3) {
      c_y_1 = eiOffsetY + 10*eiStepY-20;
      k     = -1;
      c_y_c = c_y_1 + eiStepY;
   }
   
   SetLabel("comment_iprofit","Указан процент прибыли относительно баланса " + st, ecText, eiX1Row, c_y_c, 0);
   //
   
   SetLabel("iProfit_1", "Прибыль",   ecText, c_x_1,    c_y_1, 1);
   SetLabel("iProfit_2", "в пунктах", ecText, c_x_2,    c_y_1, 2);
   SetLabel("iProfit_3", "в лотах",   ecText, c_x_3,    c_y_1, 2);
   SetLabel("iProfit_4", "в валюте",  ecText, c_x_6+30, c_y_1, 0);
   
   SetLabel("iProfit11", "Текущая прибыль",                      ecText, c_x_1, c_y_1+k*1*eiStepY, 1);
   SetLabel("iProfit21", "Прибыль за сегодня",                   ecText, c_x_1, c_y_1+k*2*eiStepY, 1);
   SetLabel("iProfit31", "Прибыль за "+TimeToStr(d1, TIME_DATE), ecText, c_x_1, c_y_1+k*3*eiStepY, 1);
   SetLabel("iProfit41", "Прибыль за "+TimeToStr(d2, TIME_DATE), ecText, c_x_1, c_y_1+k*4*eiStepY, 1);
   SetLabel("iProfit51", "Прибыль за "+TimeToStr(d3, TIME_DATE), ecText, c_x_1, c_y_1+k*5*eiStepY, 1);
   SetLabel("iProfit61", "Прибыль за "+TimeToStr(d4, TIME_DATE), ecText, c_x_1, c_y_1+k*6*eiStepY, 1);
   SetLabel("iProfit71", "Прибыль за неделю",                    ecText, c_x_1, c_y_1+k*7*eiStepY, 1);
   SetLabel("iProfit81", "Прибыль за месяц",                     ecText, c_x_1, c_y_1+k*8*eiStepY, 1);
   SetLabel("iProfit91", "Прибыль за квартал",                   ecText, c_x_1, c_y_1+k*9*eiStepY, 1);
   SetLabel("iProfit01", "Прибыль за год",                       ecText, c_x_1, c_y_1+k*10*eiStepY,1);

   SetLabel("iProfit12", DoubleToStr(tu, 0), ColorOnSign(tp), c_x_2, c_y_1+k*1*eiStepY, 2);
   SetLabel("iProfit22", DoubleToStr(u0, 0), ColorOnSign(u0), c_x_2, c_y_1+k*2*eiStepY, 2);
   SetLabel("iProfit32", DoubleToStr(u1, 0), ColorOnSign(u1), c_x_2, c_y_1+k*3*eiStepY, 2);
   SetLabel("iProfit42", DoubleToStr(u2, 0), ColorOnSign(u2), c_x_2, c_y_1+k*4*eiStepY, 2);
   SetLabel("iProfit52", DoubleToStr(u3, 0), ColorOnSign(u3), c_x_2, c_y_1+k*5*eiStepY, 2);
   SetLabel("iProfit62", DoubleToStr(u4, 0), ColorOnSign(u4), c_x_2, c_y_1+k*6*eiStepY, 2);
   SetLabel("iProfit72", DoubleToStr(u5, 0), ColorOnSign(u5), c_x_2, c_y_1+k*7*eiStepY, 2);
   SetLabel("iProfit82", DoubleToStr(u6, 0), ColorOnSign(u6), c_x_2, c_y_1+k*8*eiStepY, 2);
   SetLabel("iProfit92", DoubleToStr(u7, 0), ColorOnSign(u7), c_x_2, c_y_1+k*9*eiStepY, 2);
   SetLabel("iProfit02", DoubleToStr(u8, 0), ColorOnSign(u8), c_x_2, c_y_1+k*10*eiStepY,2);

   SetLabel("iProfit15", DoubleToStr(lu, 2), ColorOnSign(tp), c_x_3, c_y_1+k*1*eiStepY, 2);
   SetLabel("iProfit25", DoubleToStr(l0, 2), ColorOnSign(l0), c_x_3, c_y_1+k*2*eiStepY, 2);
   SetLabel("iProfit35", DoubleToStr(l1, 2), ColorOnSign(l1), c_x_3, c_y_1+k*3*eiStepY, 2);
   SetLabel("iProfit45", DoubleToStr(l2, 2), ColorOnSign(l2), c_x_3, c_y_1+k*4*eiStepY, 2);
   SetLabel("iProfit55", DoubleToStr(l3, 2), ColorOnSign(l3), c_x_3, c_y_1+k*5*eiStepY, 2);
   SetLabel("iProfit65", DoubleToStr(l4, 2), ColorOnSign(l4), c_x_3, c_y_1+k*6*eiStepY, 2);
   SetLabel("iProfit75", DoubleToStr(l5, 2), ColorOnSign(l5), c_x_3, c_y_1+k*7*eiStepY, 2);
   SetLabel("iProfit85", DoubleToStr(l6, 2), ColorOnSign(l6), c_x_3, c_y_1+k*8*eiStepY, 2);
   SetLabel("iProfit95", DoubleToStr(l7, 2), ColorOnSign(l7), c_x_3, c_y_1+k*9*eiStepY, 2);
   SetLabel("iProfit05", DoubleToStr(l8, 2), ColorOnSign(l8), c_x_3, c_y_1+k*10*eiStepY,2);

   SetLabel("iProfit13", DoubleToStr(tp, 2), ColorOnSign(tp), c_x_4, c_y_1+k*1*eiStepY, 2);
   SetLabel("iProfit23", DoubleToStr(p0, 2), ColorOnSign(p0), c_x_4, c_y_1+k*2*eiStepY, 2);
   SetLabel("iProfit33", DoubleToStr(p1, 2), ColorOnSign(p1), c_x_4, c_y_1+k*3*eiStepY, 2);
   SetLabel("iProfit43", DoubleToStr(p2, 2), ColorOnSign(p2), c_x_4, c_y_1+k*4*eiStepY, 2);
   SetLabel("iProfit53", DoubleToStr(p3, 2), ColorOnSign(p3), c_x_4, c_y_1+k*5*eiStepY, 2);
   SetLabel("iProfit63", DoubleToStr(p4, 2), ColorOnSign(p4), c_x_4, c_y_1+k*6*eiStepY, 2);
   SetLabel("iProfit73", DoubleToStr(p5, 2), ColorOnSign(p5), c_x_4, c_y_1+k*7*eiStepY, 2);
   SetLabel("iProfit83", DoubleToStr(p6, 2), ColorOnSign(p6), c_x_4, c_y_1+k*8*eiStepY, 2);
   SetLabel("iProfit93", DoubleToStr(p7, 2), ColorOnSign(p7), c_x_4, c_y_1+k*9*eiStepY, 2);
   SetLabel("iProfit03", DoubleToStr(p8, 2), ColorOnSign(p8), c_x_4, c_y_1+k*10*eiStepY,2);

   SetLabel("iProfit14", DoubleToStr(tr, 2)+" %", ColorOnSign(tr), c_x_5, c_y_1+k*1*eiStepY, 2);
   SetLabel("iProfit24", DoubleToStr(r0, 2)+" %", ColorOnSign(r0), c_x_5, c_y_1+k*2*eiStepY, 2);
   SetLabel("iProfit34", DoubleToStr(r1, 2)+" %", ColorOnSign(r1), c_x_5, c_y_1+k*3*eiStepY, 2);
   SetLabel("iProfit44", DoubleToStr(r2, 2)+" %", ColorOnSign(r2), c_x_5, c_y_1+k*4*eiStepY, 2);
   SetLabel("iProfit54", DoubleToStr(r3, 2)+" %", ColorOnSign(r3), c_x_5, c_y_1+k*5*eiStepY, 2);
   SetLabel("iProfit64", DoubleToStr(r4, 2)+" %", ColorOnSign(r4), c_x_5, c_y_1+k*6*eiStepY, 2);
   SetLabel("iProfit74", DoubleToStr(r5, 2)+" %", ColorOnSign(r5), c_x_5, c_y_1+k*7*eiStepY, 2);
   SetLabel("iProfit84", DoubleToStr(r6, 2)+" %", ColorOnSign(r6), c_x_5, c_y_1+k*8*eiStepY, 2);
   SetLabel("iProfit94", DoubleToStr(r7, 2)+" %", ColorOnSign(r7), c_x_5, c_y_1+k*9*eiStepY, 2);
   SetLabel("iProfit04", DoubleToStr(r8, 2)+" %", ColorOnSign(r8), c_x_5, c_y_1+k*10*eiStepY,2);

   return(rates_total);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Возвращает цвет по знаку числа                                            |
//+----------------------------------------------------------------------------+
color ColorOnSign(double nu) 
{
   color lcColor = ecText;

   if (nu > 0) lcColor = ecProfit;
   if (nu < 0) lcColor = ecLoss;

   return(lcColor);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.05.2008                                                     |
//|  Описание : Возвращает дату начала квартала                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - позапрошлый)                      |
//|                                    (-1 - прошлый)                          |
//|    no - номер квартала             ( 0 - текущий)                          |
//|                                    ( 1 - следующий)                        |
//|                                    ( 2 - последующий)                      |
//+----------------------------------------------------------------------------+
datetime DateBeginQuarter(int nk = 0) 
{
   int ye = Year() - (int)MathFloor(nk/4);
   nk     = (int)MathMod(nk, 4);
   int mo = Month() - (int)MathMod(Month()+2, 3)+3*nk;
   if (mo < 1) {
      mo += 12;
      ye--;
   }
   if (mo > 12) {
      mo -= 12;
      ye++;
   }

   return(StrToTime(IntegerToString(ye,0,' ') + "." + IntegerToString(mo,0,' ') + ".01"));
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.05.2008                                                     |
//|  Описание : Возвращает дату понедельника                                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - позатой недели)                   |
//|                                    (-1 - прошлой недели)                   |
//|    no - номер понедельника         ( 0 - текущей недели)                   |
//|                                    ( 1 - следующий, ближайший будущий)     |
//|                                    ( 2 - последующий)                      |
//+----------------------------------------------------------------------------+
datetime DateOfMonday(int no=0) 
{
   datetime dt = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

   while (TimeDayOfWeek(dt)!=1) dt -= 24*60*60;
   dt += no*7*24*60*60;

   return(dt);
}

//+----------------------------------------------------------------------------+
//|  Удаление объектов.                                                        |
//+----------------------------------------------------------------------------+
void DeleteObjects() 
{
   string st = "iProfit";
   int    i, j;

   for (i = 0; i < 12; i++) {
      for (j = 1; j < 10; j++) ObjectDelete(st+IntegerToString(i,0,' ') + IntegerToString(j,0,' '));
   }
   
   ObjectDelete("comment_iprofit");
   ObjectDelete("iProfit_1");
   ObjectDelete("iProfit_2");
   ObjectDelete("iProfit_3");
   ObjectDelete("iProfit_4");
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
   double p = 0;
   int    i, k = OrdersHistoryTotal();

   if (sy == "0") sy = Symbol();
   for (i = 0; i < k; i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if ((OrderSymbol() == sy || sy == "") && 
             (op < 0 || OrderType() == op)) {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if (mn < 0 || OrderMagicNumber() == mn) {
                  if (dt < OrderCloseTime()) {
                     p += OrderProfit()+OrderCommission()+OrderSwap();
                  }
               }
            }
         }
      }
   }
   return(p);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный лот закрытых с определённой               |
//|             даты позиций                                                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetLotFromDate(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
   double p = 0;
   int i, k = OrdersHistoryTotal();
  
   if (sy == "0") sy = Symbol();
   for (i = 0; i < k; i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if ((OrderSymbol() == sy || sy == "") && 
             (op < 0 || OrderType() == op)) {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if (mn < 0 || OrderMagicNumber() == mn) {
                  if (dt < OrderCloseTime()) {
                     p += OrderLots();
                  }
               }
            }
         }
      }
   }
   return(p);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.02.2009                                                     |
//|  Описание : Возвращает суммарный профит в пунктах                          |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInPoint(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
   double p = 0, po;
   int    i, k = OrdersHistoryTotal();

   if (sy == "0") sy = Symbol();
   for (i = 0; i < k; i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if ((OrderSymbol() == sy || sy == "") && 
             (op < 0 || OrderType() == op)) {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if (mn < 0 || OrderMagicNumber() == mn) {
                  if (dt < OrderCloseTime()) {
                     po = MarketInfo(OrderSymbol(), MODE_POINT);
                     if (po == 0) 
                        if (StringFind(sy, "JPY") < 0) 
                           po = 0.0001; 
                        else 
                           po = 0.01;
                     if (OrderType() == OP_BUY) {
                        p += (OrderClosePrice() - OrderOpenPrice())/po;
                     }
                     if (OrderType() == OP_SELL) {
                        p += (OrderOpenPrice() - OrderClosePrice())/po;
                     }
                  }
               }
            }
         }
      }
   }
   return(p);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.08.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) 
{
   double p;
   int    i, k = OrdersTotal(), pr = 0;

   if (sy == "0") sy = Symbol();
   for (i = 0; i < k; i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if ((OrderSymbol() == sy || sy == "") && 
             (op < 0 || OrderType() == op)) {
            if (mn < 0 || OrderMagicNumber() == mn) {
               p = MarketInfo(OrderSymbol(), MODE_POINT);
               if (p == 0) 
                  if (StringFind(OrderSymbol(), "JPY") < 0) 
                     p = 0.0001; 
                  else 
                     p = 0.01;
               if (OrderType() == OP_BUY) {
                  pr += (MarketInfo(OrderSymbol(), MODE_BID) - OrderOpenPrice())/p;
               }
               if (OrderType() == OP_SELL) {
                  pr += (OrderOpenPrice() - MarketInfo(OrderSymbol(), MODE_ASK))/p;
               }
            }
         }
      }
   }
   return (pr);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV и Kordan,  http://www.kimiv.ru          |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный лот открытых позиций                      |                                                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//+----------------------------------------------------------------------------+
double GetSumLot(string sy="", int op=-1, int mn=-1)
{
   double b = 0, s = 0, p = 0;
   int i;
   if (sy == "0") sy = Symbol();
   for (i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if ((OrderSymbol() == sy || sy == "") && 
             (op < 0 || OrderType() == op)) {
            if (mn < 0 || OrderMagicNumber() == mn) {
               if (OrderType()==OP_BUY) {
                  b += OrderLots();
               }
               if (OrderType()==OP_SELL) {
                  s += OrderLots();
               }
            }
            p = b + s;
         }
      }
   }
  return(p);
}

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки                                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний)                     |
//|    fs - размер шрифта              (8 - по умолчанию)                      |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int mode) 
{
   if (ObjectFind(nm) < 0) 
      ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  
   ObjectSetText(nm, tx, font_size);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_XDISTANCE, xd);
   ObjectSet(nm, OBJPROP_YDISTANCE, yd);
   ObjectSet(nm, OBJPROP_CORNER,    corner);
   ObjectSetInteger(0,nm,OBJPROP_FONTSIZE, font_size);
   ObjectSetString( 0,nm,OBJPROP_FONT,     font_face);
   
   if (corner == 1 || corner == 3) {
      if (mode == 1 && corner == 1)    
         ObjectSetInteger(0,nm,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
      if (mode == 1 && corner == 3)    
         ObjectSetInteger(0,nm,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
   }
   
   if (corner == 0 || corner == 2) {
      if (mode == 2 && corner == 0)    
         ObjectSetInteger(0,nm,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
      if (mode == 2 && corner == 2)    
         ObjectSetInteger(0,nm,OBJPROP_ANCHOR,ANCHOR_RIGHT_LOWER);
   }
}
//+----------------------------------------------------------------------------+