//+------------------------------------------------------------------+ //| Order_tracer.mq4 | //| luktom :: Łukasz Tomaszkiewicz | //| http://luktom.biz/ | //+------------------------------------------------------------------+ //modified by Dadas & warewolf300 #property copyright "Łukasz Tomaszkiewicz :: luktom" #property version "1.2" #property indicator_chart_window #property strict //bool Show_Closed_Trades; extern color Profit_Color = clrGreen; extern color Loss_Color = clrCrimson; extern string Profit_Font = "Arial"; extern int Profit_Font_Size = 13; extern int Button_Corner = 3; extern int Button_X = 30; extern int Button_Y = 60; extern int Pips_Divider = 10; extern bool Show_Profit_in_Currency = true; extern bool Show_Profit_in_Percent = true; enum ENUM_PROFIT_LOCATION { open, close, middle, }; extern ENUM_PROFIT_LOCATION profloc=1;//Result location color longColor=DodgerBlue; color shortColor=Red; int width=2; int style=STYLE_SOLID; string sign,text; color txtclr; double profitpoints,resprice,balance; datetime restime; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { Delete_Closed_Trades(); ObjectDelete(Symbol()+"DMOT_Button"); Print("del"); GlobalVariableDel(Symbol()+"DMOT_ON"); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { string AcctCurrency=AccountCurrency(); if(AcctCurrency=="") return(0); if(ObjectFind(0,Symbol()+"DMOT_Button")) { ObjectCreate(0,Symbol()+"DMOT_Button",OBJ_BUTTON,0,0,0); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_XDISTANCE,Button_X); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_YDISTANCE,Button_Y); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_XSIZE,27); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_YSIZE,27); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_CORNER,Button_Corner); ObjectSetString(0,Symbol()+"DMOT_Button",OBJPROP_TEXT," OT"); ObjectSetString(0,Symbol()+"DMOT_Button",OBJPROP_FONT,"Tahoma"); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_FONTSIZE,8); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_COLOR,clrBlack); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_BGCOLOR,clrGray); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_BORDER_COLOR,clrDarkSlateGray); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_BACK,false); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_STATE,false); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_SELECTABLE,false); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_SELECTED,false); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_HIDDEN,false); ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_ZORDER,9); } //if(GlobalVariableCheck(Symbol()+"DMOT_ON")) // { // if(GlobalVariableGet(Symbol()+"DMOT_ON")==1) // { // Show_Closed_Trades=true; // ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_BGCOLOR,clrKhaki); // } // if(GlobalVariableGet(Symbol()+"DMOT_ON")==0) // { // Show_Closed_Trades=false; // ObjectSetInteger(0,Symbol()+"DMOT_Button",OBJPROP_BGCOLOR,clrDarkSlateGray); // } // } //if(Show_Closed_Trades) return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // Event identifier const long& lparam, // Event parameter of long type const double& dparam, // Event parameter of double type const string& sparam) // Event parameter of string type { if(id==CHARTEVENT_OBJECT_CLICK) { double DMOT_ON=GlobalVariableGet(Symbol()+"DMOT_ON"); if(sparam==Symbol()+"DMOT_Button" && DMOT_ON==0) { Print("ON"); Show_Closed_Trades(); GlobalVariableSet(Symbol()+"DMOT_ON",1); } if(sparam==Symbol()+"DMOT_Button" && DMOT_ON==1) { Print("OFF"); Delete_Closed_Trades(); GlobalVariableSet(Symbol()+"DMOT_ON",0); } WindowRedraw(); ChartRedraw(); return; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Show_Closed_Trades() { //--- int vPoint=Pips_Divider; //if(Digits==3 || Digits==5) // {int vPoint=10;} //else // {vPoint=1;} //---- balance = AccountBalance(); for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) { if(OrderSymbol()!=Symbol()) { continue; } if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) { continue; } balance = balance - (OrderProfit()+OrderCommission()+OrderSwap()); //Print (OrderTicket()+" "+balance); string name=StringConcatenate("lot",OrderTicket()); string namebuyarrow=StringConcatenate("buy",OrderTicket()); string namesellarrow=StringConcatenate("sell",OrderTicket()); string nametparrow=StringConcatenate("tp",OrderTicket()); string nameslarrow=StringConcatenate("sl",OrderTicket()); string nameclosearrow=StringConcatenate("close",OrderTicket()); string nameprofitlabel=StringConcatenate("profit",OrderTicket()); switch(profloc) { case open: restime=OrderOpenTime();resprice=OrderOpenPrice();break; case close: restime=OrderCloseTime();resprice=OrderClosePrice();break; case middle: restime=OrderOpenTime()+(OrderCloseTime()-OrderOpenTime())/2; if (OrderOpenPrice()>OrderClosePrice()) resprice=OrderOpenPrice()-(OrderOpenPrice()-OrderClosePrice())/2; else resprice=OrderOpenPrice()+(OrderClosePrice()-OrderOpenPrice())/2;break; } if(ObjectFind(name)==-1) { ObjectCreate(namebuyarrow,OBJ_ARROW,0,0,0,0,0); ObjectSet(namebuyarrow,OBJPROP_SELECTABLE,false); ObjectCreate(namesellarrow,OBJ_ARROW,0,0,0,0,0); ObjectSet(namesellarrow,OBJPROP_SELECTABLE,false); ObjectCreate(nameprofitlabel,OBJ_TEXT,0,0,0); ObjectSet(nameprofitlabel,OBJPROP_BACK,false); ObjectSet(nameprofitlabel,OBJPROP_SELECTABLE,false); if(OrderTakeProfit()>0) { ObjectCreate(nametparrow,OBJ_ARROW,0,0,0,0,0); ObjectSet(nametparrow,OBJPROP_ARROWCODE,4); ObjectSet(nametparrow,OBJPROP_COLOR,clrGreen); ObjectSet(nametparrow,OBJPROP_PRICE1,OrderTakeProfit()); ObjectSet(nametparrow,OBJPROP_TIME1,OrderOpenTime()); ObjectSet(nametparrow,OBJPROP_SELECTABLE,false); } if(OrderStopLoss()>0) { ObjectCreate(nameslarrow,OBJ_ARROW,0,0,0,0,0); ObjectSet(nameslarrow,OBJPROP_ARROWCODE,4); ObjectSet(nameslarrow,OBJPROP_COLOR,clrRed); ObjectSet(nameslarrow,OBJPROP_PRICE1,OrderStopLoss()); ObjectSet(nameslarrow,OBJPROP_TIME1,OrderOpenTime()); ObjectSet(nameslarrow,OBJPROP_SELECTABLE,false); } ObjectCreate(name,OBJ_TREND,0,0,0,0,0); ObjectSet(name,OBJPROP_SELECTABLE,false); ObjectCreate(nameclosearrow,OBJ_ARROW,0,0,0,0,0); ObjectSet(nameclosearrow,OBJPROP_ARROWCODE,3); ObjectSet(nameclosearrow,OBJPROP_COLOR,clrGoldenrod); ObjectSet(nameclosearrow,OBJPROP_PRICE1,OrderClosePrice()); ObjectSet(nameclosearrow,OBJPROP_TIME1,OrderCloseTime()); ObjectSet(nameclosearrow,OBJPROP_SELECTABLE,false); } ObjectSet(name,OBJPROP_TIME1,OrderOpenTime()); ObjectSet(name,OBJPROP_TIME2,OrderCloseTime()); ObjectSet(name,OBJPROP_PRICE1,OrderOpenPrice()); ObjectSet(name,OBJPROP_PRICE2,OrderClosePrice()); if(OrderType()==OP_BUY) { ObjectSet(name,OBJPROP_COLOR,longColor); ObjectSet(namebuyarrow,OBJPROP_ARROWCODE,2); ObjectSet(namebuyarrow,OBJPROP_COLOR,longColor); ObjectSet(namebuyarrow,OBJPROP_PRICE1,OrderOpenPrice()); ObjectSet(namebuyarrow,OBJPROP_TIME1,OrderOpenTime()); ObjectSet(nameprofitlabel,OBJPROP_TIME1,restime); ObjectSet(nameprofitlabel,OBJPROP_PRICE1,resprice); ObjectSet(nameprofitlabel,OBJPROP_ANCHOR,ANCHOR_LOWER); if(OrderProfit()<0 || (OrderProfit()>0 && profloc==open)) { //ObjectSet(nameprofitlabel,OBJPROP_PRICE1,resprice); ObjectSet(nameprofitlabel,OBJPROP_ANCHOR,ANCHOR_UPPER); } if(OrderProfit()>0) { sign="+"; } if(OrderProfit()<=0) { sign=""; } profitpoints=(OrderClosePrice()-OrderOpenPrice())/Point/vPoint; text=sign+DoubleToStr(profitpoints,1); if(Show_Profit_in_Currency) text=text+" / "+DoubleToStr(OrderProfit()+OrderCommission()+OrderSwap(),2)+" "+AccountCurrency(); if(Show_Profit_in_Percent) text=text+" / "+DoubleToStr((OrderProfit()+OrderCommission()+OrderSwap())*100/balance,1)+"%"; if(sign=="+")txtclr=Profit_Color; else txtclr=Loss_Color; ObjectSetText(nameprofitlabel,text,Profit_Font_Size,Profit_Font,txtclr); } else { ObjectSet(name,OBJPROP_COLOR,shortColor); ObjectSet(namesellarrow,OBJPROP_ARROWCODE,1); ObjectSet(namesellarrow,OBJPROP_COLOR,shortColor); ObjectSet(namesellarrow,OBJPROP_PRICE1,OrderOpenPrice()); ObjectSet(namesellarrow,OBJPROP_TIME1,OrderOpenTime()); ObjectSet(nameprofitlabel,OBJPROP_TIME1,restime); ObjectSet(nameprofitlabel,OBJPROP_PRICE1,resprice); ObjectSet(nameprofitlabel,OBJPROP_ANCHOR,ANCHOR_UPPER); if(OrderProfit()<0 || (OrderProfit()>0 && profloc==open)) { //ObjectSet(nameprofitlabel,OBJPROP_PRICE1,resprice); ObjectSet(nameprofitlabel,OBJPROP_ANCHOR,ANCHOR_LOWER); } if(OrderProfit()>=0) { sign="+"; } if(OrderProfit()<0) { sign=""; } profitpoints=(OrderOpenPrice()-OrderClosePrice())/Point/vPoint; text=sign+DoubleToStr(profitpoints,1); if(sign=="+")txtclr=Profit_Color; else txtclr=Loss_Color; if(Show_Profit_in_Currency) text=text+" / "+DoubleToStr(OrderProfit()+OrderCommission()+OrderSwap(),2)+" "+AccountCurrency(); if(Show_Profit_in_Percent) text=text+" / "+DoubleToStr((OrderProfit()+OrderCommission()+OrderSwap())*100/balance,1)+"%"; ObjectSetText(nameprofitlabel,text,Profit_Font_Size,Profit_Font,txtclr); } ObjectSet(name,OBJPROP_RAY,false); ObjectSet(name,OBJPROP_WIDTH,width); ObjectSet(name,OBJPROP_STYLE,style); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Delete_Closed_Trades() { for(int j=0;j<10;j++) for(int i=0;i