//+------------------------------------------------------------------+ //| Copyright 2014, cmillion@narod.ru | //| http://cmillion.ru | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, cmillion@narod.ru" #property link "http://cmillion.ru" #property version "1.00" #property indicator_chart_window #property strict #property description "Индикатор помогает увидеть результаты торговли" input color Color1 = clrBlack; // цвет input color Color2 = clrWhite; // цвет input color Color3 = clrBlue; // цвет input color Color4 = clrRed; // цвет input color Color5 = clrGreen; // цвет input color Color6 = clrLemonChiffon; // цвет input color Color7 = clrLightGray; // цвет input color Color8 = clrSnow; // цвет input color Color9 = clrGray; // цвет string Font = "Times New Roman"; // Шрифт int Width = 10; // размер long X=30; long Y=30; string InpName="cm-Trade Info"; double STOPLEVEL; string AC; //+------------------------------------------------------------------+ int OnInit() { AC=" "+AccountCurrency(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Del(); } //-------------------------------------------------------------------- void Del() { ObjectDelete(0,InpName); ObjectDelete(0,"cm__fon1_"); ObjectDelete(0,"cm__kn Orders Line"); ObjectDelete(0,"cm__kn History"); ObjectDelete(0,"cm__kn MarketInfo"); ObjectDelete(0,"cm__kn NL"); ObjectDelete(0,"cm__NoLoss_NLb"); ObjectDelete(0,"cm__NoLoss_NLs"); ObjectDelete(0,"cm__NoLoss_NL"); ObjectDelete(0,"cm__Buy"); ObjectDelete(0,"cm__Sell"); ObjectDelete(0,"cm__BL"); ObjectDelete(0,"cm__SL"); ObjectDelete(0,"cm__00_"); ObjectDelete(0,"cm__0_"); ObjectDelete(0,"cm__1_"); ObjectDelete(0,"cm__2_"); ObjectDelete(0,"cm__3_"); ObjectDelete(0,"cm__4_"); ObjectDelete(0,"cm__5_"); ObjectDelete(0,"cm__6_"); ObjectDelete(0,"cm__60_"); ObjectsDeleteAll(0,OBJ_TREND); ObjectDelete(0,"cm__ сегодня"); ObjectDelete(0,"cm__ вчера"); ObjectDelete(0,"cm__ неделя"); ObjectDelete(0,"cm__ месяц"); ObjectDelete(0,"cm__ сегодн1"); ObjectDelete(0,"cm__ сегодн2"); ObjectDelete(0,"cm__ сегодн3"); ObjectDelete(0,"cm__ сегодн4"); ObjectDelete(0,"cm__ сегодн5"); ObjectDelete(0,"cm__ сегодн6"); ObjectDelete(0,"cm__ сегодн7"); ObjectDelete(0,"cm__ сегодн8"); } //-------------------------------------------------------------------- int start() { Redraw(); return(0); } //-------------------------------------------------------------------- void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_OBJECT_CLICK) { string clickedChartObject=sparam; //if (clickedChartObject=="cm__kn Orders Line") //{ //PlaySound("Ok.wav"); //} if (clickedChartObject=="cm__kn History") { if (ObjectGetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE)) { Del(); RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0); ObjectSetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE,false); } if (!ObjectGetInteger(0,"cm__kn History",OBJPROP_STATE)) { if (ObjectFind("cm__ сегодня")==0) Del(); RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0); } } if (clickedChartObject=="cm__kn MarketInfo") { if (ObjectGetInteger(0,"cm__kn History",OBJPROP_STATE)) { if (ObjectFind("cm__ сегодня")==0) Del(); RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0); ObjectSetInteger(0,"cm__kn History",OBJPROP_STATE,false); } if (!ObjectGetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE)) { Del(); RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0); } } //Comment(clickedChartObject); Redraw(); } } //-------------------------------------------------------------------- int Redraw() { if (ObjectFind(InpName)==0) { ObjectGetInteger(0,InpName,OBJPROP_XDISTANCE,0,X); ObjectGetInteger(0,InpName,OBJPROP_YDISTANCE,0,Y); } else { //X=30; Y=30; RectLabelCreate(0,InpName,0,X,Y,200,105,Color2,Color1,STYLE_SOLID,3,false,true,true,0); } RectLabelCreate(0,"cm__fon1_" ,0,X+1 ,Y+1 ,198,103,Color6,Color7,STYLE_SOLID,1,false,false,true,0); ButtonCreate(0,"cm__kn Orders Line" ,0,X+2 ,Y+22,88,18 ,"Orders",Font,Width,Color1,Color8,Color7,false); ButtonCreate(0,"cm__kn NL" ,0,X+2 ,Y+40,88,18 ,"NL",Font,Width,Color1,Color8,Color7,false); RectLabelCreate(0,"cm__0_" ,0 ,X+1,Y+1,198,18,Color3,Color7,STYLE_SOLID,1,false,false,true,0); LabelCreate(0 ,"cm__00_",0 ,X+100,Y+10,CORNER_LEFT_UPPER,StringConcatenate(InpName," ",Symbol()),Font,Width+0,Color2,0,ANCHOR_CENTER,false,false,true,0); RefreshRates(); double OOP; STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL); double stoplevel=STOPLEVEL*Point; int b=0,s=0,bs=0,ss=0,bl=0,sl=0,tip; double OL,LB=0,LS=0,ProfitB=0,ProfitS=0; double price_b=0,price_s=0; int i,Ticket;string NameLine;datetime OOT; bool WiewOrdersLine=ObjectGetInteger(0,"cm__kn Orders Line",OBJPROP_STATE); for (i=0; i0) NLb=Bid-price_b/LB; ARROW("cm__NoLoss_NLb", NLb, 6, Color3); if(LS>0) NLs=Ask+price_s/LS; ARROW("cm__NoLoss_NLs", NLs, 6, Color4); if(LB-LS>0) NL=Bid-(price_b+price_s)/(LB-LS); if(LB-LS<0) NL=Ask-(price_b+price_s)/(LB-LS); ARROW("cm__NoLoss_NL", NL, 6, Color5); } else { ObjectDelete(0,"cm__NoLoss_NLb"); ObjectDelete(0,"cm__NoLoss_NLs"); ObjectDelete(0,"cm__NoLoss_NL"); } //--- RectLabelCreate(0,"cm__5_" ,0 ,X+1,Y+61,198,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0); ButtonCreate(0,"cm__kn History" ,0,X+2 ,Y+82,98,18 ,"History",Font,Width,Color1,Color8,Color7,false); ButtonCreate(0,"cm__kn MarketInfo" ,0,X+100 ,Y+82,98,18 ,"MarketInfo",Font,Width,Color1,Color8,Color7,false); double Profit=0;datetime OCT; double сегодня=0,вчера=0,неделя=0,месяц=0; if (ObjectGetInteger(0,"cm__kn History",OBJPROP_STATE)) { for (i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if (OrderSymbol()!=Symbol()) continue; Profit = OrderProfit()+OrderSwap()+OrderCommission(); OOP = OrderOpenPrice(); OOT = OrderOpenTime(); OCT = OrderCloseTime(); Ticket=OrderTicket(); tip = OrderType(); OL = OrderLots(); if (tip==OP_BUY) { NameLine=StringConcatenate("Bay, Lot ",DoubleToStr(OL,2)," Ticket ",DoubleToStr(Ticket,0)); ObjectDelete(NameLine); ObjectCreate(NameLine,OBJ_TREND,0,OOT,OOP,OCT,OrderClosePrice()); ObjectSetInteger(0,NameLine, OBJPROP_COLOR,Color3); } if (tip==OP_SELL) { NameLine=StringConcatenate("Sell, Lot ",DoubleToStr(OL,2)," Ticket ",DoubleToStr(Ticket,0)); ObjectDelete(NameLine); ObjectCreate(NameLine,OBJ_TREND,0,OOT,OOP,OCT,OrderClosePrice()); ObjectSetInteger(0,NameLine, OBJPROP_COLOR,Color4); } ObjectSetInteger(0,NameLine, OBJPROP_STYLE, STYLE_DOT); ObjectSetInteger(0,NameLine, OBJPROP_RAY, false); ObjectSetInteger(0,NameLine,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,NameLine,OBJPROP_SELECTED,false); ObjectSetInteger(0,NameLine,OBJPROP_HIDDEN,true); //--- if (OCT>=iTime(NULL,1440,0)) сегодня+=Profit; if (OCT>=iTime(NULL,1440,1) && OCT=iTime(NULL,PERIOD_W1,0)) неделя+=Profit; if (OCT>=iTime(NULL,PERIOD_MN1,0)) месяц+=Profit; } } RectLabelCreate(0,InpName,0,X,Y,200,225,Color2,Color1,STYLE_SOLID,3,false,true,true,0); RectLabelCreate(0,"cm__fon1_" ,0,X+1 ,Y+1 ,198,223,Color6,Color7,STYLE_SOLID,1,false,false,true,0); RectLabelCreate(0,"cm__6_" ,0 ,X+1,Y+104,198,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0); LabelCreate(0 ,"cm__60_",0 ,X+100,Y+112,CORNER_LEFT_UPPER,"Profit",Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); LabelCreate(0 ,"cm__ сегодня" ,0 ,X+100,Y+135,CORNER_LEFT_UPPER,StringConcatenate("сегодня ",DoubleToStr(сегодня,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); LabelCreate(0 ,"cm__ вчера" ,0 ,X+100,Y+155,CORNER_LEFT_UPPER,StringConcatenate("вчера ",DoubleToStr(вчера,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); LabelCreate(0 ,"cm__ неделя" ,0 ,X+100,Y+175,CORNER_LEFT_UPPER,StringConcatenate("неделя ",DoubleToStr(неделя,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); LabelCreate(0 ,"cm__ месяц" ,0 ,X+100,Y+195,CORNER_LEFT_UPPER,StringConcatenate("месяц ",DoubleToStr(месяц,2),AC),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); } //--- if (ObjectGetInteger(0,"cm__kn MarketInfo",OBJPROP_STATE)) { RectLabelCreate(0,InpName,0,X,Y,200,345,Color2,Color1,STYLE_SOLID,3,false,true,true,0); RectLabelCreate(0,"cm__fon1_" ,0,X+1 ,Y+1 ,198,343,Color6,Color7,STYLE_SOLID,1,false,false,true,0); RectLabelCreate(0,"cm__6_" ,0 ,X+1,Y+104,198,18,Color2,Color7,STYLE_SOLID,1,false,false,true,0); LabelCreate(0 ,"cm__60_",0 ,X+100,Y+112,CORNER_LEFT_UPPER,"MarketInfo",Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); LabelCreate(0 ,"cm__ сегодня" ,0 ,X+100,Y+135,CORNER_LEFT_UPPER,StringConcatenate("SPREAD ",MarketInfo(Symbol(),MODE_SPREAD)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0); LabelCreate(0 ,"cm__ вчера" ,0 ,X+100,Y+155,CORNER_LEFT_UPPER,StringConcatenate("STOPLEVEL ",MarketInfo(Symbol(),MODE_STOPLEVEL)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах "+"\n"+ LabelCreate(0 ,"cm__ неделя" ,0 ,X+100,Y+175,CORNER_LEFT_UPPER,StringConcatenate("LOTSIZE ",MarketInfo(Symbol(),MODE_LOTSIZE)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 15 Размер контракта в базовой валюте инструмента "+"\n"+ LabelCreate(0 ,"cm__ месяц" ,0 ,X+100,Y+195,CORNER_LEFT_UPPER,StringConcatenate("TICKVALUE ",MarketInfo(Symbol(),MODE_TICKVALUE)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 16 Размер минимального изменения цены инструмента в валюте депозита "+"\n"+ LabelCreate(0 ,"cm__ сегодн1" ,0 ,X+100,Y+215,CORNER_LEFT_UPPER,StringConcatenate("TICKSIZE ",MarketInfo(Symbol(),MODE_TICKSIZE)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 17 Минимальный шаг изменения цены инструмента в валюте котировки "+"\n"+ LabelCreate(0 ,"cm__ сегодн2" ,0 ,X+100,Y+235,CORNER_LEFT_UPPER,StringConcatenate("SWAPLONG ",MarketInfo(Symbol(),MODE_SWAPLONG)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 18 Размер свопа для длинных позиций "+"\n"+ LabelCreate(0 ,"cm__ сегодн3" ,0 ,X+100,Y+255,CORNER_LEFT_UPPER,StringConcatenate("SWAPSHORT ",MarketInfo(Symbol(),MODE_SWAPSHORT)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 19 Размер свопа для коротких позиций "+"\n"+ LabelCreate(0 ,"cm__ сегодн4" ,0 ,X+100,Y+275,CORNER_LEFT_UPPER,StringConcatenate("MINLOT ",MarketInfo(Symbol(),MODE_MINLOT)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 23 Минимальный размер лота "+"\n"+ LabelCreate(0 ,"cm__ сегодн5" ,0 ,X+100,Y+295,CORNER_LEFT_UPPER,StringConcatenate("LOTSTEP ",MarketInfo(Symbol(),MODE_LOTSTEP)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 24 Шаг изменения размера лота "+"\n"+ LabelCreate(0 ,"cm__ сегодн6" ,0 ,X+100,Y+315,CORNER_LEFT_UPPER,StringConcatenate("MAXLOT ",MarketInfo(Symbol(),MODE_MAXLOT)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 25 Максимальный размер лота "+"\n"+ LabelCreate(0 ,"cm__ сегодн7" ,0 ,X+100,Y+335,CORNER_LEFT_UPPER,StringConcatenate("MARGINREQUIRED ",MarketInfo(Symbol(),MODE_MARGINREQUIRED)),Font,Width+0,Color1,0,ANCHOR_CENTER,false,false,true,0);//+" 32 Размер свободных средств, необходимых для открытия 1 лота на покупку "+"\n"+ } return(0); } //+------------------------------------------------------------------+ void ARROW(string Name, double Price, int ARROWCODE, color c) { ObjectDelete(Name); ObjectCreate(Name,OBJ_ARROW,0,Time[0],Price,0,0,0,0); ObjectSetInteger(0,Name,OBJPROP_ARROWCODE,ARROWCODE); ObjectSetInteger(0,Name,OBJPROP_COLOR, c); ObjectSetInteger(0,Name,OBJPROP_WIDTH, 1); } //-------------------------------------------------------------------- bool ButtonCreate(const long chart_ID=0, // ID графика const string name="Button", // имя кнопки const int sub_window=0, // номер подокна const long x=0, // координата по оси X const long y=0, // координата по оси y const int width=50, // ширина кнопки const int height=18, // высота кнопки const string text="Button", // текст const string font="Arial", // шрифт const int font_size=10, // размер шрифта const color clr=clrNONE, //цвет текста const color clrON=clrNONE, //цвет фона const color clrOFF=clrNONE, //цвет фона const bool state=false) // нажата/отжата { if (ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,clrNONE); } color back_clr; if (ObjectGetInteger(chart_ID,name,OBJPROP_STATE)) back_clr=clrON; else back_clr=clrOFF; ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); return(true); } //-------------------------------------------------------------------- bool RectLabelCreate(const long chart_ID=0, // ID графика const string name="RectLabel", // имя метки const int sub_window=0, // номер подокна const long x=0, // координата по оси X const long y=0, // координата по оси y const int width=50, // ширина const int height=18, // высота const color back_clr=clrNONE, // цвет фона const color clr=clrNONE, //цвет плоской границы (Flat) const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль плоской границы const int line_width=1, // толщина плоской границы const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { ResetLastError(); if (ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); } ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); return(true); } //-------------------------------------------------------------------- bool LabelCreate(const long chart_ID=0, // ID графика const string name="Label", // имя метки const int sub_window=0, // номер подокна const long x=0, // координата по оси X const long y=0, // координата по оси y const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки const string text="Label", // текст const string font="Arial", // шрифт const int font_size=10, // размер шрифта const color clr=clrNONE, const double angle=0.0, // наклон текста const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { ResetLastError(); if (ObjectFind(chart_ID,name)==-1) { if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0)) { Print(__FUNCTION__,": не удалось создать текстовую метку! Код ошибки = ",GetLastError()); return(false); } ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); } ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); return(true); } //--------------------------------------------------------------------