//+------------------------------------------------------------------+ //| 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(); // прибыль } } } } } //+------------------------------------------------------------------+