T3_MA_Nick
Download scriptThis tool is designed to provide a smoother, more responsive trend-following line on your trading charts. Unlike standard moving averages, which can often be "laggy" (reacting slowly to price changes) or "noisy" (fluctuating too much with minor market vibrations), this script utilizes a sophisticated mathematical layering process to balance precision and speed.
How the Logic Works
The underlying logic operates through a multi-stage calculation process:
1. Sequential Smoothing Layers Instead of calculating a single average of the price, the tool performs a series of sequential calculations. It starts by taking the price data and applying an Exponential Moving Average (EMA). It then takes that result and applies another EMA to it. This process repeats multiple times—essentially layering "averages on top of averages."
2. Reducing Noise and Lag By stacking these layers, the script filters out the minor "jitters" in price action that often trigger false signals. Because it uses an exponential approach rather than a simple linear one, it ensures that more recent price movements carry more weight than older data, allowing the line to stay relevant to current market conditions.
3. The T3 Mathematical Formula The final step involves a specific mathematical weighting system (the "T3" logic). Once the various layers of averages are calculated, the script combines them using a set of coefficients derived from a specific smoothing factor (variable 'a').
This final calculation blends the different layers together to produce a single, fluid line. The goal is to achieve a curve that remains very smooth and stable while still being able to turn quickly when the market trend actually changes.
Summary for Traders
In practical terms, this indicator helps you identify the primary direction of the market with higher clarity. It aims to give you a "cleaner" view of the trend by stripping away minor market noise while remaining sensitive enough to react to significant price shifts faster than many traditional indicators would.
//+------------------------------------------------------------------+
//| T3MA.mq4 |
//| Copyright © 2005, Nick Bilak |
//| http://www.forex-tsd.com/
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Nick Bilak"
#property link "http://www.forex-tsd.com/"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Green
#property indicator_width1 4
extern double a = 0.7;
//---- indicator parameters
extern int Periods=6;
//---- indicator buffers
double e1[];
double e2[];
double e3[];
double e4[];
double e5[];
double e6[];
double e7[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(7);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexDrawBegin(0,Periods);
if(
!SetIndexBuffer(0,e7) &&
!SetIndexBuffer(1,e2) &&
!SetIndexBuffer(2,e3) &&
!SetIndexBuffer(3,e4) &&
!SetIndexBuffer(4,e5) &&
!SetIndexBuffer(5,e6) &&
!SetIndexBuffer(6,e1)
)
Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("T3MA("+Periods+")");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Average of Oscillator |
//+------------------------------------------------------------------+
int start()
{
int i,limit;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- main loop
for(i=limit; i>=0; i--) {
e1[i]=iMA(NULL,0,Periods,0,MODE_EMA,PRICE_CLOSE,i);
}
for(i=limit; i>=0; i--) {
e2[i]=iMAOnArray(e1,0,Periods,0,MODE_EMA,i);
}
for(i=limit; i>=0; i--) {
e3[i]=iMAOnArray(e2,0,Periods,0,MODE_EMA,i);
}
for(i=limit; i>=0; i--) {
e4[i]=iMAOnArray(e3,0,Periods,0,MODE_EMA,i);
}
for(i=limit; i>=0; i--) {
e5[i]=iMAOnArray(e4,0,Periods,0,MODE_EMA,i);
}
//double a=0.8;
double c1=-a*a*a;
double c2=3*a*a+3*a*a*a;
double c3=-6*a*a-3*a-3*a*a*a;
double c4=1+3*a+a*a*a+3*a*a;
//T3MA=c1*e6+c2*e5+c3*e4+c4*e3;
for(i=limit; i>=0; i--) {
e6[i]=iMAOnArray(e5,0,Periods,0,MODE_EMA,i);
e7[i]=c1*e6[i]+c2*e5[i]+c3*e4[i]+c4*e3[i];
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
Comments