T3 TRIX (ROC of T6)1

Author: convert FinGeR Alex orginal by Luis Damiani
T3 TRIX (ROC of T6)1

This script functions as a specialized technical analysis tool designed to track momentum and rate of change within financial markets. Rather than simply showing the price of an asset, it calculates the speed and acceleration of price movements to help identify trends.

Core Logic and Methodology

The indicator operates by processing price data through a multi-layered smoothing and calculation sequence:

1. Multi-Stage Smoothing (T3 Algorithm) The script utilizes a logic similar to the "T3" moving average, which is known for reducing the "noise" or jagged movements often found in raw price charts while remaining highly responsive to actual trend changes. It achieves this by passing the data through multiple successive rounds of calculations.

2. Dual-Layer Analysis (A and B Components) The logic establishes two distinct calculation paths:

  • Component A: Uses a primary time period (defined by the user) to establish a baseline trend.
  • Component B: Uses a secondary, shorter time period to capture more immediate price fluctuations.

By calculating both simultaneously, the script can compare long-term momentum against short-term volatility.

3. Rate of Change (ROC) Calculation The most critical part of this logic is how it presents the final data. Instead of showing you a moving average line, the script calculates the percentage change between the current smoothed value and the previous one. This converts raw price points into a "Rate of Change" metric.

Visual Output and Interpretation

The indicator produces two distinct lines on a separate window below your main chart:

  • Primary Line: Represents the momentum of the primary trend (Component A). It tells you how fast the main move is accelerating or decelerating.
  • Secondary Line: Depending on the settings, this either represents the momentum of the shorter timeframe (Component B) or a combined metric of both trends.

Key Functional Behaviors

  • Precision Weights: The script uses specific mathematical constants to weight the data, ensuring that the transition between old data and new price action is smooth and doesn't "jump" unnaturally.
  • Dynamic Calculation: It automatically determines whether to use the "Open" or "Close" price of a candle based on the user's preference, allowing for different levels of sensitivity to price action.
  • Trend Comparison: By looking at the relationship between these two lines, a trader can see if the short-term momentum is pulling away from the long-term trend (potential breakout) or if it is starting to curl back inward (potential exhaustion).
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
T3 TRIX (ROC of T6)1
//+------------------------------------------------------------------+
//|                                          T3 TRIX (ROC of T6).mq4 |
//|                      convert FinGeR Alex orginal by Luis Damiani |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "convert FinGeR Alex orginal by Luis Damiani"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DeepSkyBlue  
#property indicator_color2 Blue
//---- input parameters
extern int       A_t3_period=18;
extern int       num_bars=350;
extern int       is_A_open_price=0;
extern int       B_t3_period_ac=10;
extern int       diferential=0;
extern double    hot=0.7;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {

int  shift=0;
double A_t3=0,A_t3_1=0,max_per=0;
double  B_t3=0,B_t3_1=0;
double e1=0,e2=0,e3=0,e4=0,e5=0,e6=0,c1=0,c2=0,c3=0,c4=0;
double e1x=0,e2x=0,e3x=0,e4x=0,e5x=0,e6x=0;
double d1=0,d2=0,d3=0,d4=0,d5=0,d6=0;
double d1x=0,d2x=0,d3x=0,d4x=0,d5x=0,d6x=0;
double n=0,A_w1=0,A_w2=0,B_w1=0,B_w2=0,b2=0,b3=0;
double init=true;
double bar=0, prevbars=0, start=0, cs=0, prevcs=0,frame=0;  
string commodt="nonono";
int    counted_bars=IndicatorCounted();

cs = num_bars+A_t3_period+is_A_open_price+B_t3_period_ac+diferential+hot; 

if (cs==prevcs && commodt==Symbol() && frame==Time[4]-Time[5] && Bars-prevbars<2)
start=Bars-prevbars;
else start=-1;   
commodt=Symbol();
frame=Time[4]-Time[5];
prevbars = Bars;
prevcs = cs;   
   
if (start==1 || start==0)  bar=start; else init=true;

if (init==true)
{
  b2=hot*hot;
  b3=b2*hot;
  c1=-b3;
  c2=(3*(b2+b3));
  c3=-3*(2*b2+hot+b3);
  c4=(1+3*hot+b3+3*b2);
  
  n=A_t3_period;

  if (n<1) n=1;
 
  n = 1 + 0.5*(n-1);
  A_w1 = 2 / (n + 1);
  A_w2 = 1 - A_w1;

 n=B_t3_period_ac;

  if (n<1) n=1;
  n = 1 + 0.5*(n-1);
  B_w1 = 2 / (n + 1);
  B_w2 = 1 - B_w1;

ExtMapBuffer1[num_bars-1]=0;


e1x=0;e2x=0;e3x=0;e4x=0;e5x=0;e6x=0;

ExtMapBuffer2[num_bars-1]=0; 

d1x=0;d2x=0;d3x=0;d4x=0;d5x=0;d6x=0;

// max_per=max(A_t3_period,B_t3_period_ac);
bar=num_bars-2;
init=false;
}

   

//SetLoopCount(0);
shift=bar; 

while(shift>=0)

{

 if ( is_A_open_price==1 ) d1 = A_w1*Open[shift] + A_w2*d1x;
  else d1 = A_w1*Close[shift] + A_w2*d1x;
  d2 = A_w1*d1 + A_w2*d2x;
  d3 = A_w1*d2 + A_w2*d3x;
  d4 = A_w1*d3 + A_w2*d4x;
  d5 = A_w1*d4 + A_w2*d5x;
  d6 = A_w1*d5 + A_w2*d6x;

  A_t3 = c1*d6 + c2*d5 + c3*d4 + c4*d3;

 
if ((start==1 && shift==1) || start==-1  )
{  
 
  d1x=d1;
  d2x=d2;
  d3x=d3;
  d4x=d4;
  d5x=d5;
  d6x=d6;
  }
  e1 = B_w1*Close[shift] + B_w2*e1x;
  e2 = B_w1*e1 + B_w2*e2x;
  e3 = B_w1*e2 + B_w2*e3x;
  e4 = B_w1*e3 + B_w2*e4x;
  e5 = B_w1*e4 + B_w2*e5x;
  e6 = B_w1*e5 + B_w2*e6x;
B_t3 = c1*e6 + c2*e5 + c3*e4 + c4*e3;

  if(diferential==1)
  {

   ExtMapBuffer1[shift]=(A_t3-A_t3_1)/A_t3_1; 
   ExtMapBuffer2[shift]=(A_t3-A_t3_1)/A_t3_1+(B_t3-B_t3_1)/B_t3_1; 

  
  }
  else
  {

if ( B_t3_1 >0 && A_t3_1>0) {
ExtMapBuffer2[shift]=(B_t3-B_t3_1)/B_t3_1;
ExtMapBuffer1[shift]=(A_t3-A_t3_1)/A_t3_1;
}
  //Comment("0");

  }
  
 //Comment("  start: ",start,"  bar: ",bar,"\n",
//"frame: ",frame,"  num_bars:" ,num_bars," commodity: ",commodt ,"\n",(B_t3-B_t3_1)/B_t3_1);
 
if ((start==1 && shift==1) || start==-1) 
{  
//Comment("Bar=ghfghfgh");  
  A_t3_1=A_t3;
  B_t3_1=B_t3; 
  e1x=e1;
  e2x=e2;
  e3x=e3;
  e4x=e4;
  e5x=e5;
  e6x=e6;
  
 }
 
  shift--;
//Comment("View !!!  NO?????");
   }
//----

 
  }
//+------------------------------------------------------------------+

Comments