Order_Tracing_v01

Author: Inkov Evgeni ew123@mail.ru
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of closed ordersChecks for the total of open orders
0 Views
0 Downloads
0 Favorites
Order_Tracing_v01
//+------------------------------------------------------------------+
//|                                            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