i-BalEq





//+------------------------------------------------------------------+
//|                                                     i-BalEq.mq4  |
//|                                          Êèì Èãîðü Â. aka KimIV  |
//|                                             http://www.kimiv.ru  |
//|  01.10.2006  Ãðàôèê áàëàíñà è ýêâèòè.                            |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"
//----
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_width2 1
//------- Âíåøíèå ïàðàìåòðû èíäèêàòîðà
extern double Deposit       = 5000;    // Íà÷àëüíûé äåïîçèò
// Ó÷èòûâàòü òîëüêî òåêóùèé èíñòðóìåíò
extern bool   CurSymbolOnly = True;    
//------- Áóôåðû èíäèêàòîðà
double dBuf0[], dBuf1[];
//------- Ãëîáàëüíûå ïåðåìåííûå èíäèêàòîðà
int    oob[];      // íîìåð áàðà îòêðûòèÿ
int    oty[];      // òèï
double olo[];      // ëîò
string osy[];      // èíñòðóìåíò
double oop[];      // öåíà îòêðûòèÿ
int    ocb[];      // íîìåð áàðà çàêðûòèÿ
double ocp[];      // öåíà çàêðûòèÿ
double osw[];      // ñâîï
double opr[];      // ïðèáûëü
//+------------------------------------------------------------------+
//|  Custom indicator initialization function                        |
//+------------------------------------------------------------------+
void init()
  {
   IndicatorDigits(2);
//----
   SetIndexBuffer(0, dBuf0);
   SetIndexLabel (0, "Balance");
   SetIndexStyle (0, DRAW_LINE);
//----
   SetIndexBuffer(1, dBuf1);
   SetIndexLabel (1, "Equity");
   SetIndexStyle (1, DRAW_LINE);
  }
//+------------------------------------------------------------------+
//|  Custom indicator iteration function                             |
//+------------------------------------------------------------------+
void start()
  {
   double b, e, p, t;
   int    i, j, k;
//----
   ReadDeals();
 	 if(oob[0] < 0) 
 	     return;
 	 k = ArraySize(oob);
//----
   for(i = Bars; i >= oob[0]; i--)
     {
       dBuf0[i] = EMPTY_VALUE;
       dBuf1[i] = EMPTY_VALUE;
     }
   for(i = oob[0]; i >= 0; i--)
     {
       b = Deposit; 
       e = 0;
       for(j = 0; j < k; j++)
         {
           if(i <= oob[j] && i >= ocb[j])
             {
               p = MarketInfo(osy[j], MODE_POINT);
               t = MarketInfo(osy[j], MODE_TICKVALUE);
               if(t == 0) 
                   t = 10;
               if(p == 0) 
                   if(StringFind(osy[j], "JPY") < 0) 
                       p = 0.0001; 
                   else 
                       p=0.01;
               if(oty[j] == OP_BUY) 
                   e += (iClose(osy[j], 0, i) - oop[j]) / p*olo[j]*t;
               else 
                   e += (oop[j] - iClose(osy[j], 0, i)) / p*olo[j]*t;
             } 
           else 
               if(i <= ocb[j]) 
                   b += osw[j] + opr[j];
         }
       dBuf0[i] = b;
       dBuf1[i] = b + e;
     }
  }
//+------------------------------------------------------------------+
//|  ×òåíèå ñäåëîê                                                   |
//+------------------------------------------------------------------+
void ReadDeals()
  {
   ArrayResize(oob, 0);
   ArrayResize(oty, 0);
   ArrayResize(olo, 0);
   ArrayResize(osy, 0);
   ArrayResize(oop, 0);
   ArrayResize(ocb, 0);
   ArrayResize(ocp, 0);
   ArrayResize(osw, 0);
   ArrayResize(opr, 0);
   int h = HistoryTotal(), i, k;
//----
   for(i = 0; i < h; i++)
     {
       if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
         {
           if(!CurSymbolOnly || OrderSymbol() == Symbol())
             {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   k = ArraySize(oob);
                   ArrayResize(oob, k + 1);
                   ArrayResize(oty, k + 1);
                   ArrayResize(olo, k + 1);
                   ArrayResize(osy, k + 1);
                   ArrayResize(oop, k + 1);
                   ArrayResize(ocb, k + 1);
                   ArrayResize(ocp, k + 1);
                   ArrayResize(osw, k + 1);
                   ArrayResize(opr, k + 1);
                   // íîìåð áàðà îòêðûòèÿ
                   oob[k] = iBarShift(NULL, 0, OrderOpenTime()); 
                   oty[k] = OrderType();       // òèï
                   olo[k] = OrderLots();       // ëîò
                   osy[k] = OrderSymbol();     // èíñòðóìåíò
                   oop[k] = OrderOpenPrice();  // öåíà îòêðûòèÿ
                   // íîìåð áàðà çàêðûòèÿ
                   ocb[k] = iBarShift(NULL, 0, OrderCloseTime());
                   ocp[k]=OrderClosePrice();   // öåíà çàêðûòèÿ
                   osw[k]=OrderSwap();         // ñâîï
                   opr[k]=OrderProfit();       // ïðèáûëü
                 }
             }
         }
     }
   h = OrdersTotal();
//----
   for(i = 0; i < h; i++)
     {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
           if(!CurSymbolOnly || OrderSymbol() == Symbol())
             {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   k = ArraySize(oob);
                   ArrayResize(oob, k + 1);
                   ArrayResize(oty, k + 1);
                   ArrayResize(olo, k + 1);
                   ArrayResize(osy, k + 1);
                   ArrayResize(oop, k + 1);
                   ArrayResize(ocb, k + 1);
                   ArrayResize(ocp, k + 1);
                   ArrayResize(osw, k + 1);
                   ArrayResize(opr, k + 1);
                   // íîìåð áàðà îòêðûòèÿ
                   oob[k] = iBarShift(NULL, 0, OrderOpenTime()); 
                   oty[k] = OrderType();       // òèï
                   olo[k] = OrderLots();       // ëîò
                   osy[k] = OrderSymbol();     // èíñòðóìåíò
                   oop[k] = OrderOpenPrice();  // öåíà îòêðûòèÿ
                   ocb[k] = 0;                 // íîìåð áàðà çàêðûòèÿ
                   ocp[k] = 0;                 // öåíà çàêðûòèÿ
                   osw[k] = OrderSwap();       // ñâîï
                   opr[k] = OrderProfit();     // ïðèáûëü
                 }
             }
         }
     }
  }
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:



Indicators Used:



Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

Other Features: