//+------------------------------------------------------------------+
//| 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;i<OrdersHistoryTotal();i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if (OrderType()>1)continue; // îòëîæåííûå îðäåðà íå îòîáðàæàåì
if (Today_or_VLine && OrderOpenTime()<Time00)continue;
mas_ord[kol_ord][0]=OrderType();
mas_ord[kol_ord][1]=NormalizeDouble(OrderOpenPrice()/Point,0);
mas_ord[kol_ord][2]=NormalizeDouble(OrderClosePrice()/Point,0);
mas_ord[kol_ord][3]=OrderOpenTime();
mas_ord[kol_ord][4]=OrderCloseTime();
mas_ord[kol_ord][5]=-OrderTicket();
mas_ord[kol_ord][6]=NormalizeDouble(OrderProfit()*100,0);
kol_ord++;
if (kol_ord>=Max_kol_Ord)break;
}
//.....................................
// îïðåäåëèòü òåêóùèå îðäåðà è äîáàâèòü èõ â òàáë.
Sum_profit=0;
sum_prof_p=0;
sum_prof_m=0;
kol_ord_r=0;
for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
if (OrderType()>1)continue; // îòëîæåííûå îðäåðà íå îòîáðàæàåì
if (Today_or_VLine && OrderOpenTime()<Time00)continue;
mas_ord[kol_ord][0]=OrderType();
mas_ord[kol_ord][1]=NormalizeDouble(OrderOpenPrice()/Point,0);
RefreshRates();
if (OrderType()==OP_BUY)
mas_ord[kol_ord][2]=NormalizeDouble(Bid/Point,0);
else
mas_ord[kol_ord][2]=NormalizeDouble(Ask/Point,0);
mas_ord[kol_ord][3]=OrderOpenTime();
mas_ord[kol_ord][4]=TimeCurrent();
mas_ord[kol_ord][5]=OrderTicket();
mas_ord[kol_ord][6]=NormalizeDouble(OrderProfit()*100,0);
kol_ord_r++;
if (OrderProfit()>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;i<kol_ord;i++)
{
if (mas_ord[i][0]==0) // buy
if (mas_ord[i][6]>0)
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);
}
//----------------------------------------------
Comments