//+------------------------------------------------------------------+ //| Order_Tracing_v01.mq4 | //+------------------------------------------------------------------+ #property copyright "Inkov Evgeni ew123@mail.ru" #property link "+7-988-140-68-11" //+------------------------------------------------------------------+ #property indicator_chart_window //+------------------------------------------------------------------+ #define Max_kol_Ord 100 //+------------------------------------------------------------------+ extern bool Today_or_VLine = true; // True - выводит или сегодняшние ордера или начиная от вертикальной линии // False - все ордера extern bool Only_Open_Ord = true; // True - выводит только открытые ордера, // False - дополнительно выводит исторические extern color Col_Buy = Green; // цвет ордеров Buy с отрицательным профитом extern color Col_Buy_Plus = Lime; // цвет ордеров Buy с положительным профитом extern color Col_Sell = Red; // цвет ордеров Sell с отрицательным профитом extern color Col_Sell_Plus = Magenta; // цвет ордеров Sell с положительным профитом extern color Col_Null = Blue; // цвет ордеров с нулевым профитом extern int Style_Line_Hist = 0; // вид исторических линий (0-сплошная линия, 2 - пунктир) extern int Sdvig_Y = 0; // сдвиг инф. по Y (по шкале цены) //+------------------------------------------------------------------+ int mas_ord[Max_kol_Ord][7]; // 0 - тип, 1- цена откр., 2 - цена закр.(0- ещё не закрыт), // 3-время откр., 4- время закр., 5-тикет, 6 - Профит string pref="Ord_"; int kol_pred_ord; int kol_ord,kol_ord_r; double Sum_profit,sum_prof_p,sum_prof_m; datetime Time00,time_VL; int style, width; color col; //+------------------------------------------------------------------+ int init() { kol_pred_ord=-1; ArrayInitialize(mas_ord,0); return(0); } //+------------------------------------------------------------------+ int deinit() { remove_objects(pref); return(0); } //+------------------------------------------------------------------+ int start() { time_VL=Find_VL(); if (time_VL>0) Time00=time_VL; else Time00=StrToTime(TimeToStr(TimeCurrent(),TIME_DATE)); //..................................... // определить исторические ордера и свести их в таблицу kol_ord=0; if (!Only_Open_Ord) for(int i=0;i1)continue; // отложенные ордера не отображаем if (Today_or_VLine && OrderOpenTime()=Max_kol_Ord)break; } //..................................... // определить текущие ордера и добавить их в табл. Sum_profit=0; sum_prof_p=0; sum_prof_m=0; kol_ord_r=0; for (i=0; i1)continue; // отложенные ордера не отображаем if (Today_or_VLine && OrderOpenTime()0) sum_prof_p+=OrderProfit(); else sum_prof_m+=OrderProfit(); Sum_profit+=OrderProfit(); kol_ord++; if (kol_ord>=Max_kol_Ord)break; } //..................................... if (kol_pred_ord!=kol_ord || kol_pred_ord<0) remove_objects(pref); kol_pred_ord=kol_ord; //..................................... // вывести информацию массива на экран for(i=0;i0) col=Col_Buy_Plus; else if (mas_ord[i][6]==0) col=Col_Null; else col=Col_Buy; else // Sell if (mas_ord[i][6]>0) col=Col_Sell_Plus; else if (mas_ord[i][6]==0) col=Col_Null; else col=Col_Sell; //..................................... width=2; if (mas_ord[i][5]<0) // у закрытых ордеров - тикет отрицательный { style=Style_Line_Hist; if (Style_Line_Hist>0)width=1; } else style=STYLE_SOLID; //..................................... out_TL(pref+DoubleToStr(MathAbs(mas_ord[i][5]),0), mas_ord[i][1]*Point, mas_ord[i][2]*Point, mas_ord[i][3], mas_ord[i][4], col, width, style); } //..................................... if (sum_prof_p>0 && sum_prof_m<0) // если есть вместе положительные и отрицательные рыночные ордера, вывести их профиты { put_txt(pref+"profit1", DoubleToStr(sum_prof_p,2), 19, 30, Col_Buy, 10); put_txt(pref+"profit2", "- "+DoubleToStr(MathAbs(sum_prof_m),2)+"=", 10, 15, Col_Sell,10); } else { ObjectDelete(pref+"profit1"); ObjectDelete(pref+"profit2"); } if (kol_ord_r>0) // если есть рыночные ордера, вывести их суммарный профит if (Sum_profit>0) put_txt(pref+"profit3", DoubleToStr(Sum_profit,2), 19, 1, Col_Buy, 10); else put_txt(pref+"profit3", "- "+DoubleToStr(MathAbs(Sum_profit),2), 19, 1, Col_Sell, 10); else ObjectDelete(pref+"profit3"); //..................................... return(0); } //+------------------------------------------------------------------+ void out_TL(string name, double pr1, double pr2, datetime t1, datetime t2, color col, int w, int st) { if (ObjectFind(name)<0)ObjectCreate(name, OBJ_TREND, 0, 0,0); ObjectSet(name, OBJPROP_PRICE1, pr1); ObjectSet(name, OBJPROP_PRICE2, pr2); ObjectSet(name, OBJPROP_TIME1, t1); ObjectSet(name, OBJPROP_TIME2, t2); ObjectSet(name, OBJPROP_COLOR, col); ObjectSet(name, OBJPROP_RAY, false); ObjectSet(name, OBJPROP_WIDTH, w); ObjectSet(name, OBJPROP_STYLE, st); } //---------------------------------------------- void put_txt(string name, string vol, int X,int Y,color col, int shr) { if (ObjectFind(name)<0)ObjectCreate(name, OBJ_LABEL, 0,0,0); ObjectSet(name, OBJPROP_CORNER, 3); ObjectSet(name, OBJPROP_XDISTANCE, X); ObjectSet(name, OBJPROP_YDISTANCE, Y+Sdvig_Y); ObjectSetText(name, vol, shr, "Arial Black", col); } //---------------------------------------------- void remove_objects(string PreName) { string Obj_Name,Head; for(int k=ObjectsTotal()-1; k>=0; k--) { Obj_Name=ObjectName(k); Head=StringSubstr(Obj_Name,0,StringLen(PreName)); if (Head==PreName)ObjectDelete(Obj_Name); } } //---------------------------------------------- datetime Find_VL() { string Obj_Name; datetime t=0; for(int k=ObjectsTotal()-1; k>=0; k--) { Obj_Name=ObjectName(k); if (ObjectType(Obj_Name)==OBJ_VLINE) { t=ObjectGet(Obj_Name, OBJPROP_TIME1); break; } } return(t); } //----------------------------------------------