PureBytes Links
Trading Reference Links
|
Here's what I come up with. It doesn't work, and I've run into this
issue when trying to solve some other problems.
Does anyone have any ideas for circumventing the problem of putting
a variable into the "periods" part of the HHV or LLV functions?
This gives an error when you try to put the code below into Metastock
(in blue):
--------------------------------------------------------------------------------------------------
{-- © 2K Tushar Chande; Adaptive Stochastic Oscillator --}
vars: v1(0), v2(0), v3(0),
v4(0) ;
vars: lenmax(28), lenmin(7),
currlen(0) ;
vars: hh(0), ll(0), stoch(0),
stochma(0) ;
lenmax:= 28;
lenmin:= 7;
currlen:= 0;
{-- Calculate 20-day std. Dev. And its 20-day range --}
v1 = stddev(c,20) ;
v2 = highest(v1, 20) ;
v3 = lowest(v1, 20) ;
v1:= Stdev(Close, 20);
v2:= HHV(v1,20);
v3:= LLV(v1,20);
{-- Create v4: stochastic oscillator for 20-day std. dev. --}
{-- if v1=v2 (highest level) => v4 = 1; if v1=v3 (lowest level) =>
v4=0 --}
if (v2-v3) > 0 then v4 =
((v1 - v3)/(v2-v3)) Else v4 = 0 ;
v4:=If((v2-v3)>0,((v1 - v3)/(v2-v3)),0);
{-- Calculate current effective length; if v4 = 1, then length = mininum
--}
currlen = IntPortion(lenmin
+ (lenmax-lenmin)*(1-v4)) ;
currlen:= If(v4=1,lenmin,(Int(lenmin + (lenmax-lenmin)*(1-v4))));
{-- Calculate stochastic oscillator and its 3-day exponential average
--}
hh = highest(h, currlen)
;
ll = lowest(l, currlen)
;
if (hh-ll) > 0 then stoch
= ((close - ll)/(hh - ll)) * 100 ;
if currentbar = 1 then stochma
= 0 else
stochma = 0.5*stoch + 0.5*stochma[1] ;
hh:= HHV(High, currlen);
ll:= LLV(Low, currlen);
stoch:=If(((hh-ll)>0,((close - ll)/(hh - ll))
* 100,50) {I set the error condition to a
stochastic midpoint...I'm open to any other ideas???}
stochma:= (.5*stoch)+(.5*Ref(stoch,-1))
{-- Plot data --}
plot1(stoch, "adapt_stoch")
;
plot2(stochma, "stochma")
;
plot3(80, "hi_ref") ;
plot4(20, "lo_ref") ;
stoch; stochma; 80; 20;
{ -- End of code --}
----------------------------------
Dave Nadeau
|