// // VisualOrders.mq4 // Dmitry Yakovlev // dmitry_yakovlev@rambler.ru // На пиво WebMoney R865705290089 //------------------------------------------------------------------ #property copyright "Dmitry Yakovlev, Russia,Omsk, WM R865705290089" #property link "dmitry_yakovlev@rambler.ru" #property indicator_chart_window #import "shell32.dll" //Connect a dll (provided with Windows) int ShellExecuteA(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd); #import "user32.dll" int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType); #import extern string _ModeProf="Прибыль 1-плавающ.,2-сверху"; extern int ModeProf=2; extern string _orders="Показывать сделки на графике:"; extern string _Type = "0 все,-1 Sell,1 Buy"; extern int Type = 0; extern bool CurOrders=true; extern int lblSize=1; extern bool HistOrders=true; extern bool ShowProfits=true; extern int ShiftProfits=0; extern bool lShowTargets=true; extern string _donate1="На пиво :-) WebMoney"; extern string _donate2="R865705290089"; double prev_profit=0, cur_prof5=0, prev_prof5=0; int wh=0; int init() { int i,total; if(lblSize<1) lblSize=1; if(lblSize>4) lblSize=4; CheckDonate(); deleteAll(); ObjectCreate("curtime", OBJ_LABEL,0,0,0); ObjectSet("curtime", OBJPROP_CORNER,0); ObjectSet("curtime", OBJPROP_XDISTANCE,250); ObjectSet("curtime", OBJPROP_YDISTANCE,0); if(ModeProf==1) { ObjectCreate("profit2", OBJ_TEXT,0,0,0); ObjectCreate("Account", OBJ_TEXT,0,0,0); } else if(ModeProf==2) { ObjectCreate("Account", OBJ_LABEL,0,0,0); ObjectSet("Account", OBJPROP_CORNER,0); ObjectSet("Account", OBJPROP_XDISTANCE,250); ObjectSet("Account", OBJPROP_YDISTANCE,20); ObjectCreate("profit2", OBJ_LABEL,0,0,0); ObjectSet("profit2", OBJPROP_CORNER,0); ObjectSet("profit2", OBJPROP_XDISTANCE,320); ObjectSet("profit2", OBJPROP_YDISTANCE,20); } ObjectDelete("VOSignal"); /*ObjectCreate("VOSignal", OBJ_LABEL,0,0,0); ObjectSet("VOSignal", OBJPROP_CORNER,1); ObjectSet("VOSignal", OBJPROP_XDISTANCE,10); ObjectSet("VOSignal", OBJPROP_YDISTANCE,10);*/ } int deinit() { deleteAll(); for(int i=0;i<30;i++) { ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"vopen"+i); ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"vtake"+i); ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"vstop"+i); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ double Trunc(double v=0) { return(StrToDouble(DoubleToStr(v,0))); } double TakeProfit=0, StopLoss=0; int start() { datetime t1,t2,t3,t4; double TickValue=MarketInfo(Symbol(), MODE_TICKVALUE); int spread=MarketInfo(Symbol(), MODE_SPREAD); ObjectSetText("curtime", TimeToStr(TimeCurrent(),TIME_SECONDS)+" Плечо:"+DoubleToStr(AccountLeverage(),0)+" Спрэд:"+DoubleToStr(spread,0), 12, "Arial", Lime); int i; double sell_profit=0, buy_profit=0, tot_profit=0, sell_points=0, buy_points=0, tot_points=0, prev_points=0, plus_profit=0, minus_profit=0; for(i=0;i0) plus_profit+=OrderProfit(); else minus_profit+=OrderProfit(); } tot_profit=sell_profit+buy_profit; tot_points=buy_points-sell_points; cur_prof5=Trunc(tot_points/5)*5; prev_prof5=Trunc(prev_points/5)*5; ObjectSetText("Account", DoubleToStr(AccountEquity(),2), 12, "Arial", Lime); //if(tot_profit>0) ObjectSetText("profit2", DoubleToStr(plus_profit,2)+"+"+DoubleToStr(minus_profit,2)+"=+"+DoubleToStr(tot_profit,2)+" (+"+DoubleToStr(tot_points/Point,0)+")", 12, "Arial", Lime); //else if(tot_profit<0) ObjectSetText("profit2", DoubleToStr(plus_profit,2)+""+DoubleToStr(minus_profit,2)+"="+DoubleToStr(tot_profit,2)+" ("+DoubleToStr(tot_points/Point,0)+")", 12, "Arial", OrangeRed); //else if(tot_profit==0) ObjectSetText("profit2","0", 12, "Arial", Yellow); if(tot_profit>0) ObjectSetText("profit2", DoubleToStr(plus_profit,2)+"+"+DoubleToStr(minus_profit,2)+"=+"+DoubleToStr(tot_profit,2), 12, "Arial", Lime); else if(tot_profit<0) ObjectSetText("profit2", DoubleToStr(plus_profit,2)+""+DoubleToStr(minus_profit,2)+"="+DoubleToStr(tot_profit,2), 12, "Arial", OrangeRed); else if(tot_profit==0) ObjectSetText("profit2","0", 12, "Arial", Yellow); if(ModeProf==1) { ObjectSet("profit2", OBJPROP_TIME1, Time[0]+Period()*60*2); ObjectSet("Account", OBJPROP_TIME1, Time[0]+Period()*60*2); double hh=High[iHighest(NULL,0,MODE_HIGH,5,0)], ll=Low[iLowest(NULL,0,MODE_LOW,3,0)]; ObjectSet("profit2", OBJPROP_PRICE1, hh+Point*9); ObjectSet("Account", OBJPROP_PRICE1, hh+Point*6); } //string VOSignal="flat"; /*ObjectSetText("VOSignal", "flat", 12, "Arial", Blue); if(Close[0]>High[1] && Low[0]>Low[1] && Low[1]>Low[2]) { ObjectSetText("VOSignal", "buy", 12, "Arial", Lime); } if(Close[0] // <---targets if(lShowTargets) fShowTargets(); // ---targets> WindowRedraw(); } void deleteAll() { string tmp,prefix; int i,total; ObjectDelete("VOSignal"); prefix="time_order_trades_";total=OrdersTotal(); for(i=0;i=0) clr2=Lime; else clr2=Red; if(OrderType()==OP_BUY) {CP=Bid;clr1=Lime;} if(OrderType()==OP_SELL) {CP=Ask;clr1=Red;} if(mode==MODE_TRADES) {CT=Time[0];} if(mode==MODE_HISTORY) {CT=OrderCloseTime();CP=OrderClosePrice();} ObjectCreate(tmp, OBJ_TREND, 0, OrderOpenTime(), OrderOpenPrice(), CT, CP); ObjectSet(tmp, OBJPROP_COLOR, clr2); ObjectSet(tmp, OBJPROP_RAY, 0); ObjectSet(tmp, OBJPROP_WIDTH,1); ObjectSet(tmp, OBJPROP_STYLE, STYLE_DASHDOTDOT); ObjectCreate(tmp+"OA", OBJ_ARROW, 0, OrderOpenTime()/*-Period()*60*/, OrderOpenPrice()); ObjectSet(tmp+"OA", OBJPROP_COLOR, clr1); ObjectSet(tmp+"OA", OBJPROP_ARROWCODE, 1); /*if(mode==MODE_TRADES) { ObjectCreate(tmp+"O", OBJ_ARROW, 0, OrderOpenTime()-Period()*60, OrderOpenPrice()); ObjectSet(tmp+"O", OBJPROP_COLOR, clr1); ObjectSet(tmp+"O", OBJPROP_WIDTH, lblSize); ObjectSet(tmp+"O", OBJPROP_ARROWCODE, 5); }*/ if(mode==MODE_HISTORY && ShowProfits) { int j=0, sh=iBarShift(Symbol(),0,CT,true); double pr=0; if(ShiftProfits>=0) for(j=4;j>=0;j--) pr=MathMax(pr,iHigh(Symbol(),0,sh+j)); if(ShiftProfits<0) for(j=4;j>=0;j--) pr=MathMax(pr,iLow(Symbol(),0,sh+j)); if(ShiftProfits!=0) ObjectCreate(tmp+"Cprof2", OBJ_TEXT, 0, CT, pr+ShiftProfits*Point); if(ShiftProfits==0) ObjectCreate(tmp+"Cprof2", OBJ_TEXT, 0, CT, pr+(WindowPriceMax()-WindowPriceMin())/10); string sss=""; color clrProf=Lime; if(OrderProfit()>0) { sss="+"; clrProf=Lime;} if(OrderProfit()<0) { sss="-"; clrProf=Red;} ObjectSetText(tmp+"Cprof2", sss+DoubleToStr(MathAbs(OrderClosePrice()-OrderOpenPrice())/Point,0)+"("+DoubleToStr(MathAbs(OrderProfit()),0)+"$)",10,"Arial",clrProf); ObjectSet(tmp+"Cprof2", OBJPROP_ANGLE,90); } ObjectCreate(tmp+"CA", OBJ_ARROW, 0, CT/*+Period()*60*/, CP); ObjectSet(tmp+"CA", OBJPROP_COLOR, clr2); ObjectSet(tmp+"CA", OBJPROP_ARROWCODE, 3); /*if(mode==MODE_TRADES) { ObjectCreate(tmp+"C", OBJ_ARROW, 0, CT+Period()*60, CP); ObjectSet(tmp+"C", OBJPROP_COLOR, clr2); ObjectSet(tmp+"C", OBJPROP_WIDTH, lblSize); ObjectSet(tmp+"C", OBJPROP_ARROWCODE, 6); }*/ } } } //---торгуемые ордера> } void fShowTargets() { int i=0, prof_pts=0, ticket=0; double dist_stop_pts, dist_stop; double dist_take_pts, dist_take; double pr=(Ask+Bid)/2, prof=0; datetime CT=Time[0]+Period()*60*(WindowBarsPerChart()/20+2); // time shift double CP=5*Point; // price shift int FS=10; // font size color prof_clr=Blue; string txt=""; //------------------------------------------------------------- for(i=0;i<10;i++) { ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"vopen"+i); ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"vtake"+i); ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"vstop"+i); } for(i=0;i0) prof_clr=Green; txt=""; if(OrderType()==0 || OrderType()==1) txt=" ("+DoubleToStr(MathAbs(prof),2)+"$)"; ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"vopen"+i,OBJ_TEXT,0,CT,OrderOpenPrice()+CP); ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"vopen"+i,DoubleToStr(MathAbs(prof_pts),0)+txt,FS,"Arial",prof_clr); dist_take_pts=0;dist_take=0; if(OrderTakeProfit()!=0) { dist_take_pts=MathAbs(pr/Point-OrderTakeProfit()/Point); txt=DoubleToStr(dist_take_pts,0); dist_take_pts=MathAbs(OrderOpenPrice()/Point-OrderTakeProfit()/Point); txt=txt+"("+DoubleToStr(dist_take_pts,0)+"/"+DoubleToStr(dist_take_pts*OrderLots()*10,0)+"$)"; ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"vtake"+i,OBJ_TEXT,0,CT,OrderTakeProfit()+CP); ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"vtake"+i,txt,FS,"Arial",Green); } dist_stop_pts=0;dist_stop=0; if(OrderStopLoss()!=0) { dist_stop_pts=MathAbs(pr/Point-OrderStopLoss()/Point); txt=DoubleToStr(dist_stop_pts,0); dist_stop_pts=MathAbs(OrderOpenPrice()/Point-OrderStopLoss()/Point); txt=txt+"("+DoubleToStr(dist_stop_pts,0)+"/"+DoubleToStr(dist_stop_pts*OrderLots()*10,0)+"$)"; ObjectCreate(Symbol()+DoubleToStr(Period(),0)+"vstop"+i,OBJ_TEXT,0,CT,OrderStopLoss()+CP); ObjectSetText(Symbol()+DoubleToStr(Period(),0)+"vstop"+i,txt,FS,"Arial",Red); } // рисуем---> } } void CheckDonate() { int fd=0; string pay="0"; datetime dt=0; string fn="VisualOrders.txt"; fd=FileOpen(fn,FILE_READ|FILE_CSV,";"); if(fd>=1) { pay=FileReadString(fd); if(pay!="0" && pay!="1") pay="0"; dt=StrToTime(FileReadString(fd)); } else { dt=TimeCurrent(); fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";"); FileWrite(fd,"0",TimeToStr(dt,TIME_DATE)); } FileClose(fd); if(pay=="0" && (TimeCurrent()-dt)>10*24*60*60) // 5 дней { if(MessageBoxA(0,"Если Вам понравился индикатор VisualOrders,\n хотите помочь автору материально?","Вопрос",4)==6) { ShellExecuteA(0,"Open","iexplore.exe","wmk:payto?Purse=R865705290089&Amount=100&Desc=Indicator&BringToFront=Y&ExecEvenKeeperIsOffline=Y","",7); pay="1"; } dt=TimeCurrent(); fd=FileOpen(fn,FILE_WRITE|FILE_CSV,";"); FileWrite(fd,pay,TimeToStr(dt,TIME_DATE)); FileClose(fd); } FileClose(fd); }