**T3Avg.efs** EFSLibrary - Discussion Board

**File Name: **T3Avg.efs

**Description: **

T3 Average

**Formula Parameters: **

Length: 5

Price Data To Use: Close

**Notes: **

This indicator plots the moving average described in the January, 1998 issue

of S&C, p.57, "Smoothing Techniques for More Accurate Signals", by Tim Tillson.

This indicator plots T3 moving average presented in Figure 4 in the article.

T3 indicator is a moving average which is calculated according to formula:

T3(n) = GD(GD(GD(n))),

where GD - generalized DEMA (Double EMA) and calculating according to this:

GD(n,v) = EMA(n) * (1+v)-EMA(EMA(n)) * v,

where "v" is volume factor, which determines how hot the moving averageRs response

to linear trends will be. The author advises to use v=0.7.

When v = 0, GD = EMA, and when v = 1, GD = DEMA. In between, GD is a less aggressive

version of DEMA. By using a value for v less than1, trader cure the multiple DEMA

overshoot problem but at the cost of accepting some additional phase delay.

In filter theory terminology, T3 is a six-pole nonlinear Kalman filter. Kalman

filters are ones that use the error W in this case, (time series - EMA(n)) W

to correct themselves. In the realm of technical analysis, these are called adaptive

moving averages; they track the time series more aggres-sively when it is making large

moves. Tim Tillson is a software project manager at Hewlett-Packard, with degrees in

mathematics and computer science. He has privately traded options and equities for 15 years.

**Download File: **

T3Avg.efs**EFS Code: **

/*********************************Provided By: eSignal (Copyright c eSignal), a division of Interactive Data Corporation. 2008. All rights reserved. This sample eSignal Formula Script (EFS) is for educational purposes only and may be modified and saved under a new file name. eSignal is not responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: T3 Average Version: 1.0 09/24/2008Notes: This indicator plots the moving average described in the January, 1998 issue of S&C, p.57, "Smoothing Techniques for More Accurate Signals", by Tim Tillson. This indicator plots T3 moving average presented in Figure 4 in the article. T3 indicator is a moving average which is calculated according to formula: T3(n) = GD(GD(GD(n))), where GD - generalized DEMA (Double EMA) and calculating according to this: GD(n,v) = EMA(n) * (1+v)-EMA(EMA(n)) * v, where "v" is volume factor, which determines how hot the moving averageRs response to linear trends will be. The author advises to use v=0.7. When v = 0, GD = EMA, and when v = 1, GD = DEMA. In between, GD is a less aggressive version of DEMA. By using a value for v less than1, trader cure the multiple DEMA overshoot problem but at the cost of accepting some additional phase delay. In filter theory terminology, T3 is a six-pole nonlinear Kalman filter. Kalman filters are ones that use the error W in this case, (time series - EMA(n)) W to correct themselves. In the realm of technical analysis, these are called adaptive moving averages; they track the time series more aggres-sively when it is making large moves. Tim Tillson is a software project manager at Hewlett-Packard, with degrees in mathematics and computer science. He has privately traded options and equities for 15 years. Formula Parameters: Default: Length 5 Price Data To Use Close**********************************/ var fpArray = new Array(); var bInit = false; function preMain() { setPriceStudy(true); setStudyTitle("T3"); setCursorLabelName("Slope", 0); setDefaultBarFgColor(Color.blue, 0); var x = 0; fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with (fpArray[x++]) { setLowerLimit(1); setDefault(5); } fpArray[x] = new FunctionParameter("Price", FunctionParameter.STRING); with (fpArray[x++]) { setName("Price Data To Use"); addOption("open"); addOption("high"); addOption("low"); addOption("close"); addOption("hl2"); addOption("hlc3"); addOption("ohlc4"); setDefault("close"); } } var xe1 = null; var xe2 = null; var xe3 = null; var xe4 = null; var xe5 = null; var xe6 = null; var xMyPrice = null; var nT3Average = 0; function main(Price, Length) { var nState = getBarState(); if (nState == BARSTATE_ALLBARS) { if (Price == null) Price = "close"; if (Length == null) Length = 5; } if (bInit == false) { xMyPrice = eval(Price)(); xe1 = ema(Length, xMyPrice); xe2 = ema(Length, xe1); xe3 = ema(Length, xe2); xe4 = ema(Length, xe3); xe5 = ema(Length, xe4); xe6 = ema(Length, xe5); bInit = true; } if ( xe1.getValue(0) == null || xe2.getValue(0) == null || xe3.getValue(0) == null || xe4.getValue(0) == null || xe5.getValue(0) == null || xe6.getValue(0) == null ) return; var b = 0.7; var c1 = -b * b * b; var c2 = 3 * b * b + 3 * b * b * b; var c3 = -6 * b * b - 3 * b - 3 * b * b * b; var c4 = 1 + 3 * b + b * b * b + 3 * b * b; nT3Average = c1 * xe6.getValue(0) + c2 * xe5.getValue(0) + c3 * xe4.getValue(0) + c4 * xe3.getValue(0); return nT3Average; }