//+------------------------------------------------------------------+
//| 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