//+----------------------------------------------------------------------------+ //| 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: