Bal_Eq_Ind





//+----------------------------------------------------------------------------+
//|                                                                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       = 1000;    // Íà÷àëüíûé äåïîçèò
extern bool   CurSymbolOnly = False;   // Ó÷èòûâàòü òîëüêî òåêóùèé èíñòðóìåíò
//------- Áóôåðû èíäèêàòîðà ----------------------------------------------------
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() 
  {
   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) - ocp[j]) / p*olo[j]*t;
               else 
                   e += (ocp[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();                         // ïðèáûëü
                 }
             }
         }
     }
  }
//+----------------------------------------------------------------------------+





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:

Other Features: