ang_AutoCh_HLK-v1





#property  copyright "ANG3110@latchess.com"
#property indicator_chart_window
//----------------------------------
extern int Hours=12;
extern color col=LightBlue;
extern double K=20;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,sName,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 H0,S0,L0,Hp,Sp,Lp;
int i0,p0;
double HL,khl,HK0,LK0,HKp,LKp;
//*****************************************
int init() {
//-------------------------
p=Hours*60/Period();
if (fs==0) {sName=CurTime(); fs=1;}
return(0);}
//*******************************
int deinit() {
   ObjectDelete("chH"+sName);
   ObjectDelete("chS"+sName);
   ObjectDelete("chL"+sName);
   ObjectDelete("chHK"+sName);
   ObjectDelete("chLK"+sName);  
   ObjectDelete("txtHL"+sName); }
//*******************************
int start() {
//------------------------------------------------------------------------------
if (f0==1) p=iBarShift(Symbol(),Period(),ObjectGet("chS"+sName,OBJPROP_TIME1));
//====================================================
sx=0; sy=0; sxy=0; sx2=0; 
for (int n=i0; n<=i0+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=i0; i<=i0+p; i++) {
lr=bb+aa*i;
dh=High[i]-lr; dl=Low[i]-lr;
//----------------------------------------------------
if (i<i0+p/2) {if (i==i0) {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>=i0+p/2) {if (i==i0+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+aa*i0; lrp=bb+aa*(i0+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=i0; i<=i0+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==i0 || i==i0+p/2) dhm=0.0; 
if (High[i]-hai>dhm && i<i0+p/2) {ai_1=i; f1=1;}
if (High[i]-hai>dhm && i>=i0+p/2) {ai_2=i; f1=1;} }
if (f==0) break;} 
//----------------------------
for (i=i0; i<=i0+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==i0) dlm=0.0; if (dli<dlm) dlm=dli;}   
ha0=High[ai_1]*(i0-ai_2)/(ai_1-ai_2)+High[ai_2]*(i0-ai_1)/(ai_2-ai_1); 
hap=High[ai_1]*(i0+p-ai_2)/(ai_1-ai_2)+High[ai_2]*(i0+p-ai_1)/(ai_2-ai_1);
//----------------------------
Hp=hap;
Sp=hap+dlm/2;
Lp=hap+dlm;

H0=ha0;
S0=ha0+dlm/2;
L0=ha0+dlm;
}
//=================================================
if (f==2) {
for (n=0; n<=20; n++) { f1=0;
for (i=i0; i<=i0+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==i0 || i==i0+p/2) dlm=0.0; 
if (Low[i]-lai<dlm && i<i0+p/2) {bi_1=i; f1=1;}
if (Low[i]-lai<dlm && i>=i0+p/2) {bi_2=i; f1=1;}} 
if (f==0) break;}
//----------------------------
for (i=i0; i<=i0+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==i0) dhm=0.0; if (dhi>dhm) dhm=dhi;}   
la0=Low[bi_1]*(i0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i0-bi_1)/(bi_2-bi_1); 
lap=Low[bi_1]*(i0+p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i0+p-bi_1)/(bi_2-bi_1);
//----------------------------------------------------------------
Lp=lap;
Sp=lap+dhm/2;
Hp=lap+dhm;

L0=la0;
S0=la0+dhm/2;
H0=la0+dhm;
}
//----------------------------------------------------------------
HL=H0-L0;
khl=HL*K/100;

HK0=H0-khl;
LK0=L0+khl;
HKp=Hp-khl;
LKp=Lp+khl;
//===================================================================================
if (f0==1) {
ObjectMove("chH"+sName,0,Time[p],Hp);
ObjectMove("chS"+sName,0,Time[p],Sp);
ObjectMove("chL"+sName,0,Time[p],Lp);
ObjectMove("chHK"+sName,0,Time[p],HKp);
ObjectMove("chLK"+sName,0,Time[p],LKp);

ObjectMove("chH"+sName,1,Time[i0],H0);
ObjectMove("chS"+sName,1,Time[i0],S0);
ObjectMove("chL"+sName,1,Time[i0],L0);
ObjectMove("chHK"+sName,1,Time[i0],HK0);
ObjectMove("chLK"+sName,1,Time[i0],LK0);

if (S0>=Sp) ObjectMove("txtHL"+sName,0,Time[0],L0-0.0003);
if (S0<Sp) ObjectMove("txtHL"+sName,0,Time[0],H0+0.0006);
ObjectSetText("txtHL"+sName," "+DoubleToStr(HL/Point,0),8,"Arial",Lime);
}
//==================================================================
if (f0==0) { f0=1;
ObjectCreate("chH"+sName,2, 0,Time[p],Hp,Time[i0],H0);
ObjectCreate("chS"+sName,2, 0,Time[p],Sp,Time[i0],S0);
ObjectCreate("chL"+sName,2, 0,Time[p],Lp,Time[i0],L0);

ObjectCreate("chHK"+sName,2, 0,Time[p],HKp,Time[i0],HK0);
ObjectCreate("chLK"+sName,2, 0,Time[p],LKp,Time[i0],LK0);
//-----------------------------------------------------------------
ObjectSet("chH"+sName,OBJPROP_COLOR,col);
ObjectSet("chS"+sName,OBJPROP_COLOR,col);
ObjectSet("chS"+sName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet("chL"+sName,OBJPROP_COLOR,col);

ObjectSet("chHK"+sName,OBJPROP_COLOR,col);
ObjectSet("chHK"+sName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet("chLK"+sName,OBJPROP_COLOR,col);
ObjectSet("chLK"+sName,OBJPROP_STYLE,STYLE_DOT);
//-----------------------------------------------------------------
ObjectCreate("txtHL"+sName,OBJ_TEXT,0,Time[0],Close[0]);
}
//*************************************************************************************
return(0);}
//=====================================================================================



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: