Author: ��� ����� �. aka KimIV
Price Data Components
Series array that contains close prices for each bar
Orders Execution
Checks for the total of open orders
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
i-BalEq_v1
//+------------------------------------------------------------------+
//|                                                     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(ArraySize(oob)==0)
     {
      Alert("Open orders not found. Please delete indicator or change Symbol of the chart");
      return;
     }
 	 if(oob[0] < 0) 
 	     return;
 	 k = ArraySize(oob);
//----
   for(i = Bars-1; 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();     // ïðèáûëü
                 }
             }
         }
     }
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---