T3MA_002
Download scriptThis tool is designed to provide a smoother and more responsive trend analysis for market charts. While standard moving averages can sometimes be "choppy" or react too slowly to sudden price shifts, this script utilizes a sophisticated multi-layered smoothing technique known as the T3 Moving Average.
How It Works
The logic behind this indicator follows a "layering" process. Instead of simply averaging the price once, the script takes the data and runs it through several consecutive rounds of calculations:
- Primary Smoothing: The script first calculates an initial Exponential Moving Average (EMA) based on the closing prices over a user-defined period.
- Recursive Layering: It then takes that first average and calculates another average on top of it. This process is repeated several times in succession. By doing this, the tool "filters" out the minor price fluctuations (noise), leaving behind a clearer view of the overall trend.
- Weighted Calculation: In the final stage, rather than just showing one of these layers, the script combines multiple previous layers using specific mathematical weights. These weights are designed to balance two competing needs:
- Stability: Ensuring the line doesn't jump around erratically with every small price movement.
- Responsiveness: Ensuring the line turns quickly enough to alert you when a real trend change is occurring.
The Result for Traders
By layering the averages in this specific way, the indicator produces a curve that is significantly smoother than a standard moving average but remains much more "tight" to the price action. For a visitor looking at the chart, this means it helps identify the core direction of the market with reduced lag, making it easier to visualize whether the current momentum is bullish, bearish, or neutral.
//+------------------------------------------------------------------+
//| 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 Aqua
//---- indicator parameters
extern int Periods=12;
//---- 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-Periods-1-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