Rank: Advanced Member
Groups: Registered, Registered Users Joined: 1/19/2005(UTC) Posts: 1,065 Location: Koh Pha-Ngan, Earth
Was thanked: 2 time(s) in 2 post(s)
|
Check out some of this code - it may be of some help:
MetaStock -> Tools -> Indicator Builder -> New
-> Copy and paste formulae below.
[code:1:673a3c8834]
======================================
Linear Regression Trendline & Channels
======================================
---8<---------------------------------
{ Linear Regression Trendline & Channels v4.0 }
{ ©Copyright 2004-2005 Jose Silva }
{ For personal use only }
{ http://www.metastocktools.com }
{ User Inputs }
pds:=Input("Linear Regression Trendline periods",2,2520,63);
multi:=Input("Standard Deviations(+) / Errors(-)",-100,100,2);
EnDay:=Input("end Day",1,31,31);
EnMnth:=Input("end Month",1,12,12);
EnYear:=Input("end Year",1800,2200,2010);
x:=Input("use: Open=1 Hi=2 Lo=3 Close=4 WghtCl=5 Volume=6",1,6,4);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,V,C)))));
{ End date point }
end:=Year()>EnYear
OR (Year()=EnYear AND (Month()>EnMnth
OR Month()=EnMnth AND DayOfMonth()>=EnDay));
end:=end AND Alert(end=0,2);
end:=If(LastValue(Cum(Ref(end,pds)))=0,
LastValue(Cum(1))=Cum(1),end);
{ Linear Regression Trend/Slope end-points }
lastValLRI:=LastValue(Highest(
If(end,LinearReg(x,pds),0)));
lastValLRS:=LastValue(Highest(
If(end,LinRegSlope(x,pds),-10000)));
adjust:=LastValue(LastValue(Cum(1))
-Highest(If(end,Cum(1),0)));
countback:=LastValue(Cum(1))-Cum(1)-adjust;
{ Rem next line to extend plot to end of chart }
countback:=Ref(Ref(countback,-adjust),adjust);
{ Lin Reg Trendline }
LR:=lastValLRI-lastValLRS*countback;
restrict:=adjust-(LastValue(Cum(1))-pds);
LRT:=Ref(Ref(LR,-restrict),restrict);
{ Lin Reg StdDev/StdError channels }
bandType:=If(multi>=0,Stdev(x,pds),STE(x,pds));
diff:=ValueWhen(1,Cum(IsDefined(LRT))=1,
bandType*Abs(multi));
upLR:=LRT+diff;
lwLR:=LRT-diff;
{ Plot on price chart }
upLR;lwLR;LRT
---8<---------------------------------
===================================
Linear Regression Trendline & Bands
===================================
---8<------------------------------
{ Linear Regression Trendline & Bands v4.0 }
{ ©Copyright 2004-2005 Jose Silva }
{ For personal use only }
{ http://www.metastocktools.com }
{ User Inputs }
pds:=Input("Linear Regression Trendline periods",2,2520,63);
multi:=Input("Standard Deviations(+) / Errors(-)",-100,100,2);
EnDay:=Input("end Day",1,31,31);
EnMnth:=Input("end Month",1,12,12);
EnYear:=Input("end Year",1800,2200,2010);
x:=Input("use: Open=1 Hi=2 Lo=3 Close=4 WghtCl=5 Volume=6",1,6,4);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,V,C)))));
{ End date point }
end:=Year()>EnYear
OR (Year()=EnYear AND (Month()>EnMnth
OR Month()=EnMnth AND DayOfMonth()>=EnDay));
end:=end AND Alert(end=0,2);
end:=If(LastValue(Cum(Ref(end,pds)))=0,
LastValue(Cum(1))=Cum(1),end);
{ Linear Regression Trend/Slope end-points }
lastValLRI:=LastValue(Highest(
If(end,LinearReg(x,pds),0)));
lastValLRS:=LastValue(Highest(
If(end,LinRegSlope(x,pds),-10000)));
adjust:=LastValue(LastValue(Cum(1))
-Highest(If(end,Cum(1),0)));
countback:=LastValue(Cum(1))-Cum(1)-adjust;
{ Rem next line to extend plot to end of chart }
countback:=Ref(Ref(countback,-adjust),adjust);
{ Lin Reg Trendline }
LR:=lastValLRI-lastValLRS*countback;
restrict:=adjust-(LastValue(Cum(1))-pds);
LRT:=Ref(Ref(LR,-restrict),restrict);
{ Lin Reg StdDev/StdError bands }
bandType:=If(multi>=0,Stdev(x,pds),STE(x,pds));
upLR:=LRT+bandType*Abs(multi);
lwLR:=LRT-bandType*Abs(multi);
{ Plot on price chart }
upLR;lwLR;LRT
---8<------------------------------
[/code:1:673a3c8834]
jose '-)
http://www.metastocktools.com
|