Popular_prices

Author: Copyright 2015, MetaQuotes Yuri_Evseenkov.
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Popular_prices
//+------------------------------------------------------------------+
//|                                              Popular prices .mq4 |
//|                                   Copyright 2015, Yuri_Evseenkov.|
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Yuri_Evseenkov."
#property link      "http://www.mql5.com"

extern double bar;//÷èñëî ïîñëåäíèõ áàðîâ Ïî óìîë÷àíèþ (bar=0) îáðàáàòûâàþòñÿ áàðû(ñâå÷è) ðàñïîëîæåííûå â îêíå òåêóùåãî ãðàôèêà 
int BIC[25000],BICS[25000],BIT[25000];
int n,m,z,mp,g,tx,zm,pr,d,bm,b,ba,t;
double BR[2,25000],Z[4,25000];
long t0;
//+------------------------------------------------------------------+
//| Determination of the number of processed bars                    |
//+------------------------------------------------------------------+
void baf() 
  {
   ba=WindowFirstVisibleBar();
   Comment("Îáðàáàòûâàþòñÿ áàðû(ñâå÷è) ðàñïîëîæåííûå â îêíå òåêóùåãî ãðàôèêà  ",ba,"  áàðîâ(ñâå÷åé)");
   if(bar>0)
     {ba=bar;Comment("Îáðàáàòûâàþòñÿ  ",ba,"  áàðîâ(ñâå÷åé)");}
     if(bar<50 && bar>0)
     { ba=50;Comment(" Ìèíèìàëüíîå ÷èñëî áàðîâ 50 Îáðàáàòûâàþòñÿ ",ba," áàðîâ(ñâå÷åé)");}
     if(bar>Bars || bar==1)
     {ba=Bars;Comment(" Îáðàáàòûâàåòñÿ ìàêñèìàëüíîå ÷èñëî áàðîâ â èñòîðèè íà ýòîì òàéìôðåéìå  ",ba,"  áàðîâ(ñâå÷åé)");}
   }
//+------------------------------------------------------------------+
//|  Calculation of the coefficient d                                |
//+------------------------------------------------------------------+
void df()
  {
   if(Bid<2){d=10000;}
   else
     {
      d=1;if(Bid<20 && Bid>=2){d=1000;}
      if(Bid<200  &&  Bid>=20){d=100;}
      if(Bid<2000 && Bid>=200){d=10;}
      if(Bid>24000){Alert(" Èíñòðóìåíò íå ìîæåò áûòü îáðàáîòàí/nÏðèñîåäèíèòå ñîâåòíèê ê ãðàôèêó äðóãîãî èíñòðóìåíòà");}
     }
  }
//+------------------------------------------------------------------+
//| The calculation function arrays.                                 |
//+------------------------------------------------------------------+  
void of()
  {
   int BI[25000],ZS[25000];
   n=0;while(n<ba)
     {
      b=(Open[n]*d);BI[b]++;
      b=(Close[n]*d);BI[b]++;
      b=(Low[n]*d);BI[b]++;
      b=(High[n]*d);BI[b]++;
      n++;
     }

   int  maxi=ArrayMaximum(High,ba,0);double  maxt=High[maxi];
   int maxpp=maxt*d;int maxd=maxpp/10*10+10;
   int mini=ArrayMinimum(Low,ba,0);double   mint=Low[mini];
   int minpp=mint*d;int mind=minpp/10*10;
   double ymax=maxt;double ymin=mint;
   if(ba>(WindowFirstVisibleBar()*2)){ymax=WindowPriceMax();ymin=WindowPriceMin();}
   double c=MathRound((ymax-ymin)/10*d)+1;
   ArrayCopy(BIC,BI);ArrayCopy(BICS,BI);ArraySort(BICS);
   bm=ArrayBsearch(BICS,!0,WHOLE_ARRAY,0,MODE_ASCEND);
   ZeroMemory(BR);ZeroMemory(Z);

   m=bm;while(m<25000)
     {
      BR[1,m]=BICS[m];m++;
     }

   n=bm;while(n<25000)
     {
      if(BR[1,n]==0){n++;continue;}
      m=0;while(m<25000)
        {
         if(BIC[m]==0){m++;continue;}
         if(BR[1,n]==BIC[m])
           {
            BR[0,n]=m;BIC[m]=0;break;
           }
         m++;
        }
      n++;
     }

   int vg=maxd;int ng=vg-c+1; n=0;m=ng;
   while(n<=24999)
     {
      if(vg<mind){break;}
      Z[0,n]=vg;Z[1,n]=0;
      while(m<=vg)
        {
         Z[1,n]=Z[1,n]+BI[m];m++;
        }
      vg=vg-c;ng=ng-c;m=ng;n++;
     }

   z=0;while(z<25000)
     {
      if(Z[0,z]==0){zm=z;break;}
      ZS[z]=Z[1,z];z++;
     }
   ArraySort(ZS,WHOLE_ARRAY,0,MODE_DESCEND);

   n=0;while(n<25000)
     {
      if(Z[0,n]==0){break;}
      Z[2,n]=ZS[n];n++; 
     }
   n=1;if(Z[2,0]==Z[1,0]){Z[3,0]=Z[0,0];}
   while(n<25000)
     {
      if(Z[0,n]==0){break;}
      if(Z[2,n]==0){break;}
      m=0;if(Z[2,n]==Z[2,(n-1)]){m=mp+1;}
      while(m<25000)
        {
         if(Z[0,m]==0){break;}
         if(Z[2,n-1]==Z[1,m]){Z[3,n-1]=Z[0,m];mp=m;break;}m++;
        }
      n++;
     }

   n=24990;int k;while(n<=24999)
     {
      k=24999-n;
      int s=ba*4;  Print(" ",25000-n,"         ",(BR[0,n])/d,"                  ",BR[1,n],"                            ",NormalizeDouble(BR[1,n]/s*100,2),"                                            ",(Z[3,k]-c+1)/d,"-",Z[3,k]/d,"                                 ",Z[2,k],"                                ",NormalizeDouble(Z[2,k]/s*100,2));
      n++;
     }
   Print("          öåíà             ÷èñëî êîòèðîâîê           ïðîöåíò                                    öåíîâàÿ çîíà                ÷èñëî êîòèðîâîê              ïðîöåíò");
   Print("                                    ÒÎÏ-10 öåí                                                                                                 ÒÎÏ-10 öåíîâûõ çîí  ");
   Print("            ÎÁÐÀÁÎÒÀÍÎ ÁÀÐÎÂ ",ba," ÌÀÊÑÈÌÀËÜÍÀß ÖÅÍÀ ",maxt," ÌÈÍÈÌÀËÜÍÀß ÖÅÍÀ ",mint);
  }
//+------------------------------------------------------------------+
//|   The function of graphic objects                                |
//+------------------------------------------------------------------+
void grafika()
  {
   g=0;tx=zm;pr=tx+zm;int ks=900;if (ba>200){ks=2400;};int ks1=300;if (ba>200){ks1=1;};
   while(g<25000) 
     {
      if(Z[0,g]==0){break;}
      if(!ObjectCreate(0,g,OBJ_HLINE,0,0,(Z[0,g]/d))){ Print("Îøèáêà ñîçäàíèÿ îáúåêòà 1: code #",GetLastError());}
      if(!ObjectSetInteger(0,g,OBJPROP_COLOR,clrBlue)){Print("Îøèáêà èçìåíåíèÿ îáúåêòà 2: code #",GetLastError());}

      if(!ObjectCreate(0,tx,OBJ_TEXT,0,(Time[0]+Period()*ks1),(Z[0,g]/d))){Print("Îøèáêà ñîçäàíèÿ îáúåêòà 3: code #",GetLastError());}
      if(!ObjectSetText(tx,NormalizeDouble(Z[1,g]/ba/4*100,2),15,NULL,clrRed)) {Print("Îøèáêà èçìåíåíèÿ îáúåêòà 4: code #",GetLastError());}

      
      if(!ObjectCreate(0,pr,OBJ_TEXT,0,(Time[0]+Period()*ks),(Z[0,g]/d))){Print("Îøèáêà ñîçäàíèÿ îáúåêòà 5: code #",GetLastError());}
      if(!ObjectSetText(pr,"%",15,NULL,clrRed)) {Print("Îøèáêà èçìåíåíèÿ îáúåêòà 6: code #",GetLastError());}
      g++;tx++;pr++; 
     }

   int vl=333; ObjectDelete(vl);
   if(!ObjectCreate(0,vl,OBJ_VLINE,0,Time[ba],0)){ Print("Îøèáêà ñîçäàíèÿ îáúåêòà 7: code #",GetLastError());}
   if(!ObjectSetInteger(0,vl,OBJPROP_COLOR,clrWhite)){Print("Îøèáêà èçìåíåíèÿ îáúåêòà 8: code #",GetLastError());}
   
   double coor,coor1,coor2;int com=332,com1=331,com2=330;int vis=WindowFirstVisibleBar();
   ObjectDelete(com);ObjectDelete(com1);ObjectDelete(com2);
   
   double ser=WindowPriceMin()+(WindowPriceMax()-WindowPriceMin())/2;
   double ra=WindowPriceMax()-WindowPriceMin();
   if(Close[vis]<ser){coor=WindowPriceMax()-ra/5;coor1=coor+ra/10;coor2=coor+ra/20;}
   else {coor=WindowPriceMin()+ra/5;coor1=coor+ra/10;coor2=coor+ra/20;}

   if(!ObjectCreate(0,com,OBJ_TEXT,0,(Time[vis]+Period()*ks),coor)){Print("Îøèáêà ñîçäàíèÿ îáúåêòà 9: code #",GetLastError());}
   if(!ObjectSetText(com," ÁÀÐÎÂ",10,NULL,clrRed)) {Print("Îøèáêà èçìåíåíèÿ îáúåêòà 10: code #",GetLastError());}

   if(!ObjectCreate(0,com1,OBJ_TEXT,0,(Time[vis]+Period()*ks),coor1)){Print("Îøèáêà ñîçäàíèÿ îáúåêòà 11: code #",GetLastError());}
   if(!ObjectSetText(com1," ÎÁÐÀÁÎÒÀÍÎ",10,NULL,clrRed)) {Print("Îøèáêà èçìåíåíèÿ îáúåêòà 12: code #",GetLastError());}

   if(!ObjectCreate(0,com2,OBJ_TEXT,0,(Time[vis]+Period()*ks),coor2)){Print("Îøèáêà ñîçäàíèÿ îáúåêòà 13: code #",GetLastError());}
   if(!ObjectSetText(com2,ba,10,NULL,clrRed)) {Print("Îøèáêà èçìåíåíèÿ îáúåêòà 14: code #",GetLastError());}
  }
//+------------------------------------------------------------------+
//| Initialization                                                   |
//+------------------------------------------------------------------+
void OnInit()
  {
   if(IsTesting()){df();return;}
   else{baf();df();of();ObjectsDeleteAll();grafika();t0=Time[0]-300;}
  }
//+------------------------------------------------------------------+
//|Tester                                                            |
//+------------------------------------------------------------------+
double OnTester()
  {
   oft();return(t); 
  }
//+------------------------------------------------------------------+
//| Deinitialization                                                 |
//+------------------------------------------------------------------+
void deinit(){ObjectsDeleteAll();}
//+------------------------------------------------------------------+
//| Processing of new bars                                           |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting()){b=(Bid*d);BIT[b]++;t++;}
   else
     {
      if(t0<Time[0])
        {of();ObjectsDeleteAll();grafika();t0=Time[0];}
     }
  }
void OnTimer(){}
//+------------------------------------------------------------------+
//| The calculation function arrays.Testing.                         |
//+------------------------------------------------------------------+  
void oft() 
  {
   int ZS[25000];double BR0[25000];
   ArrayCopy(BIC,BIT);ArrayCopy(BICS,BIT);ArraySort(BICS);
   bm=ArrayBsearch(BICS,!0,WHOLE_ARRAY,0,MODE_ASCEND);bm=bm+1;////
   ZeroMemory(BR);ZeroMemory(Z);

   m=bm;while(m<25000)
     {
      BR[1,m]=BICS[m];m++; 
     }

   n=bm;
   while(n<25000) 
     {
      if(BR[1,n]==0){n++;continue;}
      m=0;while(m<25000)
        {
         if(BIC[m]==0){m++;continue;}
         if(BR[1,n]==BIC[m])
           {
            BR[0,n]=m;BIC[m]=0;BR0[n]=m;break;
           }
         m++;
        }
      n++;
     }

   int  maxi=ArrayMaximum(BR0,WHOLE_ARRAY,bm);double maxt=BR0[maxi]/d;
   int maxpp=maxt*d;int maxd=maxpp/10*10+10;
   int mini=ArrayMinimum(BR0,WHOLE_ARRAY,bm);double  mint=BR0[mini]/d;
   int minpp=mint*d;int mind=minpp/10*10;
   double ymax=maxt;double ymin=mint;
   double c=MathRound((ymax-ymin)/10*d)+1;

   int vg=maxd;int ng=vg-c+1; n=0;m=ng;
   while(n<=24999)
     {
      if(vg<mind){break;}
      Z[0,n]=vg;Z[1,n]=0;
      while(m<=vg){ Z[1,n]=Z[1,n]+BIT[m];m++;}
      vg=vg-c;ng=ng-c;m=ng;n++;
     }

   z=0;while(z<25000)
     {
      if(Z[0,z]==0){zm=z;break;}
      ZS[z]=Z[1,z];z++;
     }
   ArraySort(ZS,WHOLE_ARRAY,0,MODE_DESCEND);
   n=0;while(n<25000)
     {
      if(Z[0,n]==0){break;}
      Z[2,n]=ZS[n];n++; 
     }
   n=0;if(Z[2,0]==Z[1,0]){Z[3,0]=Z[0,0];n=1;}

   while(n<25000)
     {
      if(Z[0,n]==0){break;}
      if(Z[2,n]==0){break;}
      m=0;if(Z[2,n]==Z[2,(n-1)]){m=mp+1;}
      while(m<25000)
        {
         if(Z[0,m]==0){break;}
         if(Z[2,n]==Z[1,m]){Z[3,n]=Z[0,m];mp=m;break;}m++;
        }
      n++;
     }

   n=24990;int k;while(n<=24999)
     {
      k=24999-n;
      Print(" ",25000-n,"         ",(BR[0,n])/d,"                  ",BR[1,n],"                            ",NormalizeDouble(BR[1,n]/t*100,2),"                                            ",(Z[3,k]-c+1)/d,"-",Z[3,k]/d,"                      ",Z[2,k],"                                ",NormalizeDouble(Z[2,k]/t*100,2));
      n++;
     }
   Print("          öåíà             ÷èñëî êîòèðîâîê           ïðîöåíò                                    öåíîâàÿ çîíà                ÷èñëî êîòèðîâîê              ïðîöåíò");
   Print("                                    ÒÎÏ-10 öåí                                                                                                 ÒÎÏ-10 öåíîâûõ çîí  ");
   Print("            ÎÁÐÀÁÎÒÀÍÎ ÒÈÊÎÂ ",t," ÌÀÊÑÈÌÀËÜÍÀß ÖÅÍÀ ",maxt," ÌÈÍÈÌÀËÜÍÀß ÖÅÍÀ ",mint);
  }
//+------------------------------------------------------------------+

Comments