|
//+------------------------------------------------------------------+ //| qsx-2.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property indicator_chart_window extern int Hours=24; extern color col=SkyBlue; double lr,lr0,lrp; double sx,sy,sxy,sx2,aa,bb; int p,fs; int f,f0,f1; double dh,dl,dh_1,dl_1,dh_2,dl_2; int ai_1,ai_2,bi_1,bi_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; int p1,p0,p2,fp; string sName="ang_autoch_hl"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { ObjectDelete("1"+sName); ObjectDelete("0"+sName); ObjectDelete("2"+sName); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if (f==1) { p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1)); p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1)); p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1)); if (fp==0 && p!=p1) { p=p1; fp=1; } if (fp==0 && p!=p0) { p=p0; fp=1; } if (fp==0 && p!=p2) { p=p2; fp=1; } } sx=0; sy=0; sxy=0; sx2=0; for (int n=0; n<=p; n++) { sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2); } aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1); for (int i=0; i<=p; i++) { lr=bb+aa*i; dh=High[i]-lr; dl=Low[i]-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]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1); if (i==0 || i==p/2) dhm=0.0; if (High[i]-hai>dhm && i<p/2) {ai_1=i; f1=1;} if (High[i]-hai>dhm && i>=p/2) {ai_2=i; f1=1;} } if (f==0) break;} //---------------------------- for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1); dli=Low[i]-hai; if (i==0) dlm=0.0; if (dli<dlm) dlm=dli;} ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1); hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(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]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1); if (i==0 || i==p/2) dlm=0.0; if (Low[i]-lai<dlm && i<p/2) {bi_1=i; f1=1;} if (Low[i]-lai<dlm && i>=p/2) {bi_2=i; f1=1;}} if (f==0) break;} //---------------------------- for (i=0; i<=p; i++) {lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1); dhi=High[i]-lai; if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi;} la0=Low[bi_1]*(0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(0-bi_1)/(bi_2-bi_1); lap=Low[bi_1]*(p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(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; } ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01); ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00); ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02); ObjectSet("1"+sName,OBJPROP_COLOR,col); ObjectSet("0"+sName,OBJPROP_COLOR,col); ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT); ObjectSet("2"+sName,OBJPROP_COLOR,col); //--------------------------------------------- ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]); ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1); ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]); ObjectSet("1"+sName,OBJPROP_PRICE2,price_01); ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]); ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0); ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]); ObjectSet("0"+sName,OBJPROP_PRICE2,price_00); ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]); ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2); ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]); ObjectSet("2"+sName,OBJPROP_PRICE2,price_02); f=1; p1=p; p0=p; p2=p; fp=0; return(0); } //+------------------------------------------------------------------+ |
指标发布