cm History Info v16

Author: Copyright © 2019, Khlistov Vladimir
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open orders
Miscellaneous
It issuies visual alerts to the screenIt sends emails
2 Views
0 Downloads
0 Favorites
cm History Info v16
ÿþ//+------------------------------------------------------------------+

//|                                          cm History Info v16.mq5 |

//|                              Copyright © 2019, Khlistov Vladimir |

//|                                               http://cmillion.ru |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2019, Khlistov Vladimir"

#property link      "http://cmillion.ru"

#property version   "1.00"

#property indicator_chart_window

#property indicator_plots   0

//+------------------------------------------------------------------+



extern datetime   DateInfoStart = D'01.01.2019';  //=0G8=0BL A 40BK

extern datetime   DateInfoEnd   = D'01.01.2030';  //70:0=G820O 40B>9

extern color      WhiteColor    = clrDarkGray;    //F25B 2K2>40 8=D>@<0F88

extern color      fon           = clrGray;        //F25B D>=0

extern ENUM_TIMEFRAMES TF_SendMail = PERIOD_H1;          //G0AB>B0 >B?@02:8 ?>GBK



extern double     WidthWind     = 1.0;            // @07<5@ >:=0

extern int        WidthFont     = 10;             // @07<5@ H@8DB0 

extern int        dx            = 70;             //H8@8=0 <564C AB>;1F0<8

extern int        dy            = 18;             //H8@8=0 <564C AB@>:

int        st            = 9;              // G8A;> AB>;1F>2

//--------------------------------------------------------------------

string Symbl[100];

double HistoryOrders[5][50000],Orders[5][50000],SymbolProfit[100],SymbolHistoryProfit[100],MagikProfit[100],HistoryLot[2][100],TekLot[2][100];

int HistoryType[2][100],TekType[2][100];

int str=0,AN,Nsymb,Nmag,Ords=0,hn,Magik[100];

double Today[2][15],TodayR[2][15],TodayM[2][15];

datetime TimeSendMail,TimeSendMail_AFM;

int stold=0;

//--------------------------------------------------------------------

void  OnDeinit(const int reason)

{

   ObjectsDeleteAll(0);

}

//--------------------------------------------------------------------

int OnInit()

{

   ArrayInitialize(Magik,-214748348);

   EventSetTimer(1);

   ChartSetInteger(0,CHART_COLOR_FOREGROUND,fon);//&25B >A59, H:0;K 8 AB@>:8 OHLC

   

   ChartSetInteger(0,CHART_COLOR_BACKGROUND,fon);

   ChartSetInteger(0,CHART_FOREGROUND,false);//&5=>2>9 3@0D8: =0 ?5@54=5< ?;0=5

   ChartSetInteger(0,CHART_SHOW_GRID,false);

   ChartSetInteger(0,CHART_BRING_TO_TOP,true);

   ChartSetInteger(0,CHART_SHOW_ASK_LINE,false);

   ChartSetInteger(0,CHART_SHOW_BID_LINE,false);

   

   ChartSetInteger(0,CHART_SHOW_OHLC,false);

   ChartSetInteger(0,CHART_SHOW_LAST_LINE,false);

   ChartSetInteger(0,CHART_SHOW_GRID,false);

   ChartSetInteger(0,CHART_SHOW_VOLUMES,false);

   ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,false);

   

   ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,fon);

   ChartSetInteger(0,CHART_COLOR_CHART_DOWN,fon);

   ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,fon);

   ChartSetInteger(0,CHART_COLOR_CHART_UP,fon);

   ChartSetInteger(0,CHART_COLOR_CHART_LINE,fon);

   ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,fon);

   ChartSetInteger(0,CHART_COLOR_LAST,fon);

   ChartSetInteger(0,CHART_SHOW_TRADE_LEVELS,fon);

   ChartSetInteger(0,CHART_DRAG_TRADE_LEVELS,false);

   ChartSetInteger(0,CHART_SHOW_DATE_SCALE,false);

   ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,false);

   ChartSetInteger(0,CHART_COLOR_VOLUME,fon);



   Ords=0;

   ObjectsDeleteAll(0);

   dx=(int)(dx*WidthWind);

   dy=(int)(dy*WidthWind);



   AN = (int)AccountInfoInteger(ACCOUNT_LOGIN);

   int x=dx*2;

   EditCreate(0,"Date1",0,0,0,x,dy,TimeToString(DateInfoStart,TIME_DATE),WidthFont,clrBlack,clrWhite,CORNER_LEFT_UPPER,ALIGN_RIGHT,"Arial",false);

   EditCreate(0,"Date2",0,x,0,x,dy,TimeToString(DateInfoEnd,TIME_DATE),WidthFont,clrBlack,clrWhite,CORNER_LEFT_UPPER,ALIGN_RIGHT,"Arial",false);

   x+=dx*2;

   EditCreate(0,"st" ,0,500,dy,500,dy,"© 2019, http://cmillion.ru",WidthFont,clrBlack,fon,CORNER_RIGHT_LOWER,ALIGN_RIGHT,"Arial",false,fon);

   EditCreate(0,"History" ,0,0,dy,dx,dy,"AB>@8O",WidthFont);

   EditCreate(0,"Orders h",0,0,dy*2,dx,dy*4,"0",WidthFont);



   ButtonCreate(0,"kn SendMailInfo",0,x,0,dx,dy,"SendMail","Arial",WidthFont-1,clrBlack,clrLightGray,clrNONE,false);x+=dx;

   ButtonCreate(0,"kn SendNot",0,x,0,dx,dy,"SendPUSH","Arial",WidthFont-1,clrBlack,clrLightGray,clrNONE,false);x+=dx;

   ButtonCreate(0,"kn ShowMagik",0,x,0,dx,dy,"ShowMagik","Arial",WidthFont-1,clrBlack,clrLightGray,clrNONE,true);x+=dx;

   ButtonCreate(0,"kn ShowDay",0,x,0,dx,dy,"ShowDay","Arial",WidthFont-1,clrBlack,clrLightGray,clrNONE,true);x+=dx;

   ButtonCreate(0,"kn ShowReb",0,x,0,dx,dy,"ShowReb","Arial",WidthFont-1,clrBlack,clrLightGray,clrNONE,false);



   return(INIT_SUCCEEDED);

}   

//--------------------------------------------------------------------

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

{

     return(rates_total);

  }

//+------------------------------------------------------------------+

void OnTimer()

{

   double AFM = AccountInfoDouble(ACCOUNT_FREEMARGIN);

   double AB = AccountInfoDouble(ACCOUNT_BALANCE);

   double AE = AccountInfoDouble(ACCOUNT_EQUITY);

   int i,j;

   double ProfitAll=0;

   //===

   string txtInfo;

   //---

   int tn=TekOrders();

   int n=0;



   if (DateInfoStart!=StringToTime(ObjectGetString(0,"Date1",OBJPROP_TEXT)) || DateInfoEnd!=StringToTime(ObjectGetString(0,"Date2",OBJPROP_TEXT)))

   {

      DateInfoStart=StringToTime(ObjectGetString(0,"Date1",OBJPROP_TEXT));

      DateInfoEnd=StringToTime(ObjectGetString(0,"Date2",OBJPROP_TEXT));

      //DateInfoStart=ObjectSetString(0,"Date1",OBJPROP_TEXT,TimeToString(DateInfoStart,TIME_DATE));

      dx            = 70;             //H8@8=0 <564C AB>;1F0<8

      dy            = 18;             //H8@8=0 <564C AB@>:

      ObjectsDeleteAll(0);

      OnInit();

   }

   

   bool SendMailInfo=ObjectGetInteger(0,"kn SendMailInfo",OBJPROP_STATE); 

   bool SendNot=ObjectGetInteger(0,"kn SendNot",OBJPROP_STATE); 

   bool ShowDay=ObjectGetInteger(0,"kn ShowDay",OBJPROP_STATE); 

   bool ShowReb=ObjectGetInteger(0,"kn ShowReb",OBJPROP_STATE); 

   if (!ShowDay) ObjectsDeleteAll(0,"ShowDay");

   if (!ShowReb) ObjectsDeleteAll(0,"ShowReb");

   int winpixel=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);

   st = (int)MathFloor(winpixel/(dx*WidthWind))-(7-((ShowDay?0:4)+(ShowReb?0:2)));

   if (st!=stold)

   {

      stold=st;

      Ords=0;

   }

   //ObjectSetString(0,"st",OBJPROP_TEXT,StringConcatenate(winpixel," || ",MathFloor(winpixel/dx)," || ",dx," || ",st));

   

   //EditCreate(0,"0",0,0,0,500,dy,StringConcatenate(TimeCurrent(),"  ",Ords,"  ",ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0)),WidthFont);

   if (Ords>tn || Ords==0)// || MaxX!=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS ,0)-12*dx)

   {

      //MaxX=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS ,0)-12*dx;

      str=0;

      hn=HistoryOrders();

      if (hn>50000) {Alert("5@5?>;=5=85 1CD5@0",HistoryOrdersTotal());return;}

      ArrayInitialize(HistoryType,0);

      ArrayInitialize(HistoryLot,0);

      for (i=0; i<=Nsymb; i++)

      {                                               

         SymbolHistoryProfit[i]=0;

         for (j=0; j<hn; j++)

         {

            if (i == HistoryOrders[0][j])//Symbol

            {

               SymbolHistoryProfit[i]+=HistoryOrders[2][j];//?@>D8B 

               if (HistoryOrders[1][j]==ORDER_TYPE_BUY) {HistoryType[0][i]++;HistoryLot[0][i]+=HistoryOrders[3][j];}

               if (HistoryOrders[1][j]==ORDER_TYPE_SELL) {HistoryType[1][i]++;HistoryLot[1][i]+=HistoryOrders[3][j];}

            }

         }

      }

      ProfitAll=0;

      if (SendMailInfo || SendNot) txtInfo="Account statement "+IntegerToString(AN)+" "+AccountInfoString(ACCOUNT_COMPANY)+" date "+TimeToString(TimeCurrent(),TIME_DATE|TIME_MINUTES)+"\n\nHistory\n====================\n";

      

      for (i=0; i<=Nsymb; i++)

      {  

         if (StringLen(Symbl[i])<2) continue;

         if (SymbolHistoryProfit[i]==0) continue;

         EditCreate(0,Symbl[i],0,                            dx+dx*n, dy*(1+str*5), dx,dy,Symbl[i],WidthFont,clrBlack,clrAquamarine);//A8<2>;

         EditCreate(0,Symbl[i]+"profit",0,dx+dx*n, dy*(2+str*5), dx,dy,DoubleToString(SymbolHistoryProfit[i],2),WidthFont,Color(SymbolHistoryProfit[i]));//?@>D8B

         EditCreate(0,Symbl[i]+"lot",0,   dx+dx*n, dy*(3+str*5), dx,dy,"B8?   Lot ",WidthFont-2,SteelBlue);//2A53> Buy

         EditCreate(0,Symbl[i]+"b",0,     dx+dx*n, dy*(4+str*5), dx,dy,"B "+IntegerToString(HistoryType[0][i])+" / "+DoubleToString(HistoryLot[0][i],2),WidthFont-2,WhiteColor);//2A53> Buy

         EditCreate(0,Symbl[i]+"s",0,     dx+dx*n, dy*(5+str*5), dx,dy,"S "+IntegerToString(HistoryType[1][i])+" / "+DoubleToString(HistoryLot[1][i],2),WidthFont-2,WhiteColor);//2A53> Sell

         ProfitAll+=SymbolHistoryProfit[i];

         n++;

         if (n>=st) 

         {

            n=0;str++;

         }

         if (SendMailInfo || SendNot) 

            StringConcatenate(txtInfo,txtInfo,Symbl[i],"   Buy ",Ch32(HistoryType[0][i],0),"   lot ",Ch32(HistoryLot[0][i],2),"   Sell ",Ch32(HistoryType[1][i],0),"   lot ",Ch32(HistoryLot[1][i],2),"   ",DoubleToString(SymbolHistoryProfit[i],2),"\n");

      }

      if (SendMailInfo || SendNot) StringConcatenate(txtInfo,txtInfo,"====================\nTOTAL"," ",DoubleToString(ProfitAll,2),"\n\n");

      EditCreate(0,"symbolAll",0,dx+dx*n, dy*(1+str*5), dx,dy,""",WidthFont,clrSteelBlue);//H0?:0

      EditCreate(0,"profitAll",0,dx+dx*n, dy*(2+str*5), dx,dy,DoubleToString(ProfitAll,2),WidthFont,Color(ProfitAll));//>1I89 ?@>D8B

      //i+=(int)(2*WidthWind);

      if (ShowDay)

      {

         double AccBal=AB;

         EditCreate(0,"ShowDay Yesterday 0",0,(ShowReb?dx*2:0)+dx*2,0,dx*2,dy,"@81K;L",WidthFont,clrBlack,clrAquamarine,CORNER_RIGHT_UPPER);

         if (ShowReb) EditCreate(0,"ShowReb M 0",0,dx*2,0,dx,dy,"22>4/2K2>4",WidthFont,clrBlack,clrAquamarine,CORNER_RIGHT_UPPER);

         if (ShowReb) EditCreate(0,"ShowReb R 0",0,dx,0,dx,dy,"Rebait",WidthFont,clrBlack,clrAquamarine,CORNER_RIGHT_UPPER);

         for (j=0; j<15; j++)

         { 

            AccBal-=Today[0][j];

            if (NormalizeDouble(AccBal,2)==0) AccBal=100;

            EditCreate(0,"ShowDay Yesterday T"+IntegerToString(j),0,(ShowReb?dx*2:0)+dx*3.5,dy+dy*j,dx,dy,TimeToString(iTime(NULL,PERIOD_D1,j),TIME_DATE),                     WidthFont-1,Color(Today[0][j]),clrWhite,CORNER_RIGHT_UPPER);

            EditCreate(0,"ShowDay Yesterday N"+IntegerToString(j),0,(ShowReb?dx*2:0)+dx*2.5,dy+dy*j,dx/2,dy,DoubleToString(Today[1][j],0),                                WidthFont,Color(Today[0][j]),clrWhite,CORNER_RIGHT_UPPER);

            EditCreate(0,"ShowDay Yesterday P"+IntegerToString(j),0,(ShowReb?dx*2:0)+dx*2,  dy+dy*j,dx*1.3,dy,DoubleToString(Today[0][j],2),                              WidthFont,Color(Today[0][j]),clrWhite,CORNER_RIGHT_UPPER);

            EditCreate(0,"ShowDay Yesterday %"+IntegerToString(j),0,(ShowReb?dx*2:0)+dx*0.7,dy+dy*j,dx*0.7,dy,DoubleToString(100*Today[0][j]/AccBal,2)+"%",WidthFont-1,Color(Today[0][j]),clrWhite,CORNER_RIGHT_UPPER);

            if (ShowReb && TodayR[0][j]!=0) EditCreate(0,"ShowReb Reb "+IntegerToString(j),0, dx, dy+dy*j,dx,dy,DoubleToString(TodayR[0][j],2),            WidthFont,Color(TodayR[0][j]),clrWhite,CORNER_RIGHT_UPPER); else ObjectDelete(0,"YesterdayReb "+IntegerToString(j));

            if (ShowReb && TodayM[0][j]!=0) EditCreate(0,"ShowReb Man "+IntegerToString(j),0, dx*2, dy+dy*j,dx,dy,DoubleToString(TodayM[0][j],2),          WidthFont,Color(TodayM[0][j]),clrWhite,CORNER_RIGHT_UPPER); else ObjectDelete(0,"YesterdayMan "+IntegerToString(j));

         }

      }

   }

   //==================

   //--- B5:CI85 >@45@0

   //==================

   EditCreate(0,""5:CH85" ,0,0,dy*7+dy*str*5,dx,dy,""5:CH85",WidthFont);

   EditCreate(0,"Orders f",0,0,dy*8+dy*str*5,dx,dy*3,"0",WidthFont);

   if (tn>50000) {Alert("5@5?>;=5=85 1CD5@0",OrdersTotal());return;}

   ArrayInitialize(TekType,0);

   ArrayInitialize(TekLot,0);

   for (i=0; i<Nsymb+1; i++)

   {                                               

      SymbolProfit[i]=0;

      for (j=0; j<tn; j++)

      {

         if (i == Orders[0][j])//Symbol

         {

            SymbolProfit[i]+=Orders[2][j];//?@>D8B 

            if (Orders[1][j]==ORDER_TYPE_BUY)  {TekType[0][i]++;TekLot[0][i]+=Orders[3][j];}

            if (Orders[1][j]==ORDER_TYPE_SELL) {TekType[1][i]++;TekLot[1][i]+=Orders[3][j];}

         }

      }

   }

   ProfitAll=0;

   if (txtInfo!="" && (SendMailInfo || SendNot)) StringConcatenate(txtInfo,txtInfo,"\nFloating\n====================\n");

   n=0;

   int str1=0;

   for (i=0; i<=Nsymb; i++)

   {  

      //RectLabelCreate(0,StringConcatenate("cm t w",i),Win,69+79*i,89,80,60,clrIvory);

      if (StringLen(Symbl[i])<2) continue;

      if (SymbolProfit[i]==0) continue;

      EditCreate(0,Symbl[i]+"T",      0,dx+dx*n,dy*7 +dy*str*5+dy*str1*4,dx,dy,Symbl[i],WidthFont,clrBlack,clrAquamarine);//A8<2>;

      EditCreate(0,Symbl[i]+"profitT",0,dx+dx*n,dy*8 +dy*str*5+dy*str1*4,dx,dy,DoubleToString(SymbolProfit[i],2),WidthFont,                                          Color(SymbolProfit[i]));//?@>D8B

      EditCreate(0,Symbl[i]+"bT",     0,dx+dx*n,dy*9 +dy*str*5+dy*str1*4,dx,dy,"B "+IntegerToString(TekType[0][i])+" / "+DoubleToString(TekLot[0][i],2),WidthFont-2,WhiteColor);//2A53> Buy

      EditCreate(0,Symbl[i]+"sT",     0,dx+dx*n,dy*10+dy*str*5+dy*str1*4,dx,dy,"S "+IntegerToString(TekType[1][i])+" / "+DoubleToString(TekLot[1][i],2),WidthFont-2,WhiteColor);//2A53> Sell

      ProfitAll+=SymbolProfit[i];

      n++;if (n>=st) {n=0;str1++;}

      if (txtInfo!="" && (SendMailInfo || SendNot) && (TekType[0][i]!=0 || TekType[1][i]!=0)) 

         StringConcatenate(txtInfo,txtInfo,Symbl[i],"   Buy ",Ch32(TekType[0][i],0),"   lot ",Ch32(TekLot[0][i],2),"   Sell ",Ch32(TekType[1][i],0),"   lot ",Ch32(TekLot[1][i],2),"   ",DoubleToString(SymbolProfit[i],2),"\n");

   }

   //RectLabelCreate(0,"cm t wi",Win,69+79*i,89,80,60,clrIvory);

   if (txtInfo!="") StringConcatenate(txtInfo,txtInfo,"====================\nTOTAL ",DoubleToString(ProfitAll,2),"\n\n");

   EditCreate(0,"symbolAllT",0,dx+dx*n,dy*7+dy*str*5+dy*str1*4,dx,dy,""",WidthFont,clrSteelBlue);//H0?:0

   EditCreate(0,"profitAllT",0,dx+dx*n,dy*8+dy*str*5+dy*str1*4,dx,dy,DoubleToString(ProfitAll,2),WidthFont,Color(ProfitAll));//>1I89 ?@>D8B

   //---

   if (ObjectGetInteger(0,"kn ShowMagik",OBJPROP_STATE)) 

   {

      EditCreate(0,"Magik P",0,0,dy*(12+str*5+str1*4), dx,dy,"038:",WidthFont);

      for (i=0; i<=Nmag; i++)

      {                                               

         MagikProfit[i]=0;

         for (j=0; j<hn; j++)

         {

            if (i == HistoryOrders[4][j])//Magik

            {

               MagikProfit[i]+=HistoryOrders[2][j];//?@>D8B 

            }

         }

      }

      n=0;

      int str2=0;

      ProfitAll=0;

      for (i=0; i<=Nmag; i++)

      {  

         //if (Magik[i]==0) continue;

         if (MagikProfit[i]==0) continue;

         EditCreate(0,"Magik "+IntegerToString(Magik[i])+"M",0      ,dx+dx*n, dy*(12+str*5+str1*4+str2*2), dx,dy,DoubleToString(Magik[i],0),      WidthFont,clrBlack,clrAquamarine);//A8<2>;

         EditCreate(0,"Magik "+IntegerToString(Magik[i])+"profitM",0,dx+dx*n, dy*(13+str*5+str1*4+str2*2), dx,dy,DoubleToString(MagikProfit[i],2),WidthFont,Color(MagikProfit[i]));//?@>D8B

         ProfitAll+=MagikProfit[i];

         n++;if (n>=st) {n=0;str2++;}

      }

      EditCreate(0,"Magik magAll"    ,0,dx+dx*n, dy*(12+str*5+str1*4+str2*2) ,dx,dy,""",                     WidthFont,SteelBlue);//H0?:0

      EditCreate(0,"Magik profitAllM",0,dx+dx*n, dy*(13+str*5+str1*4+str2*2) ,dx,dy,DoubleToString(ProfitAll,2),WidthFont,Color(ProfitAll));//>1I89 ?@>D8B

   }

   else ObjectsDeleteAll(0,"Magik");

   //---ObjectSetString(0,name,OBJPROP_TEXT,text);

   ObjectSetString(0,"Orders h",OBJPROP_TEXT,IntegerToString(hn));

   ObjectSetString(0,"Orders f",OBJPROP_TEXT,IntegerToString(tn));

   if (SendMailInfo && Ords>tn && iTime(NULL,TF_SendMail,0)!=TimeSendMail) 

   {

      SendMail("cm History Info "+AccountInfoString(ACCOUNT_COMPANY)+" "+IntegerToString(AN),

               txtInfo+"\nProfit "+TimeToString(iTime(NULL,PERIOD_D1,0),TIME_DATE)+" = "+DoubleToString(Today[0][0],2)+

                                 "\nRebait "+TimeToString(iTime(NULL,PERIOD_D1,0),TIME_DATE)+" = "+DoubleToString(TodayR[0][0],2)+

                                 "\n\nAll orders "+IntegerToString(OrdersTotal())+" market "+IntegerToString(tn)+

                                 "\nEquity     "+DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY),2)+

                                 "\nFreeMargin "+DoubleToString(AFM,2)+

                                 "\nBalance    "+DoubleToString(AB,2));

      TimeSendMail = iTime(NULL,TF_SendMail,0);

   }

   if (SendNot && Ords>tn) 

   {

      SendNotification("cm History Info "+AccountInfoString(ACCOUNT_COMPANY)+" "+IntegerToString(AN)+

      txtInfo+"\nProfit "+TimeToString(iTime(NULL,PERIOD_D1,0),TIME_DATE)+" = "+DoubleToString(Today[0][0],2)+

                                 "\nRebait "+TimeToString(iTime(NULL,PERIOD_D1,0),TIME_DATE)+" = "+DoubleToString(TodayR[0][0],2)+

                                 "\n\nAll orders "+IntegerToString(OrdersTotal())+" market "+IntegerToString(tn)+

                                 "\nEquity     "+DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY),2)+

                                 "\nFreeMargin "+DoubleToString(AFM,2)+

                                 "\nBalance    "+DoubleToString(AB,2));

   }

   Ords=tn;

}

//--------------------------------------------------------------------

int SymbolNum(string Symb)

{

   int i;

   for (i=0; i<100; i++)

   {                                               

      if (Symb==Symbl[i]) return(i);

      if (StringLen(Symbl[i])<2) break;

   }

   Symbl[i]=Symb;

   Nsymb=i;

   return(i);

}

//--------------------------------------------------------------------

int MagikNum(int Magic)

{

   int i=0;

   for (i=0; i<100; i++)

   {                                               

      if (Magic==Magik[i]) return(i);

      if (Magik[i]==-214748348) break;

   }

   Magik[i]=Magic;

   Nmag=i;

   return(i);

}

//--------------------------------------------------------------------

int HistoryOrders()                                  

{

   ulong ticket;

   datetime from=0; 

   datetime to=TimeCurrent(); 

//--- 70?@>A8BL 2AN 8AB>@8N 

   HistorySelect(from,to); 

   int n=0,OMN,tipOrders,j;

   string Symb;

   datetime OCT,StartInfo=TimeCurrent(),EndInfo=0;

   double Profit;

   ArrayInitialize(Today,0);

   ArrayInitialize(TodayR,0);

   ArrayInitialize(TodayM,0);

   ArrayInitialize(HistoryOrders,0);

   for (int i=HistoryOrdersTotal()-1; i>=0; i--)

   {             

      Symb=NULL; 

      if((ticket=HistoryDealGetTicket(i))>0) 

      {

         Symb = HistoryDealGetString(ticket,DEAL_SYMBOL);

         OMN = (int)HistoryDealGetInteger(ticket,DEAL_MAGIC);

         Profit = HistoryDealGetDouble(ticket,DEAL_PROFIT)+HistoryDealGetDouble(ticket,DEAL_SWAP)+HistoryDealGetDouble(ticket,DEAL_COMMISSION);

         OCT = (datetime)HistoryDealGetInteger(ticket,DEAL_TIME);

         if (Symb=="") tipOrders=2;

         else tipOrders=TipOrders(HistoryDealGetString(ticket,DEAL_COMMENT));

         switch(tipOrders)

         {

            case 0://>1KG=K5 >@45@0

               if (OCT>=iTime(NULL,PERIOD_D1,0)) {Today[0][0]+=Profit;Today[1][0]++;}

               for (j=0; j<15; j++) 

               {

                  if (OCT>=iTime(NULL,PERIOD_D1,j) && OCT<iTime(NULL,PERIOD_D1,j-1)) 

                  {

                     Today[0][j]+=Profit;Today[1][j]++;

                  }

               }

               break;

            case 1://@5109B

               if (OCT>=iTime(NULL,PERIOD_D1,0)) {TodayR[0][0]+=Profit;TodayR[1][0]++;}

               for (j=0; j<15; j++) 

               {

                  if (OCT>=iTime(NULL,PERIOD_D1,j) && OCT<iTime(NULL,PERIOD_D1,j-1)) 

                  {

                     TodayR[0][j]+=Profit;TodayR[1][j]++;

                  }

               }

               break;

            case 2://4>;82:8 8 A=OB85

               if (OCT>=iTime(NULL,PERIOD_D1,0)) {TodayM[0][0]+=Profit;TodayM[1][0]++;}

               for (j=0; j<15; j++) 

               {

                  if (OCT>=iTime(NULL,PERIOD_D1,j) && OCT<iTime(NULL,PERIOD_D1,j-1)) 

                  {

                     TodayM[0][j]+=Profit;TodayM[1][j]++;

                  }

               }

               break;

            default:

               continue;

         }

         if (OCT>=DateInfoStart && OCT<DateInfoEnd)

         {

            if (HistoryDealGetInteger(ticket,DEAL_TYPE)==ORDER_TYPE_BUY)

            {

               if (StartInfo>OCT) StartInfo=OCT;

               if (EndInfo<OCT) EndInfo=OCT;

               HistoryOrders[0][n]=SymbolNum(Symb);

               HistoryOrders[1][n]=ORDER_TYPE_BUY;

               HistoryOrders[2][n]=Profit;

               HistoryOrders[3][n]=ORDER_VOLUME_INITIAL;

               HistoryOrders[4][n]=MagikNum(OMN);

               n++;

            }

            if (HistoryDealGetInteger(ticket,DEAL_TYPE)==ORDER_TYPE_SELL)

            {

               if (StartInfo>OCT) StartInfo=OCT;

               if (EndInfo<OCT) EndInfo=OCT;

               HistoryOrders[0][n]=SymbolNum(Symb);

               HistoryOrders[1][n]=ORDER_TYPE_SELL;

               HistoryOrders[2][n]=Profit;

               HistoryOrders[3][n]=ORDER_VOLUME_INITIAL;

               HistoryOrders[4][n]=MagikNum(OMN);

               n++;

            }

         }

      }   

      if (n>50000) {Comment("5@5?>;=5=85 1CD5@0",HistoryOrdersTotal());return(n);}

   }

   //---

   string TimeSkan;

   double TS = MathCeil((EndInfo-StartInfo)/86400);   //2@5<O A:0=8@>20=8O 2 G0A0E

   if (TS>=0)

   {

      if (TS>0) TimeSkan = DoubleToString(TS,0)+" 4=.";

      if (TS==0) TimeSkan = "1 45=L";

   }

   

   //if (EndInfo!=0) ObjectSetString(0,"DateInfo",OBJPROP_TEXT,"!:0=8@>20=85 AG5B0 A "+TimeToString(StartInfo,TIME_DATE)+" ?> "+TimeToString(EndInfo,TIME_DATE)+" 2A53> "+TimeSkan);

   //else ObjectSetString(0,"DateInfo",OBJPROP_TEXT,"0 40==K9 ?5@8>4 A "+TimeToString(DateInfoStart,TIME_DATE)+" ?> "+TimeToString(DateInfoEnd,TIME_DATE)+" =5 1K;> A45;>:");

   return(n);

}

//--------------------------------------------------------------------

int TekOrders()                                  

{

   int n=0,OMN;

   string Symb;

   datetime OOT;

   ArrayInitialize(Orders,0);

   for(int i=PositionsTotal()-1; i>=0; i--)

   {

         ulong  ticket=PositionGetTicket(i);

        //    double volume=PositionGetDouble(POSITION_VOLUME);

         long OT=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);



         Symb = PositionGetString(POSITION_SYMBOL);

         OMN = (int)PositionGetInteger(POSITION_MAGIC);

         OOT = (datetime)OrderGetInteger(ORDER_TIME_DONE);

         //if (DateInfoStart>=OOT || DateInfoEnd<OOT) continue;

         if (OT==ORDER_TYPE_BUY)

         {

            Orders[0][n]=SymbolNum(Symb);

            Orders[1][n]=ORDER_TYPE_BUY;

            Orders[2][n]=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+HistoryDealGetDouble(ticket,DEAL_COMMISSION);

            Orders[3][n]=PositionGetDouble(POSITION_VOLUME);

            Orders[4][n]=MagikNum(OMN);

            n++;

         }

         if (OT==ORDER_TYPE_SELL)

         {

            Orders[0][n]=SymbolNum(Symb);

            Orders[1][n]=ORDER_TYPE_SELL;

            Orders[2][n]=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+HistoryDealGetDouble(ticket,DEAL_COMMISSION);

            Orders[3][n]=PositionGetDouble(POSITION_VOLUME);

            Orders[4][n]=MagikNum(OMN);

            n++;

      }   

      if (n>50000) {Comment("5@5?>;=5=85 1CD5@0",HistoryOrdersTotal());return(n);}

   }

   return(n);

}

//--------------------------------------------------------------------

color Color(double x)

{

   if (x<0) return(Red);

   if (x>0) return(Green);

   else return(WhiteColor);

}

//--------------------------------------------------------------------

bool EditCreate(const long             chart_ID=0,               // ID 3@0D8:0 

                const string           name="Edit",              // 8<O >1J5:B0 

                const int              sub_window=0,             // =><5@ ?>4>:=0 

                const double              x=0,                      // :>>@48=0B0 ?> >A8 X 

                const double              y=0,                      // :>>@48=0B0 ?> >A8 Y 

                const double              w=50,                 // H8@8=0 

                const double              h=18,                // 2KA>B0 

                const string           text="Text",              // B5:AB 

                const int              font_size=10,             // @07<5@ H@8DB0 

                const color            clr=clrBlack,             // F25B B5:AB0 

                const color            back_clr=clrWhite,        // F25B D>=0 

                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8 

                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // A?>A>1 2K@02=820=8O 

                const string           font="Arial",             // H@8DB 

                const bool             read_only=true,          // 2>7<>6=>ABL @540:B8@>20BL 

                const color            border_clr=clrNONE,       // F25B 3@0=8FK 

                const bool             back=false,               // =0 704=5< ?;0=5 

                const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89 

                const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2 

                const long             z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

   int x1=(int)(x*WidthWind);

   int y1=(int)(y*WidthWind);

   int width=(int)(w*WidthWind);

   int height=(int)(h*WidthWind);

   if(ObjectFind(chart_ID,name)==-1) 

   { 

      if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) 

        { 

         Print(__FUNCTION__, 

               ": =5 C40;>AL A>740BL >1J5:B \">;5 22>40\"! >4 >H81:8 = ",GetLastError()); 

         return(false); 

        } 

      ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); 

      ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); 

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 

      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 

      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

   }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x1); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y1); 

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

   return(true); 

  } 

//--------------------------------------------------------------------

string Ch32(double n,int k)

{

   string text=DoubleToString(n,k);

   if (n>1000) return(text);

   if (n>100) return(text+" ");

   if (n>10) return(text+"  ");

   return(text+"   ");

}

//--------------------------------------------------------------------

int TipOrders(string comm)

{

   if (StringLen(comm)==0) return(0);

   if (StringFind(comm, "cancelled", 0) !=- 1) return(3);//>B<5=5==K9 >@45@

   if (StringFind(comm, "INSTAREBATE AFFILIATE", 0) !=- 1) return(1);

   if (StringFind(comm, "Rebate", 0) !=- 1) return(1);

   if (StringFind(comm, "BONUS", 0) !=- 1) return(2);

   //if (StringFind(comm, "IR", 0) !=- 1) return(2);

   if (StringFind(comm, "trade result for", 0) !=- 1) return(3);

   if (StringFind(comm, "INSTAFOREX VPS SERVICE", 0) !=- 1) return(2);

   if (StringFind(comm, "Deposit", 0) !=- 1) return(2);

   //if (StringFind(comm, "LRU", 0) !=- 1) return(2);

   //if (StringFind(comm, "Yandex", 0) !=- 1) return(2);

   //if (StringFind(comm, "POU", 0) !=- 1) return(2);

   //if (StringFind(comm, "YM", 0) !=- 1) return(2);

   //if (StringFind(comm, "Z", 0) !=- 1) return(2);

   //if (StringFind(comm, "RBK", 0) !=- 1) return(2);

   //if (StringFind(comm, "QIWI", 0) !=- 1) return(2);

   //if (StringFind(comm, "R", 0) !=- 1) return(2);

   if (StringFind(comm, "CANCEL", 0) !=- 1) return(2);

   //if (StringFind(comm, "LBR", 0) !=- 1) return(2);

   if (StringFind(comm, "Decline exchange", 0) !=- 1) return(2);

   if (StringFind(comm, "FORUM AFFILIATE", 0) !=- 1) return(2);

   

   

   return(0);

}

//--------------------------------------------------------------------

bool ButtonCreate(const long              chart_ID=0,               // ID 3@0D8:0

                  const string            name="Button",            // 8<O :=>?:8

                  const int               sub_window=0,             // =><5@ ?>4>:=0

                  const long              x1=0,                      // :>>@48=0B0 ?> >A8 X

                  const long              y1=0,                      // :>>@48=0B0 ?> >A8 Y

                  const int               width1=50,                 // H8@8=0 :=>?:8

                  const int               height1=18,                // 2KA>B0 :=>?:8

                  const string            text="Button",            // B5:AB

                  const string            font="Arial",             // H@8DB

                  const int               font_size=10,             // @07<5@ H@8DB0

                  const color             clr=clrRed,               // F25B B5:AB0

                  const color             clrfon=clrBlack,          // F25B D>=0

                  const color             border_clr=clrNONE,       // F25B 3@0=8FK

                  const bool              state=false,       // F25B 3@0=8FK

                  const ENUM_BASE_CORNER  CORNER=CORNER_LEFT_UPPER)

  {

   int x=(int)(x1*WidthWind);

   int y=(int)(y1*WidthWind);

   int width=(int)(width1*WidthWind);

   int height=(int)(height1*WidthWind);

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);

      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER);

      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);

   }

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

   return(true);

}

//--------------------------------------------------------------------

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---