//+------------------------------------------------------------------+
//|                       Цена+Спред+Баланс+Средства+Просадка+БУ.mq4 |
//|                                                     Night© 2012  |
//|                                              instaforex-night.ru |
//+------------------------------------------------------------------+
#property copyright "Night© 2012"
#property link      "instaforex-night.ru"

#property indicator_chart_window
//----
extern color Color1 = Lime;
int Size1 = 25;
string Font1 = "Verdana";
extern color Color = DimGray;
int Size = 10;
string Font = "Verdana";
string    txt;
//----
extern color ColorMarket = Gold;
extern color ColorSL     = Lime;
extern int   Width     = 2;
extern color ColorBuy  = Aqua;
extern int   WidthBuy  = 1;
extern color ColorSell = Red;
extern int   WidthSell = 1;
extern int   Magic     = -1; //если -1, то все ордера на данной валютной паре, иначе только с магиком
//----

int init() {
return (0);
}

int deinit() {
   ObjectDelete("price");   
   ObjectDelete("SPREAD");
   ObjectDelete("Баланс");
   ObjectDelete("Средства");
   ObjectDelete("Просадка");
//----
   remove_objects("NoLoss_");
   return(0);  
//----
}

int start() {
   int l_ind_counted_0 = IndicatorCounted();
   double ld_22 = 0;
   int ld_20 = 0;
   int ld_21 = 0;
   string    txt_Баланс="";
   string    txt_Средства="";
   string    txt_Просадка="";
   color col = DodgerBlue;

   double Balans = NormalizeDouble( AccountBalance(),Digits);
   double Sredstva = NormalizeDouble(AccountEquity(),Digits); 
    
   if (Sredstva >= Balans/6*5) col = DodgerBlue; 
   if (Sredstva >= Balans/6*4 && Sredstva < Balans/6*5)col = DeepSkyBlue;
   if (Sredstva >= Balans/6*3 && Sredstva < Balans/6*4)col = Gold;
   if (Sredstva >= Balans/6*2 && Sredstva < Balans/6*3)col = OrangeRed;
   if (Sredstva >= Balans/6   && Sredstva < Balans/6*2)col = Crimson;
   if (Sredstva <  Balans/6                           )col = Red;

   //------------------------- 
ObjectDelete("Баланс");
ObjectCreate("Баланс",OBJ_LABEL,0,0,1.0);
   ObjectSet("Баланс", OBJPROP_CORNER, 3);
   ObjectSet("Баланс", OBJPROP_XDISTANCE, 10);
   ObjectSet("Баланс", OBJPROP_YDISTANCE, 45);
   txt_Баланс=(DoubleToStr(AccountBalance(), 2));
   ObjectSetText("Баланс","БАЛАНС     "+txt_Баланс+"",15,"Times New Roman",RoyalBlue);
   //-------------------------   
ObjectDelete("Средства");
ObjectCreate("Средства",OBJ_LABEL,0,0,1.0);
   ObjectSet("Средства", OBJPROP_CORNER, 3);
   ObjectSet("Средства", OBJPROP_XDISTANCE, 10);
   ObjectSet("Средства", OBJPROP_YDISTANCE, 25);
   txt_Средства=(DoubleToStr(AccountEquity(), 2));
   ObjectSetText("Средства","СРЕДСТВА      "+txt_Средства+"",15,"Times New Roman",RoyalBlue);
   //-------------------------   
ObjectDelete("Просадка");
ObjectCreate("Просадка",OBJ_LABEL,0,0,1.0);
   ObjectSet("Просадка", OBJPROP_CORNER, 3);
   ObjectSet("Просадка", OBJPROP_XDISTANCE, 10);
   ObjectSet("Просадка", OBJPROP_YDISTANCE, 5);
   txt_Просадка=DoubleToStr(100*(1-(Sredstva/Balans)),2);//(DoubleToStr(AccountEquity(), 2));
   ObjectSetText("Просадка","ПРОСАДКА     "+txt_Просадка+""+CharToStr(37)+"",15,"Times New Roman",col);
   //------------------------- 

   ld_22 = MarketInfo(Symbol(), MODE_BID);
   ObjectCreate("price", OBJ_LABEL, 0, 0, 0);
   ObjectSet("price", OBJPROP_CORNER,1);
   ObjectSet("price", OBJPROP_XDISTANCE, 20);
   ObjectSet("price", OBJPROP_YDISTANCE, 20);
   ObjectSetText("price", DoubleToStr(ld_22, Digits ), Size1, Font1, Color1);   
   
   ld_20 = MarketInfo(Symbol(), MODE_SPREAD);
   txt = "Спред" +"  "+ ld_20;
   ObjectCreate("SPREAD", OBJ_LABEL, 0, 0, 0);
   ObjectSet("SPREAD", OBJPROP_CORNER,1);
   ObjectSet("SPREAD", OBJPROP_XDISTANCE, 20);
   ObjectSet("SPREAD", OBJPROP_YDISTANCE, 60);
   ObjectSetText("SPREAD", txt, Size, Font, Color);
//----
   double profit, Profit, ProfitS, ProfitB;
   int b,s,tip,bo,so;
   double price,price_b,price_s,lot,lot_s,lot_b,price_bo,price_so,lot_so,lot_bo,NLb,NLs,NL;
   double TICKVALUE=MarketInfo(Symbol(),MODE_TICKVALUE);
   double LOTSIZE = MarketInfo(Symbol(),MODE_LOTSIZE);
   for (int i=0; i<OrdersTotal(); i++)
   {  
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  
         if (OrderSymbol()==Symbol() && (Magic == OrderMagicNumber() || Magic == -1))
         {
            profit = OrderProfit()+OrderSwap()+OrderCommission();
            Profit += profit;
            price = OrderOpenPrice();
            lot = OrderLots();
            tip = OrderType();
            if (tip==OP_BUY ) 
            {
               ProfitB += profit;
               price_b += price*lot;
               b++;  
               lot_b+=lot;
            }
            if (tip==OP_SELL) 
            {
               ProfitS += profit;
               price_s += price*lot;
               s++;  
               lot_s+=lot;
            }
            drawtext(OrderTicket(),OrderOpenPrice(),lot,colorType(tip));
            if (tip==OP_BUYSTOP || tip==OP_BUYLIMIT) 
            {
               price_bo += price*lot;
               lot_bo+=lot;
               bo++;
            }
            if (tip==OP_SELLSTOP || tip==OP_SELLLIMIT) 
            {
               price_so += price*lot;
               lot_so+=lot;
               so++;
            }
         }  
      }  
   }
   ObjectDelete("NoLoss__NLb");
   if (b!=0) 
   {  
      NLb = price_b/lot_b;
      ObjectCreate("NoLoss__NLb",OBJ_ARROW,0,Time[0],NLb,0,0,0,0);                     
      ObjectSet   ("NoLoss__NLb",OBJPROP_ARROWCODE,6);
      ObjectSet   ("NoLoss__NLb",OBJPROP_COLOR, ColorBuy);
      ObjectSet   ("NoLoss__NLb",OBJPROP_WIDTH, WidthBuy);
   }
   ObjectDelete("NoLoss__NLs");
   if (s!=0) 
   {  
      NLs = price_s/lot_s;
      ObjectCreate("NoLoss__NLs",OBJ_ARROW,0,Time[0],NLs,0,0,0,0);                     
      ObjectSet   ("NoLoss__NLs",OBJPROP_ARROWCODE,6);
      ObjectSet   ("NoLoss__NLs",OBJPROP_COLOR, ColorSell);
      ObjectSet   ("NoLoss__NLs",OBJPROP_WIDTH, WidthSell);
   }
   /*ObjectDelete("NoLoss__NL");
   if (b!=0 && s!=0 && lot_b!=lot_s) 
   {  
      NL = NormalizeDouble(Bid - Profit/TICKVALUE/(lot_b-lot_s)*Point,Digits);
      ObjectCreate("NoLoss__NL",OBJ_ARROW,0,Time[0],NL,0,0,0,0);                     
      ObjectSet   ("NoLoss__NL",OBJPROP_ARROWCODE,6);
      ObjectSet   ("NoLoss__NL",OBJPROP_COLOR, ColorMarket);
      ObjectSet   ("NoLoss__NL",OBJPROP_WIDTH, Width);
   }
   
   ObjectDelete("NoLoss_с отложками");
   if (bo+b!=0 && so+s!=0 && lot_b+lot_bo!=lot_s+lot_so) 
   {  
      NL = NormalizeDouble((price_bo+price_b-price_so-price_s)/(lot_b+lot_bo-lot_s-lot_so),Digits);
      ObjectCreate("NoLoss_с отложками",OBJ_ARROW,0,Time[0],NL,0,0,0,0);                     
      ObjectSet   ("NoLoss_с отложками",OBJPROP_ARROWCODE,6);
      ObjectSet   ("NoLoss_с отложками",OBJPROP_COLOR, ColorSL);
      ObjectSet   ("NoLoss_с отложками",OBJPROP_WIDTH, Width);
   }
   DrawLABEL("NoLoss__TIME",3,5,15,Gray,TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   DrawLABEL("NoLoss__1",3,5,30,colorPrice(ProfitB),StringConcatenate("Buy ",b,"  Profit ",DoubleToStr(ProfitB,2),"  Lot ",DoubleToStr(lot_b,2)));
   DrawLABEL("NoLoss__2",3,5,45,colorPrice(ProfitS),StringConcatenate("Sell ",s,"  Profit ",DoubleToStr(ProfitS,2),"  Lot ",DoubleToStr(lot_s,2)));
   DrawLABEL("NoLoss__b",3,5,60,colorPriceo(lot_so),StringConcatenate("Отложек sell ",so,"   lot ",DoubleToStr(lot_so,2)));
   DrawLABEL("NoLoss__s",3,5,75,colorPriceo(lot_bo),StringConcatenate("Отложек buy ",bo,"   lot ",DoubleToStr(lot_bo,2)));
   */
//----
   return (0);
}   
//+------------------------------------------------------------------+
int drawtext(string NameLine, double Y1, double l,color c)
{
   NameLine=StringConcatenate("NoLoss__",NameLine);
   ObjectDelete (NameLine);
   ObjectCreate (NameLine, OBJ_TEXT,0,Time[WindowFirstVisibleBar()-WindowFirstVisibleBar()/10],Y1,0,0,0,0);
   ObjectSetText(NameLine, DoubleToStr(l,2),8,"Arial");
   ObjectSet    (NameLine, OBJPROP_COLOR, c);
}

//--------------------------------------------------------------------

color colorType(int t) 
{ 
   if (t==OP_BUY) return(ColorBuy);
   if (t==OP_SELL) return(ColorSell);
   //if (t==OP_BUYLIMIT) return(ColorBuy);
   //if (t==OP_SELLLIMIT) return(ColorSell);
   //if (t==OP_BUYSTOP) return(ColorBuy);
   //if (t==OP_SELLSTOP) return(ColorSell);
} 
//-------------------------------------------------------------------- 
//-------------------------------------------------------------------- 
//-------------------------------------------------------------------- 
int remove_objects(string PreName)                                     //удаляeт обьeкты начинающиeся на PreName
{
   for(int k=ObjectsTotal()-1; k>=0; k--) 
     {
      string Obj_Name=ObjectName(k);                           // Запрашиваeм имя объeкта
      string Head=StringSubstr(Obj_Name,0,StringLen(PreName)); // Извлeкаeм первыe симолы
 
      if (Head==PreName)// Найдeн объeкт, ..
         {
         ObjectDelete(Obj_Name);
         }                  
     }
   return(0);
}
//+------------------------------------------------------------------+
/*
//----
void DrawLABEL(string name, int CORNER, int X, int Y, color clr, string Name)
{
   if (ObjectFind(name)==-1)
   {
      ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name, OBJPROP_CORNER, CORNER);
      ObjectSet(name, OBJPROP_XDISTANCE, X);
      ObjectSet(name, OBJPROP_YDISTANCE, Y);
   }
   ObjectSetText(name,Name,10,"Arial",clr);
}
//----
string StrOrdersType(int t) 
void DrawLABEL(string name, int CORNER, int X, int Y, color clr, string Name)
{
   if (ObjectFind(name)==-1)
   {
      ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(name, OBJPROP_CORNER, CORNER);
      ObjectSet(name, OBJPROP_XDISTANCE, X);
      ObjectSet(name, OBJPROP_YDISTANCE, Y);
   }
   ObjectSetText(name,Name,10,"Arial",clr);
}
//----
{ 
   if (t==OP_BUY) return("Buy");
   if (t==OP_SELL) return("Sell");
   if (t==OP_BUYLIMIT) return("BuyLimit");
   if (t==OP_SELLLIMIT) return("SellLimit");
   if (t==OP_BUYSTOP) return("BuyStop");
   if (t==OP_SELLSTOP) return("SellStop");
} 
color colorPriceo(double p) 
{ 
   if (p==0) return(Gray);
   if (p>0) return(ColorSL);
   if (p<0) return(Red);
} 
//----
color colorPrice(double p) 
{ 
   if (p==0) return(Gray);
   if (p>0) return(ColorMarket);
   if (p<0) return(Red);
} 
//-------------------------------------------------------------------- */
/*
MODE_LOW                1 Минимальная дневная цена 
MODE_HIGH               2 Максимальная дневная цена 
MODE_TIME               5 Время поступления последней котировки 
MODE_BID                9 Последняя поступившая цена предложения. Для текущего инструмента хранится в предопределенной переменной Bid 
MODE_ASK               10 Последняя поступившая цена продажи. Для текущего инструмента хранится в предопределенной переменной Ask 
MODE_POINT             11 Размер пункта в валюте котировки. Для текущего инструмента хранится в предопределенной переменной Point 
MODE_DIGITS            12 Количество цифр после десятичного точки в цене инструмента. Для текущего инструмента хранится в предопределенной переменной Digits 
MODE_SPREAD            13 Спрэд в пунктах 
MODE_STOPLEVEL         14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах 
MODE_LOTSIZE           15 Размер контракта в базовой валюте инструмента 
MODE_TICKVALUE         16 Размер минимального изменения цены инструмента в валюте депозита 
MODE_TICKSIZE          17 Минимальный шаг изменения цены инструмента в валюте котировки 
MODE_SWAPLONG          18 Размер свопа для длинных позиций 
MODE_SWAPSHORT         19 Размер свопа для коротких позиций 
MODE_STARTING          20 Календарная дата начала торгов (обычно используется для фьючерсов) 
MODE_EXPIRATION        21 Календарная дата конца торгов (обычно используется для фьючерсов) 
MODE_TRADEALLOWED      22 Разрешение торгов по указанному инструменту 
MODE_MINLOT            23 Минимальный размер лота 
MODE_LOTSTEP           24 Шаг изменения размера лота 
MODE_MAXLOT            25 Максимальный размер лота 
MODE_SWAPTYPE          26 Метод вычисления свопов. 0 - в пунктах; 1 - в базовой валюте инструмента; 2 - в процентах; 3 - в валюте залоговых средств. 
MODE_PROFITCALCMODE    27 Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures 
MODE_MARGINCALCMODE    28 Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы 
MODE_MARGININIT        29 Начальные залоговые требования для 1 лота 
MODE_MARGINMAINTENANCE 30 Размер залоговых средств для поддержки открытых позиций в расчете на 1 лот 
MODE_MARGINHEDGED      31 Маржа, взимаемая с перекрытых позиций в расчете на 1 лот 
MODE_MARGINREQUIRED    32 Размер свободных средств, необходимых для открытия 1 лота на покупку 
MODE_FREEZELEVEL       33 Уровень заморозки ордеров в пунктах. Если цена исполнения находится в пределах, определяемых уровнем заморозки, то ордер не может быть модифицирован, отменен или закрыт. 

   */