-----------------------------------------------------
-FORMULA ONE ----------------------------------------
-----------------------------------------------------
l1:=3;
m1:=1;
l2:=80;
m2:=3;
data:=mp();
mid1:=mov(data,l1,s);
mid2:=mov(data,l2,s);
atr1:=atr(l1);
atr2:=atr(l2);
ul1:=mid1+m1*atr1;
ll1:=mid1-m1*atr1;
ul2:=mid2+m2*atr2;
ll2:=mid2-m2*atr2;
{plot}
ul1;ll1;
ul2;ll2;
-----------------------------------------------------
-FORMULA TWO ----------------------------------------
-----------------------------------------------------
{ Hurst Channels }
CY1:= Input("Short Cycle length",1,1000,10 )/2;
CY2:= Input("Medium Cycle length",1,1000,80 )/2;
M1:= Input("Short Cycle Multiplier",.01,10 ,1 );
M2:= Input("Medium Cycle Multiplier",.01,10,3 );
T1:= Ref(Mov( CLOSE ,CY1 ,TRI ),-CY1/2)+ M1*ATR(CY1 );
B1:= Ref(Mov( CLOSE ,CY1 ,TRI ),-CY1/2)- M1*ATR(CY1 );
T2:= Ref(Mov( CLOSE ,CY2 ,TRI ),-CY2/2)+ M2*ATR(CY2 );
B2:= Ref(Mov( CLOSE ,CY2 ,TRI ),-CY2/2)- M2*ATR(CY2 );
T1;B1;T2;B2;
-----------------------------------------------------
-FORMULA THREE --------------------------------------
-----------------------------------------------------
Hurst Bands
-----------------------------------------------------
pds:= Input("LR Periods",10,100,41);
a:= Input("Stdev Periods",10,100,30);
s1:=Input("Smoothing Periods",2,50,10);
r:=LinearReg(C,pds);
x:=Mov(r,s1,S);
x1 :=x+1*Stdev(C,a);
x2 :=x+2*Stdev(C,a);
x3 :=x+3*Stdev(C,a);
y1:= x-1*Stdev(C,a);
y2:= x-2*Stdev(C,a);
y3:= x-3*Stdev(C,a);
x;
x1;
x2;
x3;
y1;
y2;
y3;
-----------------------------------------------------
-FORMULA FOUR ---------------------------------------
-----------------------------------------------------
[LegacyColorValue = TRUE];
{Hurst_Channel Indicator}
Input: Price1(MedianPrice of Data1);
Input: Length1(10),
ChanWid1(1); {Multiplier for ATR is positive }
{Percent*100 of Current price if Negative}
Input: Price2(MedianPrice of Data1);
Input: Length2(60),
ChanWid2(3);
Input: CompMode(0); {Compute mode for extension}
{0 = CMA shortening }
{>0= 2nd degree polynomial }
Input: StopDate(0);
Vars: ChanHi1(0), ChanLo1(0), WidChan1(Iff(ChanWid1>0,ChanWid1,-ChanWid1*.001)),
Ave1(0), ATR1(0),
SetBack1(IntPortion((Length1-1)/2)+1);
Vars: ChanHi2(0), ChanLo2(0), WidChan2(Iff(ChanWid2>0,ChanWid2,-ChanWid2*.001)),
Ave2(0), ATR2(0),
SetBack2(IntPortion((Length2-1)/2)+1);
Vars: DateStop(iff(stopdate<=0,1211231,StopDate)),Ipass(0);
If Length1>0 and Ipass=0 then begin
Ave1 = Average(Price1,Length1);
If ChanWid1>0
then ATR1 = AvgTrueRange(Length1)
else ATR1 = C;
ChanHi1= Ave1+ATR1*WidChan1;
ChanLo1= Ave1-ATR1*WidChan1;
Plot1[SetBack1](ChanHi1,"HH1");
Plot2[SetBack1](ChanLo1,"HL1");
If LastBarOnChart or Date>=DateStop then Begin
Value5 = (Ave1-Ave1[SetBack1])/SetBack1;
For Value1 = SetBack1-1 downto 0 begin
Value3=0;
Value4=Value1*2;
For Value2=0 to Value4 begin
Value3=Value3+Price1[Value2];
End;
Ave1=Value3/(Value4+1);
If CompMode>0 then Ave1=Ave1*.33+(Ave1[1]+Value5*(SetBack1-Value1))*.67;
ChanHi1= Ave1+ATR1*WidChan1;
ChanLo1= Ave1-ATR1*WidChan1;
Plot1[Value1](ChanHi1,"HH1");
Plot2[Value1](ChanLo1,"HL1");
End;
If Length2=0 then IPass=1;
End;
End;
{Now for second channel}
If Length2>0 and Ipass=0 then begin
Ave2 = Average(Price2,Length2);
If ChanWid2>0
then ATR2 = AvgTrueRange(Length2)
else ATR2 = C;
ChanHi2= Ave2+ATR2*WidChan2;
ChanLo2= Ave2-ATR2*WidChan2;
Plot3[SetBack2](ChanHi2,"HH2");
Plot4[SetBack2](ChanLo2,"HL2");
If LastBarOnChart or Date>=DateStop then Begin
Value5 = (Ave2-Ave2[SetBack2])/SetBack2;
For Value1 = SetBack2-1 downto 0 begin
Value3=0;
Value4=Value1*2;
For Value2=0 to Value4 begin
Value3=Value3+Price2[Value2];
End;
Ave2=Value3/(Value4+1);
If CompMode>0 then Ave2=Ave2*.33+(Ave2[1]+Value5*(SetBack2-Value1))*.67;
ChanHi2= Ave2+ATR2*WidChan2;
ChanLo2= Ave2-ATR2*WidChan2;
Plot3[Value1](ChanHi2,"HH2");
Plot4[Value1](ChanLo2,"HL2");
End;
IPass=1;
End;
End;
-----------------------------------------------------
-FORMULA FIVE ---------------------------------------
-----------------------------------------------------
this is a misnomer, keep reading...
{Hurst_Channel Indicator}
-- these is the user input area where the user gets to set various parameters --
SECTION 1 values
Input: Price1(MedianPrice of Data1);
Input: Length1(10),
ChanWid1(1); {Multiplier for ATR is positive }
{Percent*100 of Current price if Negative}
SECTION 2 values
Input: Price2(MedianPrice of Data1);
Input: Length2(60),
ChanWid2(3);
these apply to both sections
Input: CompMode(0); {Compute mode for extension}
{0 = CMA shortening }
{>0= 2nd degree polynomial }
Input: StopDate(0);
this is the variable declaration area - not required in MS
Vars: ChanHi1(0), ChanLo1(0), WidChan1(Iff(ChanWid1>0,ChanWid1,-ChanWid1*.001)),
Ave1(0), ATR1(0),
SetBack1(IntPortion((Length1-1)/2)+1);
Vars: ChanHi2(0), ChanLo2(0), WidChan2(Iff(ChanWid2>0,ChanWid2,-ChanWid2*.001)),
Ave2(0), ATR2(0),
SetBack2(IntPortion((Length2-1)/2)+1);
Vars: DateStop(iff(stopdate<=0,1211231,StopDate)),Ipass(0);
-- SECTION 1 --
If Length1>0 and Ipass=0 then begin
Ave1 = Average(Price1,Length1);
If ChanWid1>0
then ATR1 = AvgTrueRange(Length1)
else ATR1 = C;
ChanHi1= Ave1+ATR1*WidChan1;
ChanLo1= Ave1-ATR1*WidChan1;
this is a SMA with an ATR channel width, ala Keltner Bands and VERY similar to the results to the code posted years ago in the thread above
Plot1[SetBack1](ChanHi1,"HH1");
Plot2[SetBack1](ChanLo1,"HL1");
this is for forecasting past the last selected date or the last bar
only plots if CompMode>0
If LastBarOnChart or Date>=DateStop then Begin
Value5 = (Ave1-Ave1[SetBack1])/SetBack1;
For Value1 = SetBack1-1 downto 0 begin
Value3=0;
Value4=Value1*2;
For Value2=0 to Value4 begin
Value3=Value3+Price1[Value2];
End;
Ave1=Value3/(Value4+1);
If CompMode>0 then Ave1=Ave1*.33+(Ave1[1]+Value5*(SetBack1-Value1))*.67; this is not a 2nd degree polynomial, it's a form of IIR filter (EMA)
ChanHi1= Ave1+ATR1*WidChan1;
ChanLo1= Ave1-ATR1*WidChan1;
Plot1[Value1](ChanHi1,"HH1");
Plot2[Value1](ChanLo1,"HL1");
End;
If Length2=0 then IPass=1;
End;
End;
-- SECTION 2 --
just a repeat of SECTION 1 to draw a second set of bands, with the second set of user parameters
{Now for second channel}
If Length2>0 and Ipass=0 then begin
Ave2 = Average(Price2,Length2);
If ChanWid2>0
then ATR2 = AvgTrueRange(Length2)
else ATR2 = C;
ChanHi2= Ave2+ATR2*WidChan2;
ChanLo2= Ave2-ATR2*WidChan2;
Plot3[SetBack2](ChanHi2,"HH2");
Plot4[SetBack2](ChanLo2,"HL2");
If LastBarOnChart or Date>=DateStop then Begin
Value5 = (Ave2-Ave2[SetBack2])/SetBack2;
For Value1 = SetBack2-1 downto 0 begin
Value3=0;
Value4=Value1*2;
For Value2=0 to Value4 begin
Value3=Value3+Price2[Value2];
End;
Ave2=Value3/(Value4+1);
If CompMode>0 then Ave2=Ave2*.33+(Ave2[1]+Value5*(SetBack2-Value1))*.67;
ChanHi2= Ave2+ATR2*WidChan2;
ChanLo2= Ave2-ATR2*WidChan2;
Plot3[Value1](ChanHi2,"HH2");
Plot4[Value1](ChanLo2,"HL2");
End;
IPass=1;
End;
End;
-----------------------------------------------------
-----------------------------------------------------
-----------------------------------------------------