/* Индикатор Попова ©
!! Только для часовых таймфреймов !!
Отображает среднее значение "трендовости" на каждом часе,
либо среднее направление цены,
либо среднее значение волатильности.
*/
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Green
#property indicator_width1 4
#property indicator_style1 0
#property indicator_color2 Red
#property indicator_width2 4
#property indicator_style2 0
#property indicator_color3 Silver
#property indicator_width3 1
#property indicator_style3 2
#property indicator_color4 Silver
#property indicator_width4 1
#property indicator_style4 2
extern int Тренд_Напр_Вол=1; // "1" - тренд/флэт, "2" - направление, "3" - волатильность
extern int Включить_Комментарий=1;
extern int Сдвинуть_Гистограмму=0;
double BufRes[], BufRes2[], BufH[], BufL[];
double Buf00[], Buf01[], Buf02[], Buf03[], Buf04[], Buf05[],
Buf06[], Buf07[], Buf08[], Buf09[], Buf10[], Buf11[],
Buf12[], Buf13[], Buf14[], Buf15[], Buf16[], Buf17[],
Buf18[], Buf19[], Buf20[], Buf21[], Buf22[], Buf23[];
double Mid, Mid2, Mid3, k;
int init()
{
SetIndexBuffer(0,BufRes);
SetIndexStyle (0,DRAW_HISTOGRAM);
SetIndexShift (0,-Hour()+Сдвинуть_Гистограмму);
SetIndexBuffer(1,BufRes2);
SetIndexStyle (1,DRAW_HISTOGRAM);
SetIndexShift (1,24-Hour()+Сдвинуть_Гистограмму);
SetIndexBuffer(2,BufH);
SetIndexStyle (2,DRAW_LINE);
SetIndexShift (2,24-Hour()+Сдвинуть_Гистограмму);
SetIndexBuffer(3,BufL);
SetIndexStyle (3,DRAW_LINE);
SetIndexShift (3,24-Hour()+Сдвинуть_Гистограмму);
return(0);
}
int start()
{
ArrayResize(Buf00,1440); ArrayResize(Buf01,1440); ArrayResize(Buf02,1440); ArrayResize(Buf03,1440);
ArrayResize(Buf04,1440); ArrayResize(Buf05,1440); ArrayResize(Buf06,1440); ArrayResize(Buf07,1440);
ArrayResize(Buf08,1440); ArrayResize(Buf09,1440); ArrayResize(Buf10,1440); ArrayResize(Buf11,1440);
ArrayResize(Buf12,1440); ArrayResize(Buf13,1440); ArrayResize(Buf14,1440); ArrayResize(Buf15,1440);
ArrayResize(Buf16,1440); ArrayResize(Buf17,1440); ArrayResize(Buf18,1440); ArrayResize(Buf19,1440);
ArrayResize(Buf20,1440); ArrayResize(Buf21,1440); ArrayResize(Buf22,1440); ArrayResize(Buf23,1440);
double SH;
int HR;
for(int i=0;i<Bars;i++)
{
BufRes[i]=0; BufRes2[i]=0;
if (Тренд_Напр_Вол!=3) { BufH[i]=15; BufL[i]=-15; }
}
for(i=1440;i>0;i--)
{
if (Тренд_Напр_Вол==1)
{
Mid=(iHigh(0,60,i)+iLow(0,60,i))/2;
Mid2=(iHigh(0,60,i)+iLow(0,60,i+1))/2;
Mid3=(iHigh(0,60,i)+iLow(0,60,i+2))/2;
if ((Mid>Mid2 && Mid2>Mid3) ||
(Mid<Mid2 && Mid2<Mid3))
SH=MathAbs(Mid-Mid2)/Point;
if ((Mid>Mid2 && Mid2<Mid3) ||
(Mid<Mid2 && Mid2>Mid3))
SH=-MathAbs(Mid-Mid2)/Point;
}
if (Тренд_Напр_Вол==2)
{
SH=(iClose(0,60,i)-iOpen(0,60,i))/Point;
}
if (Тренд_Напр_Вол==3)
{
SH=0.0001*iVolume(0,0,i)*MathAbs(iClose(0,0,i)-iOpen(0,0,i))/Point;
}
HR=TimeHour(iTime(0,0,i));
if (i<=1440) k=4; if (i<=1320) k=5; if (i<=1200) k=6; if (i<=1080) k=7;
if (i<=960) k=8; if (i<=840) k=9; if (i<=720) k=10; if (i<=600) k=11;
if (i<=480) k=12; if (i<=360) k=13; if (i<=240) k=14; if (i<=120) k=15;
if (HR==0) Buf00[i]=k*SH; if (HR==1) Buf01[i]=k*SH; if (HR==2) Buf02[i]=k*SH; if (HR==3) Buf03[i]=k*SH;
if (HR==4) Buf04[i]=k*SH; if (HR==5) Buf05[i]=k*SH; if (HR==6) Buf06[i]=k*SH; if (HR==7) Buf07[i]=k*SH;
if (HR==8) Buf08[i]=k*SH; if (HR==9) Buf09[i]=k*SH; if (HR==10) Buf10[i]=k*SH; if (HR==11) Buf11[i]=k*SH;
if (HR==12) Buf12[i]=k*SH; if (HR==13) Buf13[i]=k*SH; if (HR==14) Buf14[i]=k*SH; if (HR==15) Buf15[i]=k*SH;
if (HR==16) Buf16[i]=k*SH; if (HR==17) Buf17[i]=k*SH; if (HR==18) Buf18[i]=k*SH; if (HR==19) Buf19[i]=k*SH;
if (HR==20) Buf20[i]=k*SH; if (HR==21) Buf21[i]=k*SH; if (HR==22) Buf22[i]=k*SH; if (HR==23) Buf23[i]=k*SH;
}
for (i=24;i>=0;i--)
{
BufRes[i]=0;
int c00, c01, c02, c03, c04, c05, c06, c07, c08, c09, c10, c11,
c12, c13, c14, c15 ,c16, c17, c18, c19, c20, c21, c22, c23;
for (int n=1440;n>0;n--)
{
if (i==24 && Buf00[n]!=0) {c00++; BufRes[i]=BufRes[i]+Buf00[n]/9.5;}
if (i==23 && Buf01[n]!=0) {c01++; BufRes[i]=BufRes[i]+Buf01[n]/9.5;}
if (i==22 && Buf02[n]!=0) {c02++; BufRes[i]=BufRes[i]+Buf02[n]/9.5;}
if (i==21 && Buf03[n]!=0) {c03++; BufRes[i]=BufRes[i]+Buf03[n]/9.5;}
if (i==20 && Buf04[n]!=0) {c04++; BufRes[i]=BufRes[i]+Buf04[n]/9.5;}
if (i==19 && Buf05[n]!=0) {c05++; BufRes[i]=BufRes[i]+Buf05[n]/9.5;}
if (i==18 && Buf06[n]!=0) {c06++; BufRes[i]=BufRes[i]+Buf06[n]/9.5;}
if (i==17 && Buf07[n]!=0) {c07++; BufRes[i]=BufRes[i]+Buf07[n]/9.5;}
if (i==16 && Buf08[n]!=0) {c08++; BufRes[i]=BufRes[i]+Buf08[n]/9.5;}
if (i==15 && Buf09[n]!=0) {c09++; BufRes[i]=BufRes[i]+Buf09[n]/9.5;}
if (i==14 && Buf10[n]!=0) {c10++; BufRes[i]=BufRes[i]+Buf10[n]/9.5;}
if (i==13 && Buf11[n]!=0) {c11++; BufRes[i]=BufRes[i]+Buf11[n]/9.5;}
if (i==12 && Buf12[n]!=0) {c12++; BufRes[i]=BufRes[i]+Buf12[n]/9.5;}
if (i==11 && Buf13[n]!=0) {c13++; BufRes[i]=BufRes[i]+Buf13[n]/9.5;}
if (i==10 && Buf14[n]!=0) {c14++; BufRes[i]=BufRes[i]+Buf14[n]/9.5;}
if (i==9 && Buf15[n]!=0) {c15++; BufRes[i]=BufRes[i]+Buf15[n]/9.5;}
if (i==8 && Buf16[n]!=0) {c16++; BufRes[i]=BufRes[i]+Buf16[n]/9.5;}
if (i==7 && Buf17[n]!=0) {c17++; BufRes[i]=BufRes[i]+Buf17[n]/9.5;}
if (i==6 && Buf18[n]!=0) {c18++; BufRes[i]=BufRes[i]+Buf18[n]/9.5;}
if (i==5 && Buf19[n]!=0) {c19++; BufRes[i]=BufRes[i]+Buf19[n]/9.5;}
if (i==4 && Buf20[n]!=0) {c20++; BufRes[i]=BufRes[i]+Buf20[n]/9.5;}
if (i==3 && Buf21[n]!=0) {c21++; BufRes[i]=BufRes[i]+Buf21[n]/9.5;}
if (i==2 && Buf22[n]!=0) {c22++; BufRes[i]=BufRes[i]+Buf22[n]/9.5;}
if (i==1 && Buf23[n]!=0) {c23++; BufRes[i]=BufRes[i]+Buf23[n]/9.5;}
}
if (i==24) BufRes[i]=BufRes[i]/c00; if (i==23) BufRes[i]=BufRes[i]/c01;
if (i==22) BufRes[i]=BufRes[i]/c02; if (i==21) BufRes[i]=BufRes[i]/c03;
if (i==20) BufRes[i]=BufRes[i]/c04; if (i==19) BufRes[i]=BufRes[i]/c05;
if (i==18) BufRes[i]=BufRes[i]/c06; if (i==17) BufRes[i]=BufRes[i]/c07;
if (i==16) BufRes[i]=BufRes[i]/c08; if (i==15) BufRes[i]=BufRes[i]/c09;
if (i==14) BufRes[i]=BufRes[i]/c10; if (i==13) BufRes[i]=BufRes[i]/c11;
if (i==12) BufRes[i]=BufRes[i]/c12; if (i==11) BufRes[i]=BufRes[i]/c13;
if (i==10) BufRes[i]=BufRes[i]/c14; if (i==9) BufRes[i]=BufRes[i]/c15;
if (i==8) BufRes[i]=BufRes[i]/c16; if (i==7) BufRes[i]=BufRes[i]/c17;
if (i==6) BufRes[i]=BufRes[i]/c18; if (i==5) BufRes[i]=BufRes[i]/c19;
if (i==4) BufRes[i]=BufRes[i]/c20; if (i==3) BufRes[i]=BufRes[i]/c21;
if (i==2) BufRes[i]=BufRes[i]/c22; if (i==1) BufRes[i]=BufRes[i]/c23;
BufRes2[i]=BufRes[i];
if (Тренд_Напр_Вол!=3)
{
BufH[i]=15; BufL[i]=-15; BufH[i+24]=15; BufL[i+24]=-15;
}
}
if (Включить_Комментарий==1)
{
WindowRedraw();
int H;
if (Hour()==23) H=0; else H=Hour()+1;
Comment(
"\n00= ",MathRound(BufRes[24])," 01= ",MathRound(BufRes[23]),
" 02= ",MathRound(BufRes[22])," 03= ",MathRound(BufRes[21]),
"\n04= ",MathRound(BufRes[20])," 05= ",MathRound(BufRes[19]),
" 06= ",MathRound(BufRes[18])," 07= ",MathRound(BufRes[17]),
"\n08= ",MathRound(BufRes[16])," 09= ",MathRound(BufRes[15]),
" 10= ",MathRound(BufRes[14])," 11= ",MathRound(BufRes[13]),
"\n12= ",MathRound(BufRes[12])," 13= ",MathRound(BufRes[11]),
" 14= ",MathRound(BufRes[10])," 15= ",MathRound(BufRes[9]),
"\n16= ",MathRound(BufRes[8]), " 17= ",MathRound(BufRes[7]),
" 18= ",MathRound(BufRes[6]), " 19= ",MathRound(BufRes[5]),
"\n20= ",MathRound(BufRes[4]), " 21= ",MathRound(BufRes[3]),
" 22= ",MathRound(BufRes[2]), " 23= ",MathRound(BufRes[1]),
"\n\nСледующий час - ",H,", значение часа = ",MathRound(BufRes[24-H])
);
}
else Comment("");
return(0);
}