0% found this document useful (0 votes)
129 views4 pages

CnakeLnCHs mq4

Once you upload an approved document, you will be able to download the document

Uploaded by

Natanx
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
129 views4 pages

CnakeLnCHs mq4

Once you upload an approved document, you will be able to download the document

Uploaded by

Natanx
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

//+------------+ ?????? ? ??????????? ???????

|
//| | Bookkeeper, 2007, [email protected] |
//+------------+-----------------------------------------------------+
#property copyright ""
#property link ""
//----
#property indicator_chart_window
//+------------------------------------------------------------------+
extern int SR =12;
extern int SRZZ=5;
extern int TCHs=3;
//+------------------------------------------------------------------+
double SA[];
//+------------------------------------------------------------------+
int SSFR[11]={0,0,0,0,0,0,0,0,0,0,0};
//+------------------------------------------------------------------+
double TCH1=0, TS=0;
int MaxBar;
bool First=true;
int prevBars=0;
string GlobName;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void SACalc(int Pos) { int sw, i, w, ww, Shift; double sum;
SA[Pos]=iMA(NULL,0,SR+1,0,MODE_LWMA,PRICE_OPEN,Pos);
for(Shift=Pos+SR+2;Shift>Pos;Shift--) { sum=0.0;sw=0;i=0; w=Shift+SR;
ww=Shift-SR; if(ww<Pos) ww=Pos;
while(w>=Shift) {i++; sum=sum+i*Open[w]; sw=sw+i; w--; }
while(w>=ww) { i--; sum=sum+i*Open[w]; sw=sw+i; w--; }
SA[Shift]=sum/sw; } return; }
//+------------------------------------------------------------------+
void MainCalculation(int Pos) {
if((Bars-Pos)>(SR+1)) SACalc(Pos); else SA[Pos]=0; return; }
//+------------------------------------------------------------------+
void DelObj(string NO) { int N,i; N=ObjectsTotal();
for(i=N;i>=0;i--) { if(ObjectName(i)==NO) ObjectDelete(NO); } return;}
//+------------------------------------------------------------------+
//+ ??? ?????????? ?????? ???????????? ????? ANG3110 +
//+------------------------------------------------------------------+
int DrawTCH(int BarE, int BarB, int Num) { color CHcolor=LightSlateGray;
int p,i,n,f,f1,ai_1,ai_2,bi_1,bi_2;
double lr,lr0,lrp,sx,sy,sxy,sx2,aa,bb,dh,dl,dh_1,dl_1,dh_2,dl_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
string CHName=GlobName+Num,LName;
sx=0; sy=0; sxy=0; sx2=0; p=BarE-BarB;
for (n=0; n<=p; n++) {
sx+=n; sy+=Close[n+BarB]; sxy+=n*Close[n+BarB]; sx2+=MathPow(n,2); }
aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
for (i=0;i<=p;i++) { lr=bb+aa*i;dh=High[i+BarB]-lr;dl=Low[i+BarB]-lr;
if (i<p/2) { if (i==0) {dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;}
if (dh>=dh_1) {dh_1=dh; ai_1=i;} if (dl<=dl_1) {dl_1=dl; bi_1=i;} }
if (i>=p/2) { if (i==p/2) {dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;}
if (dh>=dh_2) {dh_2=dh; ai_2=i;} if (dl<=dl_2) {dl_2=dl; bi_2=i;} } }
lr0=bb; lrp=bb+aa*(i+p);
if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {
if (MathAbs(dh_1-dh_2)<MathAbs(dl_1-dl_2)) f=1;
if (MathAbs(dh_1-dh_2)>=MathAbs(dl_1-dl_2)) f=2; }
if (f==1) { for (n=0; n<=20; n++) { f1=0; for (i=0; i<=p; i++) {
hai=High[ai_1+BarB]*(i-ai_2)/(ai_1-ai_2)+
High[ai_2+BarB]*(i-ai_1)/(ai_2-ai_1);
if (i==0 || i==p/2) dhm=0.0;
if (High[i+BarB]-hai>dhm && i<p/2) {ai_1=i; f1=1;}
if (High[i+BarB]-hai>dhm && i>=p/2) {ai_2=i; f1=1;} } }
for (i=0; i<=p; i++) {
hai=High[ai_1+BarB]*(i-ai_2)/(ai_1-ai_2)+
High[ai_2+BarB]*(i-ai_1)/(ai_2-ai_1);
dli=Low[i+BarB]-hai; if (i==0) dlm=0.0; if (dli<dlm) dlm=dli; }
ha0=High[ai_1+BarB]*(0-ai_2)/(ai_1-ai_2)+
High[ai_2+BarB]*(0-ai_1)/(ai_2-ai_1);
hap=High[ai_1+BarB]*(p-ai_2)/(ai_1-ai_2)+
High[ai_2+BarB]*(p-ai_1)/(ai_2-ai_1);
price_p1=hap; price_p0=hap+dlm/2; price_p2=hap+dlm; price_01=ha0;
price_00=ha0+dlm/2; price_02=ha0+dlm; }
if (f==2) { for (n=0; n<=20; n++) { f1=0; for (i=0; i<=p; i++) {
lai=Low[bi_1+BarB]*(i-bi_2)/(bi_1-bi_2)+
Low[bi_2+BarB]*(i-bi_1)/(bi_2-bi_1);
if (i==0 || i==p/2) dlm=0.0;
if (Low[i+BarB]-lai<dlm && i<p/2) {bi_1=i; f1=1;}
if (Low[i+BarB]-lai<dlm && i>=p/2) {bi_2=i; f1=1;} } }
for (i=0; i<=p; i++) {
lai=Low[bi_1+BarB]*(i-bi_2)/(bi_1-bi_2)+
Low[bi_2+BarB]*(i-bi_1)/(bi_2-bi_1);
dhi=High[i+BarB]-lai; if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi; }
la0=Low[bi_1+BarB]*(0-bi_2)/(bi_1-bi_2)+
Low[bi_2+BarB]*(0-bi_1)/(bi_2-bi_1);
lap=Low[bi_1+BarB]*(p-bi_2)/(bi_1-bi_2)+
Low[bi_2+BarB]*(p-bi_1)/(bi_2-bi_1);
price_p1=lap; price_p0=lap+dhm/2; price_p2=lap+dhm; price_01=la0;
price_00=la0+dhm/2; price_02=la0+dhm; }
LName=CHName+"1"; DelObj(LName);
aa=MathMax(price_p1,price_p2); bb=MathMax(price_01,price_02);
ObjectCreate(LName,OBJ_TREND,0,Time[p+BarB],aa,Time[BarB],bb);
switch(Num) {
case 1:
TCH1=100*(price_01-price_p1)/p/Point;
ObjectSet(LName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(LName,OBJPROP_WIDTH,2);
ObjectSet(LName,OBJPROP_COLOR,CHcolor); break;
case 2:
ObjectSet(LName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(LName,OBJPROP_COLOR,CHcolor); break;
default:
ObjectSet(LName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(LName,OBJPROP_COLOR,LightSlateGray); break; }
LName=CHName+"2"; DelObj(LName);
aa=MathMin(price_p1,price_p2); bb=MathMin(price_01,price_02);
ObjectCreate(LName,OBJ_TREND,0,Time[p+BarB],aa,Time[BarB],bb);
switch(Num) {
case 1:
ObjectSet(LName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(LName,OBJPROP_WIDTH,2);
ObjectSet(LName,OBJPROP_COLOR,CHcolor); break;
case 2:
ObjectSet(LName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(LName,OBJPROP_COLOR,CHcolor); break;
default:
ObjectSet(LName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(LName,OBJPROP_COLOR,LightSlateGray); break; }
if(Num==1) {
LName=CHName+"01"; DelObj(LName);
aa=price_p1*0.618+price_p2*0.382; bb=price_01*0.618+price_02*0.382;
ObjectCreate(LName,OBJ_TREND,0,Time[p+BarB],aa,Time[BarB],bb);
ObjectSet(LName,OBJPROP_COLOR,CHcolor);
ObjectSet(LName,OBJPROP_STYLE,STYLE_DOT);
LName=CHName+"02"; DelObj(LName);
aa=price_p1*0.382+price_p2*0.618; bb=price_01*0.382+price_02*0.618;
ObjectCreate(LName,OBJ_TREND,0,Time[p+BarB],aa,Time[BarB],bb);
ObjectSet(LName,OBJPROP_COLOR,CHcolor);
ObjectSet(LName,OBJPROP_STYLE,STYLE_DOT);
LName=CHName+"011"; DelObj(LName);
if(price_p1>price_01) {
aa=MathMax(price_p1,price_p2)*0.764+MathMin(price_p1,price_p2)*0.236;
bb=MathMax(price_01,price_02)*0.764+MathMin(price_01,price_02)*0.236; }
else {
aa=MathMin(price_p1,price_p2)*0.764+MathMax(price_p1,price_p2)*0.236;
bb=MathMin(price_01,price_02)*0.764+MathMax(price_01,price_02)*0.236; }
ObjectCreate(LName,OBJ_TREND,0,Time[p+BarB],aa,Time[BarB],bb);
ObjectSet(LName,OBJPROP_COLOR,CHcolor);
ObjectSet(LName,OBJPROP_STYLE,STYLE_DOT); } return(0); }
//+------------------------------------------------------------------+
void SSCalc(int Pos) { int i,RBar,LBar,ZZ,NZZ,NZig,NZag;
i=Pos-1; NZig=0; NZag=0; SSFR[0]=0;
while(i<MaxBar && ZZ==0) { i++; RBar=i-SRZZ; if(RBar<Pos) RBar=Pos;
LBar=i+SRZZ;
if(i==ArrayMinimum(SA,LBar-RBar+1,RBar)) { ZZ=-1; NZig=i; }
if(i==ArrayMaximum(SA,LBar-RBar+1,RBar)) { ZZ=1;NZag=i; } }
if(ZZ==0) return; NZZ=0; if(i>Pos) { if(SA[i]>SA[Pos]) { if(ZZ==1) {
if(i>=Pos+SRZZ && NZZ<(TCHs+2)) { NZZ++; SSFR[NZZ]=i; } NZag=i; } }
else { if(ZZ==-1) {
if(i>=Pos+SRZZ && NZZ<(TCHs+2)) { NZZ++; SSFR[NZZ]=i; } NZig=i; } } }
while(NZZ<(TCHs+2)) { RBar=i-SRZZ; if(RBar<Pos) RBar=Pos; LBar=i+SRZZ;
if(i==ArrayMinimum(SA,LBar-RBar+1,RBar)) {
if(ZZ==-1 && SA[i]<SA[NZig]) {
if(i>=Pos+SRZZ && NZZ<(TCHs+2)) SSFR[NZZ]=i; NZig=i; }
if(ZZ==1) { if(i>=Pos+SRZZ && NZZ<(TCHs+2)) { NZZ++; SSFR[NZZ]=i; }
ZZ=-1; NZig=i; } } if(i==ArrayMaximum(SA,LBar-RBar+1,RBar)) {
if(ZZ==1 && SA[i]>SA[NZag]) {
if(i>=Pos+SRZZ && NZZ<(TCHs+2)) SSFR[NZZ]=i; NZag=i; }
if(ZZ==-1) { if(i>=Pos+SRZZ && NZZ<(TCHs+2)) { NZZ++; SSFR[NZZ]=i; }
ZZ=1; NZag=i; } } i++; if(i>=MaxBar) return; } return; }
//+------------------------------------------------------------------+
int init() { IndicatorBuffers(1);
SetIndexBuffer(0,SA); SetIndexStyle(0,DRAW_NONE);
GlobName="CHs_"+Symbol()+"_"+Period()+"_"; return(0); }
//+------------------------------------------------------------------+
void deinit() { int N,i; string SStr,NO;
Comment(""); N=ObjectsTotal(); for(i=N;i>=0;i--) {
NO=ObjectName(i); SStr=StringSubstr(NO,0,StringLen(GlobName));
if(SStr==GlobName) ObjectDelete(NO); } return; }
//+------------------------------------------------------------------+
void start() { int counted_bars=IndicatorCounted(); int i,j;
if(First==true) { if(Bars<=2*(SRZZ+SR+2)) return(-1); if(SR<2) SR=2;
if(TCHs>9) TCHs=9; if(TCHs<2) TCHs=2;
if(SRZZ<=SR) SRZZ=SR+1; MaxBar=Bars-(SRZZ+SR+2); First=false; }
if(prevBars!=Bars) { if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--; j=Bars-counted_bars;
for(i=j;i>=0;i--) MainCalculation(i); SSCalc(0);
for(i=1;i<=TCHs;i++) DrawTCH(SSFR[i]+1,SSFR[i-1],i); prevBars=Bars; }
return; }
//+------------------------------------------------------------------+

You might also like