//+------------------------------------------------------------------+ //| (Shu)-AccInfo.mq4 | //| `Shu | //| http://SovetnikShu.ru | //+------------------------------------------------------------------+ #property copyright "`Shu" #property link "http://SovetnikShu.ru" #property indicator_separate_window extern int Months = 3; extern int Weeks = 6; extern color clr_Head = Aqua; extern color clr_Good = Lime; extern color clr_Bad = Red; int win; string shu = " [1.02] (c) `Shu [http://SovetnikShu.ru]"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { Print(WindowExpertName() + shu); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i; double d; datetime dt; string s; IndicatorShortName_shu("(Shu)-AccInfo: " + (string)AccountNumber() + " " + AccountCompany()); ccc(win, ""); ccc(win, "Счёт: " + ns0(AccountNumber()), clr_Head, 0, 20, 20, 20); ccc(win, "Баланс: " + ns2(AccountBalance()), clr_Good); ccc(win, "Эквити: " + ns2(AccountEquity()), clr_Good); d = Result(0, TimeCurrent() + 1); s = "Результат: " + ns2(d); ccc(win, s, ((d >= 0) ? clr_Good : clr_Bad)); ccc(win, "Месяцы: ", clr_Head, 0, 160, 20, 0); for (i = 0; i > -Months; i--) { dt = StartMonth(TimeCurrent(), i); d = Result(dt, StartMonth(dt, 1) - 1); s = MonthTxt(TimeMonth(dt)) + ": " + ns2(d); ccc(win, s, ((d >= 0) ? clr_Good : clr_Bad)); } ccc(win, "Недели: ", clr_Head, 0, 300, 20, 0); for (i = 0; i > -Weeks; i--) { dt = StartWeek(TimeCurrent(), i); d = Result(dt, StartWeek(dt, 1) - 1); s = TimeToStr(dt, TIME_DATE) + ": " + ns2(d); ccc(win, s, ((d >= 0) ? clr_Good : clr_Bad)); } return(0); } //+------------------------------------------------------------------+ void ccc(int wn = 0, string txt = "", color clr = Green, int cr = 0, int X = 0, int Y = 0, int stp = 0, string font = "Tahoma", int fs = 10) { static int num = 0; static int x, y; static int step = 10; int i; int x0 = 0, y0 = 0; string on, n; on = "ccc" + "." + (string)wn; if (txt == "") { x = x0; y = y0; num = 0; for (i = ObjectsTotal() - 1; i >= 0 ; i--) { n = ObjectName(i); if (ObjectType(n) != OBJ_LABEL) continue; if (StringFind(n, on) != -1) ObjectDelete(n); } return; } if (stp > 0) step = stp; if ((X < 0) || (Y < 0)) {x = x0; y = y0;} if ((X > 0) || (Y > 0)) {x = X; y = Y; } on = on + "." + (string)num; ObjectCreate(on, OBJ_LABEL, wn, 0, 0); ObjectSet (on, OBJPROP_CORNER, cr); ObjectSet (on, OBJPROP_XDISTANCE, x); ObjectSet (on, OBJPROP_YDISTANCE, y); ObjectSet (on, OBJPROP_COLOR, clr); ObjectSetText(on, txt, fs, font, clr); num++; y = y + step; return; } //+------------------------------------------------------------------+ string ns2(double Значение) { return(DoubleToStr(Значение, 2)); } //+------------------------------------------------------------------+ string ns0(double Значение) { return(DoubleToStr(Значение, 0)); } //+------------------------------------------------------------------+ void IndicatorShortName_shu(string s) { IndicatorShortName(s); win = WindowFind(s); return; } //+------------------------------------------------------------------+ string MonthTxt(int m) { string r; switch (m) { case 1: r = "Январь"; break; case 2: r = "Февраль"; break; case 3: r = "Март"; break; case 4: r = "Апрель"; break; case 5: r = "Май"; break; case 6: r = "Июнь"; break; case 7: r = "Июль"; break; case 8: r = "Август"; break; case 9: r = "Сентябрь"; break; case 10: r = "Октябрь"; break; case 11: r = "Ноябрь"; break; case 12: r = "Декабрь"; break; default: r = "---"; } return(r); } //+------------------------------------------------------------------+ double Result(datetime dt1, datetime dt2) { int i; double r; r = 0; for (i = 0; i < OrdersHistoryTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderClosePrice() == 0) continue; if ((OrderCloseTime() < dt1) || (OrderCloseTime() > dt2)) continue; r = r + OrderProfit() + OrderCommission() + OrderSwap(); } } return(r); } //+------------------------------------------------------------------+ datetime StartMonth(datetime dt = 0, int shift = 0) { int y, m; if (dt == 0) dt = TimeCurrent(); y = TimeYear(dt); m = TimeMonth(dt); while (shift != 0) { if (shift > 0) { shift--; m++; if (m > 12) { m = 1; y++; } } if (shift < 0) { shift++; m--; if (m < 1) { m = 12; y--; } } } dt = StrToTime((string)y + "." + (string)m + ".1"); return(dt); } //+------------------------------------------------------------------+ // * возвращаем время datetime StartWeek(datetime dt, int shift = 0) { datetime r; r = dt + shift * PERIOD_W1 * 60; r = r / (PERIOD_D1 * 60); r = r * (PERIOD_D1 * 60); // - здесь получили время начала дня switch(TimeDayOfWeek(r)) { case 1: break; case 2: case 3: case 4: case 5: case 6: r = r - (PERIOD_D1 * 60) * (TimeDayOfWeek(r) - 1); break; case 0: r = r - (PERIOD_D1 * 60) * 6; break; } return(r); } //+------------------------------------------------------------------+