THV T3 Trix

Author: convert FinGeR Alex orginal by Luis Damiani
THV T3 Trix

Indicator Logic Overview

This script is a custom technical analysis tool designed to track and visualize momentum trends in financial markets. Rather than showing raw price data, it focuses on the Rate of Change (ROC), which helps traders understand how quickly price movements are accelerating or decelerating over specific periods.

Core Functionality

The logic operates by calculating two distinct types of smoothed moving averages, which are then used to derive momentum values. These calculations are based on a "Triple Exponential Smoothing" approach, which is designed to reduce market "noise" and provide a cleaner view of the underlying trend.

How the Calculations Work:

  1. Smoothing Layers: The script processes price data (either Closing or Opening prices, depending on your settings) through multiple layers of smoothing. By applying these layers repeatedly, the indicator filters out minor, insignificant price fluctuations to highlight more significant market trends.
  2. Dual-Trend Monitoring: The tool tracks two different periods simultaneously:
    • Component A: A shorter-term trend calculation.
    • Component B: A longer-term trend calculation.
  3. Momentum Analysis: For each component, the script calculates the mathematical difference between the current smoothed value and its previous value. This represents the "velocity" of the price movement.

Visual Output

The script provides two primary lines on your chart window:

  • Line 1 (Short-term Momentum): Focuses on the velocity of the shorter period. This is typically used to identify immediate shifts in market direction.
  • Line 2 (Combined/Long-term Momentum): Depending on your configuration, this line either focuses on the longer-period velocity or combines the momentum of both periods into a single reading.

Key Features for the User:

  • Dynamic Smoothing: The script automatically adjusts its weightings based on the time periods you provide, ensuring that the math remains consistent regardless of how many bars are being analyzed.
  • Relative Growth: Instead of showing absolute price points, the indicator displays a percentage-like rate of change. This allows you to see not just where the price is going, but how fast it is getting there relative to its previous position.
  • Trend Identification: By observing the slopes and direction of these lines, users can identify periods of exhaustion (where momentum slows down) or periods of high-strength expansion (where momentum spikes).
Miscellaneous
Implements a curve of type %1
11 Views
1 Downloads
0 Favorites
THV T3 Trix
//+------------------------------------------------------------------+
//|                                          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       TrixNumberOfBars=350;
extern int       A_t3_period=7;//20;
extern int       B_t3_period_ac=19;//35;

int               is_A_open_price=0;
int               diferential=0;
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 = TrixNumberOfBars+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[TrixNumberOfBars-1]=0;


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

ExtMapBuffer2[TrixNumberOfBars-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=TrixNumberOfBars-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,"  TrixNumberOfBars:" ,TrixNumberOfBars," 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