// ÈÍÄÈÊÀÒÎÐ // #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 Red #property indicator_color2 DarkSlateGray #property indicator_color3 DarkSlateGray #property indicator_color4 Silver #property indicator_color5 DimGray #property indicator_color6 DimGray #property indicator_color7 DarkGreen #property indicator_color8 SaddleBrown //---- indicator parameters extern int ExtDepth=12; //---- indicator buffers double LowBuffer[515]; double HighBuffer[515]; double ZgMas[]; double LwMas[]; double HgMas[]; double SrdMas[]; double Lw[]; double Hg[]; double Rd[]; double Gr[]; //==== double wp,wp1,wp2,lastlow,lasthigh; int sl,sh,sk,sk2,ysh,ysl,ci,ps,pz, ps1,ps2,ps3,psa,pd,ska,knl,c,histori=500,time; //==== int init() { //---- indicators IndicatorBuffers(8); SetIndexStyle(0,DRAW_SECTION); SetIndexStyle(1,DRAW_SECTION); SetIndexStyle(2,DRAW_SECTION); SetIndexStyle(3,DRAW_SECTION); SetIndexStyle(4,DRAW_SECTION); SetIndexStyle(5,DRAW_SECTION); SetIndexStyle(6,DRAW_SECTION); SetIndexStyle(7,DRAW_SECTION); SetIndexBuffer(0,ZgMas); SetIndexBuffer(1,LwMas); SetIndexBuffer(2,HgMas); SetIndexBuffer(3,SrdMas); SetIndexBuffer(4,Lw); SetIndexBuffer(5,Hg); SetIndexBuffer(6,Gr); SetIndexBuffer(7,Rd); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); SetIndexEmptyValue(3,0.0); SetIndexEmptyValue(4,0.0); SetIndexEmptyValue(5,0.0); SetIndexEmptyValue(6,0.0); SetIndexEmptyValue(7,0.0); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,y,vl; double val,kl,kh; //==============================================// if(Bars-c>1)c=0; if(c==0){ ArrayInitialize(LowBuffer,0.0); ArrayInitialize(HighBuffer,0.0); ArrayInitialize(SrdMas,0.0); ArrayInitialize(ZgMas,0.0); ArrayInitialize(Lw,0.0); ArrayInitialize(Hg,0.0); ska=0;psa=0;ysl=0;ysh=0;} //==============================================// if(c==0)i=histori; else i=Bars-c; c=Bars; //==============================================// if(i==1){sl++;sh++;pd++;ps++;ps1++;ps2++;ps3++;psa++;ysl++;ysh++;pz++; for(y=histori;y>=-1;y--) {LowBuffer[y+1]=LowBuffer[y];HighBuffer[y+1]=HighBuffer[y];}} for(y=i;y>=0;y--) {vl=0; //==============================// val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,y)]; if(val!=lastlow&&val==Low[y]&&HighBuffer[y]==0) {lastlow=val;if(sk==1){LowBuffer[y]=val; sl=y; sk=-1;vl=-1;} else{if(valHighBuffer[sh]){HighBuffer[sh]=0; HighBuffer[y]=val;sh=y;sk=1;vl=1;}} } //====================================================// if(sk2!=sk){ps3=ps2;ps2=ps1;ps1=ps;wp2=wp1;wp1=wp; sk2=sk;} if(vl!=0){ps=y; if(sk==1)val=HighBuffer[ps]-HighBuffer[ps2]; if(sk==-1)val=LowBuffer[ps]-LowBuffer[ps2] ; wp=val/(ps2-ps);} } //===================================================// if(ska!=sk)knl=0; if(sk==1&&wp>=wp1&&knl==0) knl=1; if(sk==-1&&wp<=wp1&&knl==0)knl=-1; if(ska!=sk||i==1){ArrayCopy(LwMas,LowBuffer);ArrayCopy(HgMas,HighBuffer);} //============================================// if((vl!=0&&knl!=0)||i==1||ska!=sk){if(ska==0)pd=ps; if(sk==1) if(wpwp1)val=wp1; else val=wp; if(sk==1) {if(wp<=wp1&&ps!=0)HgMas[ps]=0;if(wp>=wp1&&ps==0&&pd!=0)HgMas[pd]=0;} if(sk==-1){if(wp>=wp1&&ps!=0)LwMas[ps]=0;if(wp<=wp1&&ps==0&&pd!=0)LwMas[pd]=0;} if(sk==1) {LwMas[0]=LwMas[ps1]+val*ps1; HgMas[0]=HgMas[ps2]+val*ps2;} if(sk==-1) {LwMas[0]=LwMas[ps2]+val*ps2; HgMas[0]=HgMas[ps1]+val*ps1;} pd=ps;} //===================================================// if(vl!=0||ska==0){y=0;if(ska==0)y=histori;if(ska==0)pz=ps; while(y>=0&&ska==0){ if(HighBuffer[y]!=0)ZgMas[y]=HighBuffer[y]; if(LowBuffer[y]!=0) ZgMas[y]=LowBuffer[y]; y--;} if(ska!=0){if(vl==1)ZgMas[0]=HighBuffer[0]; if(vl==-1)ZgMas[0]=LowBuffer[0]; if(vl==1&&pz!=0&&ska==sk) ZgMas[pz]=0; if(vl==-1&&pz!=0&&ska==sk)ZgMas[pz]=0; pz=0;}} //======================================================// if((knl!=0&&vl!=0)||i==1||ska!=sk){y=0;if(ska==0)y=histori; while(y>0){ if(HgMas[y]!=0) {kh=HgMas[y]-(HgMas[y]-HgMas[ysh])*(ysl-y)/(ysh-y);kl=LwMas[ysl]; SrdMas[ysl]=(kl+kh)/2; ysh=y;} if(LwMas[y]!=0) {kl=LwMas[y]-(LwMas[y]-LwMas[ysl])*(ysh-y)/(ysl-y);kh=HgMas[ysh]; SrdMas[ysh]=(kl+kh)/2; ysl=y;} y--;} //=========================================================// if(HgMas[1]==0&&LwMas[1]==0)SrdMas[1]=0; SrdMas[0]=(HgMas[0]+LwMas[0])/2; if((knl!=0&&vl!=0)||ska!=sk){ if(ps==0&&psa!=0&&ska==sk)SrdMas[psa]=0; val=HgMas[0]-LwMas[0]; if(LwMas[ps1]!=0)SrdMas[ps1]=LwMas[ps1]+val/2; if(HgMas[ps1]!=0)SrdMas[ps1]=HgMas[ps1]-val/2; if(HgMas[ps]!=0&&ps!=0){SrdMas[ps]=HgMas[ps]-val/2;} if(LwMas[ps]!=0&&ps!=0){SrdMas[ps]=LwMas[ps]+val/2;} if(ska!=sk&&ska!=0&&sk==1) {kl=LwMas[ps1]-(LwMas[ps1]-LwMas[ps3])*(ps2-ps1)/(ps3-ps1); SrdMas[ps2]=(HgMas[ps2]+kl)/2;} if(ska!=sk&&ska!=0&&sk==-1) {kh=HgMas[ps1]-(HgMas[ps1]-HgMas[ps3])*(ps2-ps1)/(ps3-ps1); SrdMas[ps2]=(LwMas[ps2]+kh)/2;} psa=ps;}} //============================================================// if(ska!=sk){ArrayInitialize(Lw,0.0);ArrayInitialize(Hg,0.0); ArrayInitialize(Rd,0.0);ArrayInitialize(Gr,0.0);} if((ska!=sk||i==1)&&((sk==1&&wp>wp1)||(sk==-1&&wp