PureBytes Links
Trading Reference Links
|
John,
This version of ATR has both normalizing (i.e. converts output into an
oscillator) and sine-weighted smoothing functions.
Also note some possibly interesting relationships between normal &
reverse ATRs (option 3).
jose '-)
====================
ATR - True & Reverse
====================
---8<--------------------------------
{ True, Reverse & MetaStock ATR v3.0 }
{ ©Copyright 2004 Jose Silva }
{ josesilva22@xxxxxxxxx }
{ Reverse True Range is the the *smallest*
of the following for each period:
* The distance from today's High
to today's Low;
* The distance from yesterday's Close
to today's High;
* The distance from yesterday's Close
to today's Low.}
{ user input }
plot:=Input("[1]True ATR, [2]Reverse ATR, [3]Both, [4]MS-ATR",1,4,
1);
pds:=Input("Average True Range periods",
1,252,10);
smooth:=Input("Sine-weighted smoothing? [1]Yes, [0]No",0,1,0);
pdsN:=Input("normalizing periods (1=none)",
1,2520,1);
{ define True Range }
x1:=ValueWhen(2,1,C);
TrueRange:=Max(H-L,Max(Abs(x1-H),Abs(x1-L)));
RevTrueRange:=Min(H-L,Min(Abs(x1-H),Abs(x1-L)));
{ average True Range }
ATRtrue:=Mov(TrueRange,pds,E);
ATRrev:=Mov(RevTrueRange,pds,E);
ATRmeta:=Mov(TrueRange,pds*2-1,E);
{ normalize ATR }
ATRraw:=If(plot=1,ATRtrue,If(plot=2,ATRrev,
If(plot=4,ATRmeta,ATRtrue)));
ATRnorm:=100*(ATRraw-LLV(ATRraw,pdsN))
/(HHV(ATRraw,pdsN)-LLV(ATRraw,pdsN)+.000001);
ATRplot:=If(pdsN<2,ATRraw,ATRnorm);
rATRnorm:=100*(ATRrev-LLV(ATRrev,pdsN))
/(HHV(ATRrev,pdsN)-LLV(ATRrev,pdsN)+.000001);
rATRplot:=If(pdsN<2,RevTrueRange,rATRnorm);
{ optional sine-weighted smoothing }
ATRplot:=If(smooth=1,(Sin(30)*ATRplot
+Sin(60)*Ref(ATRplot,-1)
+Sin(90)*Ref(ATRplot,-2)
+Sin(60)*Ref(ATRplot,-3)
+Sin(30)*Ref(ATRplot,-4))
/(Sin(30)*2+Sin(60)*2+Sin(90)),ATRplot);
rATRplot:=If(smooth=1,(Sin(30)*rATRplot
+Sin(60)*Ref(rATRplot,-1)
+Sin(90)*Ref(rATRplot,-2)
+Sin(60)*Ref(rATRplot,-3)
+Sin(30)*Ref(rATRplot,-4))
/(Sin(30)*2+Sin(60)*2+Sin(90)),rATRplot);
{ plot ATR }
If(plot=3,rATRplot,ATRplot);
ATRplot
---8<--------------------------------
--- In Metastockusers@xxxxxxxxxxxxxxx, "John Doe" <ms001122@xxxx>
wrote:
> Jose and others,
>
> Keeping aside the point how MS calculates ATR, the fact is that ATR
is an
> extremely volatile indicator - its value (over, say, 20 bars) can
range from
> a low of zero (theoretically) to several times what its average
value for
> that period might be. e.g. a 20-bar ATR, as calculated by MS, may be
1.5 and
> the ATR(1) range over those 20bars might be 0.2 - 5.8!!! Clearly,
some form
> of averaging needs to be used to come up with a workable number -
one can
> use simple, exponential, weighted, etc. - the latter two will make
it more
> sensitive to recent values.
>
> When a stock is not trending steeply, one can use any form of
averaging -
> their value will tend to be clustered closely. However, when a stock
is in a
> steep rise or decline, the simple avarage will underestimate the
"true" ATR
> in an uptrend and overestimate it in a downtrend. Lest one think
that one
> should therefore use Wtd or Expo averages, it should be noted that a
large
> ATR value for the last bar will unduly influence them. One can see
the
> results visually by plotting the ATR values in a chart - just
calculate and
> plot the 20bar simple, expo, and wtd ATRs and one can appreciate
their
> clustering in a nontrending stock and the generally more volatile
nature of
> Expo & Wtd ATRs.
>
> I have struggled with the problem of getting a "reasonable" value
for the
> 20-period ATR for quite some time now, in the process concocting
some
> (strange) formulas that would "dampen" the fluctuations in its
value. My
> current thinking is that I should be using Standard Deviation of the
> 20-period mean (simple average) in some fashion. Since I don't have
a PhD in
> mathematics, I have been stuck.
>
> Can you think of a formula to implement std dev (or some other
mathematical
> function) to calculate the 20-period ATR, and in the process weeding
out the
> "outlying values" (both high and low)? Any help will be appreciated.
>
> JD
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/Metastockusers/
<*> To unsubscribe from this group, send an email to:
Metastockusers-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|