T3 ALPHA_v1
Download scriptThe T3 ALPHA is a sophisticated technical analysis tool designed to provide a smoothed view of price action on a financial chart. Unlike standard moving averages that can often suffer from significant "lag" (delaying the signal) or "noise" (reacting too wildly to small, insignificant price movements), this script uses a multi-layered mathematical approach to balance responsiveness with stability.
Core Logic and Methodology
1. Multi-Layered Smoothing (The T3 Foundation) The script is built upon the logic of the "T3" moving average, which utilizes an iterated smoothing process. Instead of simply averaging the last few days of price data once, it passes the data through multiple successive calculations. Think of this like a series of filters: each layer catches more of the "noise," resulting in a line that follows the core trend more smoothly than a traditional average would.
2. Weighted Calculations The indicator uses a specific weight factor (adjustable via settings) to determine how much importance is placed on current price data versus historical data. By applying these weights across six different layers, the script creates a refined output that seeks to stay as close to the "true" price movement as possible while ignoring temporary market fluctuations.
3. Dynamic Period Management The tool allows for six distinct periods of calculation. These are not treated equally; the script adjusts these values dynamically during the initialization phase. This ensures that whether you are looking at short-term volatility or long-term trends, the math scales correctly to provide a consistent visual experience.
Visual Output and Interpretation
The script generates six different visual elements on a separate window below your main price chart:
- Trend Lines: These provide the primary visual path of the asset's momentum. They allow traders to see the "flow" of the market clearly, helping to identify when a trend is gaining strength or beginning to weaken.
- Histogram Bars: These represent specific segments of the multi-layered calculation. By visualizing these as bars rather than lines, they provide a clearer picture of the momentum's velocity. They help in identifying the intensity of a move—showing not just which direction the price is going, but how aggressively it is moving in that direction.
Summary for the User
In essence, the T3 ALPHA acts as a high-fidelity filter for market data. It strips away the "jitter" of the market to reveal the underlying trend. By utilizing six layers of weighted smoothing, it offers a professional-grade visual aid that helps traders distinguish between temporary price spikes and meaningful directional shifts.
//+------------------------------------------------------------------+
//| T3 ALPHA.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 6
//----
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Magenta
#property indicator_color4 Aqua
#property indicator_color5 Green
#property indicator_color6 Blue
//----
extern int MA_Period_1=3;
extern int MA_Period_2=5;
extern int MA_Period_3=0; //8
extern int MA_Period_4=0; //12
extern int MA_Period_5=21;
extern int MA_Period_6=34;
//----
extern double b=0.7;
//----
double MapBuffer1[];
double MapBuffer2[];
double MapBuffer3[];
double MapBuffer4[];
double MapBuffer5[];
double MapBuffer6[];
//----
double e1[][7], e2[][7], e3[][7], e4[][7], e5[][7], e6[][7];
double c1[7], c2[7], c3[7], c4[7];
double n[7], w1[7], w2[7], b2[7], b3[7];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators setting
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1, Yellow);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1, Red);
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 1, Magenta);
SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 0, Aqua);
SetIndexStyle(4, DRAW_HISTOGRAM, STYLE_SOLID, 0, Green);
SetIndexStyle(5, DRAW_LINE, STYLE_SOLID, 1, Blue);
IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
IndicatorShortName("T3 ALPHA");
SetIndexDrawBegin(0, 100);
SetIndexDrawBegin(1, 100);
SetIndexDrawBegin(2, 100);
SetIndexDrawBegin(3, 100);
SetIndexDrawBegin(4, 100);
SetIndexDrawBegin(5, 100);
SetIndexBuffer(0, MapBuffer1);
SetIndexBuffer(1, MapBuffer2);
SetIndexBuffer(2, MapBuffer3);
SetIndexBuffer(3, MapBuffer4);
SetIndexBuffer(4, MapBuffer5);
SetIndexBuffer(5, MapBuffer6);
//---- variable reset
n[1]=MA_Period_1;
n[2]=MA_Period_2;
n[3]=MA_Period_3;
n[4]=MA_Period_4;
n[5]=MA_Period_5;
n[6]=MA_Period_6;
//----
for(int l=1; l < 7; l++)
{
//e2[l]=0; e3[l]=0; e4[l]=0; e5[l]=0; e6[l]=0;
c1[l]=0; c2[l]=0; c3[l]=0; c4[l]=0;
w1[l]=0; w2[l]=0;
b2[l]=0; b3[l]=0;
//----
b2[l]=b*b;
b3[l]=b2[l]*b;
c1[l]=-b3[l];
c2[l]=(3*(b2[l] + b3[l]));
c3[l]=-3*(2*b2[l] + b + b3[l]);
c4[l] =(1 + 3*b + b3[l] + 3*b2[l]);
//----
if(n[l] < 1)
n[l]=1;
n[l]=1 + 0.5*(n[l] - 1);
w1[l]=2/(n[l] + 1);
w2[l]=1 - w1[l];
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, MB[], ii, i;
int counted_bars=IndicatorCounted();
//----
if(counted_bars < 0)
return(-1);
if(counted_bars > 0)
counted_bars--;
limit=(Bars - counted_bars) - 1;
//---- indicator calculation
ArrayResize(e1, Bars + 1);
ArrayResize(e2, Bars + 1);
ArrayResize(e3, Bars + 1);
ArrayResize(e4, Bars + 1);
ArrayResize(e5, Bars + 1);
ArrayResize(e6, Bars + 1);
//----
for(i=limit; i>=0; i--)
{
for(ii=1; ii < 7; ii++)
{
e1[Bars-i][ii]=w1[ii]*Close[i] + w2[ii]*e1[(Bars-i)-1][ii];
e2[Bars-i][ii]=w1[ii]*e1[Bars-i][ii] + w2[ii]*e2[(Bars-i)-1][ii];
e3[Bars-i][ii]=w1[ii]*e2[Bars-i][ii] + w2[ii]*e3[(Bars-i)-1][ii];
e4[Bars-i][ii]=w1[ii]*e3[Bars-i][ii] + w2[ii]*e4[(Bars-i)-1][ii];
e5[Bars-i][ii]=w1[ii]*e4[Bars-i][ii] + w2[ii]*e5[(Bars-i)-1][ii];
e6[Bars-i][ii]=w1[ii]*e5[Bars-i][ii] + w2[ii]*e6[(Bars-i)-1][ii];
//----
if(ii==1)
MapBuffer1[i]=c1[ii]*e6[Bars-i][ii] + c2[ii]*e5[Bars-i][ii] +
c3[ii]*e4[Bars-i][ii] + c4[ii]*e3[Bars-i][ii];
if(ii==2)
MapBuffer2[i]=c1[ii]*e6[Bars-i][ii] + c2[ii]*e5[Bars-i][ii] +
c3[ii]*e4[Bars-i][ii] + c4[ii]*e3[Bars-i][ii];
if(ii==3)
MapBuffer3[i]=c1[ii]*e6[Bars-i][ii] + c2[ii]*e5[Bars-i][ii] +
c3[ii]*e4[Bars-i][ii] + c4[ii]*e3[Bars-i][ii];
if(ii==4)
MapBuffer4[i]=c1[ii]*e6[Bars-i][ii] + c2[ii]*e5[Bars-i][ii] +
c3[ii]*e4[Bars-i][ii] + c4[ii]*e3[Bars-i][ii];
if(ii==5)
MapBuffer5[i]=c1[ii]*e6[Bars-i][ii] + c2[ii]*e5[Bars-i][ii] +
c3[ii]*e4[Bars-i][ii] + c4[ii]*e3[Bars-i][ii];
if(ii==6)
MapBuffer6[i]=c1[ii]*e6[Bars-i][ii] + c2[ii]*e5[Bars-i][ii] +
c3[ii]*e4[Bars-i][ii] + c4[ii]*e3[Bars-i][ii];
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments