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);
pdsN:=
Input
(
"normalizing periods (1=none)"
,1,2520,1);
smooth:=
Input
(
"Sine-weighted smoothing? [1]Yes, [0]No"
,0,1,0);
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
)));
ATRtrue:=
Mov
(TrueRange,pds,
E
);
ATRrev:=
Mov
(RevTrueRange,pds,
E
);
ATRmeta:=
Mov
(TrueRange,pds*2-1,
E
);
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);
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);
If
(plot=3,rATRplot,ATRplot);
ATRplot