### Reducing Indicator-Lag

The usual way to reduce Indicator lag in averaging formulas, such as the MA(), EMA, and Tilson T3(), is to try and dream up a completely new formula. This isn’t easy. It is often easier to remove lag from an already smoothed plot, than to improve the basic smoothing formula.

Indicator Delay is often an essential Indicator quality and (imo) is not the same as Indicator Lag. The ideal smoothing function is one with zero delay, i.e., one that tracks the price with a perfectly smooth-looking plot. Delay can be added later as an independent quality using the ref() function. Some smoothing formulas already have a sensitivity adjustment, these will not necessarily behave in the same manner as the LagReducing factor used below. Optimizing all parameters for best results is recommended.

The Lag-Reducing formula presented here can be applied to most averaging formulas and to indicators that are based on averages (like Bands). The lag reducing parameter (RLFactor) of the Reducelag() function can also be used to make formulas adaptive with respect to another price or Indicator quality. The image below shows how lag has been reduced for the Tilson T3 formula. To see how this formula works Apply the code show below to a new indicator pane, open the Parameter window, and try  different settings.

```function T3( Price, T3Periods, s )
{
e1    = AMA( Price, 2 / ( T3Periods + 1 ) );
e2    = AMA( e1, 2 / ( T3Periods + 1 ) );
e3    = AMA( e2, 2 / ( T3Periods + 1 ) );
e4    = AMA( e3, 2 / ( T3Periods + 1 ) );
e5    = AMA( e4, 2 / ( T3Periods + 1 ) );
e6    = AMA( e5, 2 / ( T3Periods + 1 ) );
C1 = -s ^ 3;
C2 = 3 * s ^ 2 * ( 1 + s );
C3 = -3 * s * ( s + 1 ) ^ 2;
C4 = ( 1 + s ) ^ 3;
T3Result = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3;
return Nz( T3Result );
}

function ReduceLag( Indicator, RLFactor )
{
return ( Indicator / Ref( Indicator, -1 ) ) ^ RLFactor*Indicator;
}

_SECTION_BEGIN( "REDUCING INDICATOR LAG" );
LRFactor         = Param( "Lag-Reducing Factor", 1.7, 0, 10, 0.1 );
Periods         = Param( "T3 Periods", 5, 1, 10, 1 );
Sensitivity        = Param( "T3 Sensitivity 1", 0.7, 0, 3, 0.03 );

I1 = T3( O, Periods, Sensitivity );
I2 = Reducelag( I1, LRFactor );

Plot( C, "Close", 1, 128 );
Plot( I1, "\nBasic T3", 2, 1 );
Plot( I2, "\nLag-Reduced T3", 4, 1 | styleNoRescale );
_SECTION_END();```