Загрузка данных


/==============================================================================
bool ffb=false,ffs=false;int br,is,zzb,zzs,xx=0,kk=0,pp=0,tt,vv;
double vee=0,nee=0,v1[],n1[],v2[],n2[],b1,b2,b3,s1,s2,s3,vr[],nz[],
ps[],xb[],xs[],hb[],hs[],vvv[],vvn[],nnn[],nnv[],evv[],evn[],enn[],
env[],bb1[],ss1[],bb2[],ss2[],Bu[],Se[];int init(){IndicatorBuffers(25);
SetIndexBuffer(0,Bu);SetIndexStyle(0,DRAW_ARROW);SetIndexArrow(0,233);
SetIndexBuffer(1,Se);SetIndexStyle(1,DRAW_ARROW);SetIndexArrow(1,234);
SetIndexBuffer(2,v1);SetIndexStyle(2,DRAW_ARROW);SetIndexArrow(2,110);
SetIndexBuffer(3,n1);SetIndexStyle(3,DRAW_ARROW);SetIndexArrow(3,110);
SetIndexBuffer(4,v2);SetIndexStyle(4,DRAW_ARROW);SetIndexArrow(4,110);
SetIndexBuffer(5,n2);SetIndexStyle(5,DRAW_ARROW);SetIndexArrow(5,110);
SetIndexBuffer(6,hb);SetIndexStyle(6,DRAW_ARROW);SetIndexArrow(6,217);
SetIndexBuffer(7,hs);SetIndexStyle(7,DRAW_ARROW);SetIndexArrow(7,218);
SetIndexBuffer(8,evv);SetIndexStyle(8,DRAW_ARROW);SetIndexArrow(8,110);
SetIndexBuffer(9,evn);SetIndexStyle(9,DRAW_ARROW);SetIndexArrow(9,108);
SetIndexBuffer(10,enn);SetIndexStyle(10,DRAW_ARROW);SetIndexArrow(10,110);
SetIndexBuffer(11,env);SetIndexStyle(11,DRAW_ARROW);SetIndexArrow(11,108);
SetIndexBuffer(12,vvv);SetIndexBuffer(13,vvn);SetIndexBuffer(14,nnn);
SetIndexBuffer(15,nnv);SetIndexBuffer(16,xb);SetIndexBuffer(17,xs);
SetIndexBuffer(18,ps);SetIndexBuffer(19,vr);SetIndexBuffer(20,nz);
SetIndexBuffer(21,bb1);SetIndexBuffer(22,ss1);SetIndexBuffer(23,bb2);
SetIndexBuffer(24,ss2);if(Visual_Level==false){SetIndexStyle(2,DRAW_NONE);
SetIndexStyle(3,DRAW_NONE);SetIndexStyle(4,DRAW_NONE);SetIndexStyle
(5,DRAW_NONE);}if(Visual_Zone_Bar==false){SetIndexStyle(8,DRAW_NONE);
SetIndexStyle(9,DRAW_NONE);SetIndexStyle(10,DRAW_NONE);SetIndexStyle
(11,DRAW_NONE);}is=History;if(is<1500)is=1500;return(0);}
int start(){int ac=AccountNumber();if(ac>0&&kk==0){if(N(ac))xx=1;
else Alert("Неверный счет, индикатор не работает");kk=1;}if(xx==1)
{if(pp==0){pp=1;ChartSetSymbolPeriod(0,NULL,0);}static datetime qb=0,
qs=0;int w=Bars-IndicatorCounted()-1;if(w>is)w=is;for(int i=w;i>=0;i--){
if(v1[i+2]!=EMPTY_VALUE&&v1[i+2]<v2[i+2]&&v2[i+1]!=EMPTY_VALUE
&&v2[i+1]>v1[i+2]&&Close[i+1]>Open[i+1]){v2[i+1]=v1[i+2];}
if(n1[i+2]!=EMPTY_VALUE&&n1[i+2]>n2[i+2]&&n2[i+1]!=EMPTY_VALUE
&&n2[i+1]<n1[i+2]&&Close[i+1]<Open[i+1]){n2[i+1]=n1[i+2];}
if(tt!=Time[i]){v1[i+1]=EMPTY_VALUE;n1[i+1]=EMPTY_VALUE;
v2[i]=EMPTY_VALUE;n2[i]=EMPTY_VALUE;
if(Open[i+1]>Close[i+1]&&Open[i+2]>Close[i+2])
{if(Open[i+1]-Close[i+1]<Open[i+2]-Close[i+2])
{v1[i+1]=Close[i+1];b3=b2;b2=b1;b1=v1[i+1];}}
if(Open[i+1]<Close[i+1]&&Open[i+2]<Close[i+2])
{if(Close[i+1]-Open[i+1]<Close[i+2]-Open[i+2])
{n1[i+1]=Close[i+1];s3=s2;s2=s1;s1=n1[i+1];}}
if(v2[i+1]!=EMPTY_VALUE)v2[i]=v2[i+1];
if(n2[i+1]!=EMPTY_VALUE)n2[i]=n2[i+1];
if(b1>0&&b2>0&&b3>0&&b1<b2&&b2<b3&&b1-b2>b2-b3){v2[i]=b1;}
if(s1>0&&s2>0&&s3>0&&s1>s2&&s2>s3&&s2-s1>s3-s2){n2[i]=s1;}
if(v1[i+1]!=EMPTY_VALUE&&v2[i]!=EMPTY_VALUE)vv=1;
if(n1[i+1]!=EMPTY_VALUE&&n2[i]!=EMPTY_VALUE)vv=2;
if(vv==2)v2[i]=EMPTY_VALUE;if(vv==1)n2[i]=EMPTY_VALUE;
tt=Time[i];}vr[i]=EMPTY_VALUE;nz[i]=EMPTY_VALUE;
vr[i+3]=iFractals(NULL,0,MODE_UPPER,i+3);nz[i+3]=iFractals(NULL,0,MODE_LOWER,i+3);
xb[i]=EMPTY_VALUE;xs[i]=EMPTY_VALUE;ps[i]=EMPTY_VALUE;if(TimeDay(Time[i])!=TimeDay
(Time[i+3])){ps[i]=Close[i];}int st=0;while(st<200){if(ps[i+st]!=EMPTY_VALUE)break;
st++;}int vss=0,nss=0;double vmx=0.0,nmx=999999999999.0;int jj=st;while(jj>=3){
if(vr[i+jj]>0){if(vr[i+jj]>vmx)vmx=vr[i+jj];if(vss==0&&nss==0)nmx= Low[i+jj+2];
vss++;}if(nz[i+jj]>0){if(nz[i+jj]<nmx)nmx=nz[i+jj];if(vss==0&&nss==0)vmx=High
[i+jj+2];nss++;}jj--;}if(vss>0&&nss>0&&vss!=nss){if((Close[i+1]>vmx&&Open[i+1]
<=vmx)||(Close[i+1]<nmx&&Open[i+1]>=nmx)||(Close[i+1]>vmx&&Close[i+2]<=vmx)
||(Close[i+1]<nmx&&Close[i+2]>=nmx)){if(vss<nss)xb[i+1]=Close[i+1];if(vss>nss)
xs[i+1]=Close[i+1];}}if(xb[i+1]!=EMPTY_VALUE||xs[i+1]!=EMPTY_VALUE)ps[i+2]
=Close[i+2];hb[i]=EMPTY_VALUE;hs[i]=EMPTY_VALUE;if(TimeDay(Time[i])!=TimeDay
(Time[i+3])){zzb=0;zzs=0;}if(br!=Time[i]){if(xb[i+1]!=EMPTY_VALUE)
{zzs=0;zzb++;hb[i+1]= Low[i+1]-Fractal_Step*Point;}if(xs[i+1]!=EMPTY_VALUE)
{zzb=0;zzs++;hs[i+1]=High[i+1]+Fractal_Step*Point;}br=Time[i];}
vvv[i]=EMPTY_VALUE;vvn[i]=EMPTY_VALUE;nnn[i]=EMPTY_VALUE;nnv[i]=EMPTY_VALUE;
evv[i]=EMPTY_VALUE;evn[i]=EMPTY_VALUE;enn[i]=EMPTY_VALUE;env[i]=EMPTY_VALUE;
double vvf=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Zone_Bar,i+1));
double vnf=iLow (NULL,0,iHighest(NULL,0,MODE_HIGH,Zone_Bar,i+1));
double nnf=iLow (NULL,0,iLowest (NULL,0,MODE_LOW ,Zone_Bar,i+1));
double nvf=iHigh(NULL,0,iLowest (NULL,0,MODE_LOW ,Zone_Bar,i+1));
if(High[i+3]==vvf&&High[i+2]<vvf&&High[i+1]<vvf){vvv[i+1]=vvf;vvn[i+1]
=vnf;nnn[i+1]=EMPTY_VALUE;nnv[i+1]=EMPTY_VALUE;vee=vvv[i+1];nee=0;}
if( Low[i+3]==nnf&& Low[i+2]>nnf&& Low[i+1]>nnf){nnn[i+1]=nnf;nnv[i+1]
=nvf;vvv[i+1]=EMPTY_VALUE;vvn[i+1]=EMPTY_VALUE;nee=nnn[i+1];vee=0;}
if(vvv[i+1]==vvf&&vvn[i+1]==vnf){vvv[i]=vvf;vvn[i]=vnf;}
if(nnn[i+1]==nnf&&nnv[i+1]==nvf){nnn[i]=nnf;nnv[i]=nvf;}
if(vvv[i]==EMPTY_VALUE){vvv[i+1]=EMPTY_VALUE;vvn[i+1]=EMPTY_VALUE;}
if(nnn[i]==EMPTY_VALUE){nnn[i+1]=EMPTY_VALUE;nnv[i+1]=EMPTY_VALUE;}
evv[i]=vvv[i];evv[i+1]=vvv[i+1];evn[i]=vvn[i];evn[i+1]=vvn[i+1];
enn[i]=nnn[i];enn[i+1]=nnn[i+1];env[i]=nnv[i];env[i+1]=nnv[i+1];
bool vb1=false,vs1=false,vb2=false,vs2=false;if(hb[i+1]!=EMPTY_VALUE){ffb=true;ffs=false;}
if(hs[i+1]!=EMPTY_VALUE){ffs=true;ffb=false;}int ri;if(S_1||S_3){bb1[i]=0;ss1[i]=0;if(ffb&&enn
[i+1]!=EMPTY_VALUE&&enn[i+1]!=enn[i+2]){ri=0;while(ri<500){if(bb1[i+1+ri]==1)break;if(hb[i+1+ri]
!=EMPTY_VALUE)break;if(v2[i+ri]!=EMPTY_VALUE&&v2[i+ri]==v1[i+1+ri]&&v2[i+ri]!=v2[i+2+ri]){vb1=true;
bb1[i+1]=1;break;}ri++;}}if(ffs&&evv[i+1]!=EMPTY_VALUE&&evv[i+1]!=evv[i+2]){ri=0;while(ri<500){
if(ss1[i+1+ri]==1)break;if(hs[i+1+ri]!=EMPTY_VALUE)break;if(n2[i+ri]!=EMPTY_VALUE&&n2[i+ri]==n1
[i+1+ri]&&n2[i+ri]!=n2[i+2+ri]){vs1=true;ss1[i+1]=1;break;}ri++;}}}if(S_2||S_3){bb2[i]=0;ss2[i]=0;
if(ffb&&v2[i]!=EMPTY_VALUE&&v2[i]==v1[i+1]&&v2[i]!=v2[i+2]){ri=0;while(ri<500){if(bb2[i+1+ri]==1)
break;if(hb[i+1+ri]!=EMPTY_VALUE)break;if(enn[i+1+ri]!=EMPTY_VALUE&&enn[i+1+ri]!=enn[i+2+ri])
{vb2=true;bb2[i+1]=1;break;}ri++;}}if(ffs&&n2[i]!=EMPTY_VALUE&&n2[i]==n1[i+1]&&n2[i]!=n2[i+2])
{ri=0;while(ri<500){if(ss2[i+1+ri]==1)break;if(hs[i+1+ri]!=EMPTY_VALUE)break;if(evv[i+1+ri]
!=EMPTY_VALUE&&evv[i+1+ri]!=evv[i+2+ri]){vs2=true;ss2[i+1]=1;break;}ri++;}}}if(S_1==false){if(vb1){ri=0;
while(ri<500){if(Bu[i+1+ri]!=EMPTY_VALUE)break;if(hb[i+1+ri]!=EMPTY_VALUE){vb1=false;break;}ri++;}}if(vs1)
{ri=0;while(ri<500){if(Se[i+1+ri]!=EMPTY_VALUE)break;if(hs[i+1+ri]!=EMPTY_VALUE){vs1=false;break;}ri++;}}}
if(S_2==false){  if(vb2){ri=0;while(ri<500){if(Bu[i+1+ri]!=EMPTY_VALUE)break;if(hb[i+1+ri]!=EMPTY_VALUE)
{vb2=false;break;}ri++;}}if(vs2){ri=0;while(ri<500){if(Se[i+1+ri]!=EMPTY_VALUE)break;
if(hs[i+1+ri]!=EMPTY_VALUE){vs2=false;break;}ri++;}}}Bu[i+1]=EMPTY_VALUE;Se[i+1]=EMPTY_VALUE;
if(vb1||vb2)Bu[i+1]= Low[i+1]-Arrow_Step*Point;if(vs1||vs2)Se[i+1]=High[i+1]+Arrow_Step*Point;
Bu[i+is]=EMPTY_VALUE;Se[i+is]=EMPTY_VALUE;v1[i+is]=EMPTY_VALUE;n1[i+is]=EMPTY_VALUE;
v2[i+is]=EMPTY_VALUE;n2[i+is]=EMPTY_VALUE;hb[i+is]=EMPTY_VALUE;hs[i+is]=EMPTY_VALUE;
evv[i+is]=EMPTY_VALUE;evn[i+is]=EMPTY_VALUE;enn[i+is]=EMPTY_VALUE;env[i+is]=EMPTY_VALUE;}
if(Alert_MT4||Alert_Email||Alert_Mobile){if(Time[0]+Period()*60>=TimeCurrent()){
if(Bu[1]!=EMPTY_VALUE&&qb!=Time[0]){string tb=WindowExpertName()+" - "+Symbol()+"  m"+Period()+"  Buy";
if(Alert_MT4)Alert(tb);if(Alert_Email)SendMail("MT4 - ",tb);if(Alert_Mobile)SendNotification(tb);qb=Time[0];}
if(Se[1]!=EMPTY_VALUE&&qs!=Time[0]){string ts=WindowExpertName()+" - "+Symbol()+"  m"+Period()+"  Sell";
if(Alert_MT4)Alert(ts);if(Alert_Email)SendMail("MT4 - ",ts);if(Alert_Mobile)SendNotification(ts);qs=Time[0];}}}
}return(0);}bool N(int v){bool z=false;string b[];int j=StringSplit(Account,StringGetCharacter(" ",0),b);for
(int k=0;k<j;k++){string g=b[k];int s=StringToInteger(StringSubstr(g,0,0));if(v==s)z=true;if(z)break;}return(z);}
//===================================================================================================================