{_T3Average
By Bob Fulks, modified by Alex Matulich 4/2003
The T3 Average is essentially a low-pass filter, as are the
traditional moving average and exponential moving average. The T3
Average, however, exhibits a steeper rolloff, resulting in better
filtering of high-frequency noise while better preserving the
low-frequency components of a time series.
This function is an EasyLanguage version of the algorithm described
in the January 1998 issue of TASC, p57, "Smoothing Techniques for
More Accurate Signals" by Tim Tillson. It is translated from
the MetaStock code presented in the article. The function allows
a variable length as input.
The variable b (also called "Hot") is a damping coefficient. The
suggested value of b is 0.7, but this value slightly amplifies
low-frequency components. b=0.5 seems better for having a flat
response at low frequencies. A smaller value of b will result in
too much attenuation of low frequencies.
The Length parameter is divided by two to make the T3 Average's lag
equivalent to the lag of the traditional moving averages. This way
you can use the T3 Average as a drop-in replacement for Average or
xAverage, and get the same lag but better noise filtering.
The variable "b" is substituted for the variable "a" used in the
article since "a" is a reserved word.
}
Inputs: Price(NumericSeries), Length(NumericSimple);
Variables: b(0.5), b2(b*b), b3(b2*b),
e1(Price), e2(Price), e3(Price), e4(Price), e5(Price), e6(Price),
c1(-b3), c2(3*(b2+b3)), c3(-3*(2*b2+b+b3)), c4(1+3*b+b3+3*b2),
N(0), w1(0), w2(0);
N = Length;
if N < 1 then N = 1;
N = 1 + 0.5*(N-1); {makes lag equivalent to Moving Average}
w1 = 2 / (N + 1); w2 = 1 - w1;
e1 = w1*Price + w2*e1;
e2 = w1*e1 + w2*e2;
e3 = w1*e2 + w2*e3;
e4 = w1*e3 + w2*e4;
e5 = w1*e4 + w2*e5;
e6 = w1*e5 + w2*e6;
_T3Average = c1*e6 + c2*e5 + c3*e4 + c4*e3;