DayImpuls_T3_v3_v3

Download script
Author:
DayImpuls_T3_v3_v3

This script is a technical analysis tool designed for the MetaTrader platform to help traders visualize market momentum and volatility. It functions by transforming raw price data into several different visual layers, allowing users to distinguish between immediate price impulses and smoothed long-term trends.

Core Logic and Functionality

1. Impulse Calculation The foundation of the script is the "DayImpuls" logic. Instead of simply looking at where the price ends, the tool calculates the difference between the opening and closing prices over a specific number of bars. It converts these differences into a numerical value that represents the "force" or "impulse" of the market movement during that period.

2. The T3 Smoothing Algorithm To make the data more readable, the script applies a specialized smoothing formula known as the "T3." Raw market impulses can be erratic and jagged; this algorithm processes those values to create a much smoother curve. This allows traders to see the underlying direction of the trend without being distracted by minor, short-term price fluctuations.

3. Dynamic Channels and Boundaries The script identifies specific peaks (highs) and valleys (lows) within set timeframes. It uses these extremes to draw:

  • Boundary Lines: These mark the highest and lowest impulse points reached over a specific look-back period.
  • Channel Lines: These provide a midpoint calculation based on those highs and lows, helping to define the "center" of the current market volatility.

4. Timeframe Specificity The logic is specifically calibrated to work on higher-frequency trading intervals (M15, M30, and M60). It automatically adjusts its look-back calculations based on which of these timeframes is currently active on the chart to ensure the data remains consistent with the speed of the market.

User Visualization Options

The script includes a flexible display system that allows the user to choose what they want to see on their screen:

  • Full View: Shows both the raw impulse data and the smoothed T3 trend line.
  • Impulse Only: Hides the smooth trend to focus purely on the immediate momentum.
  • Trend Only: Hides the jagged impulses to provide a clean view of the smoothed price direction.

Summary for the Trader

Essentially, this tool takes the "noise" of daily price movements, calculates the strength of those moves, and filters them through a smoothing lens. It provides a multi-layered view that helps you see not just where the price is now, but how strongly it moved to get there and where its boundaries lie based on recent history.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
12 Views
0 Downloads
0 Favorites
DayImpuls_T3_v3_v3
//+------------------------------------------------------------------+
//| DayImpuls_T3_v2.mq4.mq4
//| 
//| http://www.arkworldmarket.ru/forum/showthread.php?t=966&page=2&pp=10 
//+------------------------------------------------------------------+
// Modest äîáàâèë ñãëàæèâàíèå ïî ìåòîäó t3. Äîáàâèë êàíàëû.
// Ñëåãêà èçìåíèë àëãîðèòì, ÷òîáû ïîíÿòíåå âîñïðèíèìàëñÿ êîä. Íà ñóòü îðèãèíàëà íå âëèÿåò ÍÈÊÀÊ.
// Óáèðàåì ëèøíþþ ãðàôèêó, ââîäèì óïðàâëåíèå ðåæèìîì îòîáðàæåíèÿ
// DisplayMode=0 Îòîáðàæàþòñÿ DayImpuls è ñëàæåííàÿ êðèâàÿ
// DisplayMode=1 Îòîáðàæàþòñÿ òîëüêî DayImpuls 
// DisplayMode=2 Îòîáðàæàþòñÿ òîëüêî ñëàæåííàÿ êðèâàÿ
#property copyright ""
#property link      "http://www.arkworldmarket.ru/forum/showthread.php?t=966&page=2&pp=10"
//----
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 Indigo
#property indicator_level1 0.0
//---- input parameters
extern int       per=14;
extern int       d=100;
extern int t3_period=8;
extern double b=0.7;
//extern  ChanPercent=70;
extern int DisplayMode=0;
//---- buffers
double  DayImp[];
double  t3[];
//double  MaxH[];
//double  MinH[];
double  MaxLine[];
double  MinLine[];
double  ChanLineMax[];
double  ChanLineMin[];
double Level[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   if (DisplayMode>2 || DisplayMode<0)  DisplayMode=0;
   switch( DisplayMode )
     {
      case 0:
         SetIndexStyle(0,DRAW_LINE,EMPTY,1,Magenta);
         SetIndexBuffer(0,DayImp);
         SetIndexStyle(1,DRAW_LINE,EMPTY,2,Red);
         SetIndexBuffer(1,t3);
         break;
      case 1:
         SetIndexStyle(0,DRAW_LINE,EMPTY,1,Magenta);
         SetIndexBuffer(0,DayImp);
         SetIndexStyle(1,DRAW_NONE,EMPTY,2,Red);
         SetIndexBuffer(1,t3);
         break;
      case 2:
         SetIndexStyle(0,DRAW_NONE);
         SetIndexBuffer(0,DayImp);
         SetIndexStyle(1,DRAW_LINE,EMPTY,2,Red);
         SetIndexBuffer(1,t3);
         break;

      default:
         SetIndexStyle(0,DRAW_LINE,EMPTY,1,Magenta);
         SetIndexBuffer(0,DayImp);
         SetIndexStyle(1,DRAW_LINE,EMPTY,2,Red);
         SetIndexBuffer(1,t3);
         break;
     }
   /*
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DayImp);
   SetIndexStyle(1,DRAW_LINE,EMPTY,2,Red);
   SetIndexBuffer(1,t3);
   */
   SetIndexStyle(2,DRAW_LINE,EMPTY,2,Goldenrod);
   SetIndexBuffer(2,MaxLine);
   SetIndexStyle(3,DRAW_LINE,EMPTY,2,Goldenrod);
   SetIndexBuffer(3,MinLine);
   SetIndexLabel(0,NULL); SetIndexLabel(1,NULL);SetIndexLabel(2,NULL);SetIndexLabel(3,NULL);
   SetIndexLabel(4,NULL);SetIndexLabel(5,NULL);
//----   
   SetIndexStyle(4,DRAW_LINE,EMPTY,2,DarkGreen);
   SetIndexBuffer(4,ChanLineMax);
   SetIndexStyle(5,DRAW_LINE,EMPTY,2,DarkGreen);
   SetIndexBuffer(5,ChanLineMin);
   SetIndexStyle(6,DRAW_LINE,EMPTY,1,Blue);
   SetIndexBuffer(6,Level);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int  shift,i,N;
   double imp,mBar,Max,Min;
   double e1,e2,e3,e4,e5,e6,c1,c2,c3,c4,n,w1,w2, b2,b3,dpo,Prise,k;
   //SetLoopCount(0);
   // loop from first bar to current bar (with shift=0)
//----
   if(Bars<=t3_period) return(0);
//---- initial zero
   if(counted_bars<t3_period)
     {
      // for(i=1;i<=t3_period;i++) prise[Bars-i]=0.0;
      for(i=1;i<=t3_period;i++) t3[Bars-i]=0.0;
     }
//----
   b2=b*b;
   b3=b2*b;
   c1=-b3;
   c2=(3*(b2+b3));
   c3=-3*(2*b2+b+b3);
   c4=(1+3*b+b3+3*b2);
   n=t3_period;
//----
   if (n<1) n=1;
   n=1 + 0.5*(n-1);
   w1=2/(n + 1);
   w2=1 - w1;
//----
   int limit;
   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(shift=0; shift<limit; shift++)
      //for shift=Bars-1 Downto 0
     {
      DayImp[shift]=1;
      t3[shift]=0;
      //SetIndexValue(shift,0);
      //SetIndexValue2(shift,0); 
     }
   mBar=d*per;
   //for shift=mBar downto per 
   for( shift=Bars-96-1; shift>=0; shift--)
     {
      imp=0;
      Level[shift]=0.0;
      for( i=shift ;i<=shift+per; i++)
        {
         imp=imp+(Open[i]-Close[i]);
        }
      imp=MathRound(imp/Point);
//----
      if (imp==0 )imp=0.0001;
      if (imp!=0 )
        {
         imp=-imp;
         DayImp[shift]=imp;
        }
      //for( i=shift ;i<=shift+per; i++) 
      // DayImp[shift]=iMA(NULL,0,14,0,MODE_SMMA,PRICE_HIGH,i);     
      dpo=DayImp[shift];
      e1=w1*dpo + w2*e1;
      e2=w1*e1 + w2*e2;
      e3=w1*e2 + w2*e3;
      e4=w1*e3 + w2*e4;
      e5=w1*e4 + w2*e5;
      e6=w1*e5 + w2*e6;
      t3[shift]=c1*e6 + c2*e5 + c3*e4 + c4*e3;
//----      
      switch( Period() )
        {
         case 5: N=288; break;
         case 15: N=96; break;
         case 30: N=48; break;
         case 60: N=24; break;
         default: N=0; break;
        }
      if (N==0) {Alert("Work only in M15,M30,M60 timeframes");return(0);}
      Max=DayImp[shift+N-1];
      Min=DayImp[shift+N-1];
      for( i=shift ;i<=shift+N-1; i++)
        {
         if (Max<DayImp[i]) Max=DayImp[i];
         if (Min>DayImp[i]) Min=DayImp[i];
        }
      //MaxH[shift]=Max;//+(Max-Min)*(1-kChannel);
      //MinH[shift]=Min;//+(Max-Min)*(kChannel);
      MaxLine[shift]=Max;//+(Max-Min)*(1-kChannel);
      MinLine[shift]=Min;//+(Max-Min)*(kChannel);
      //k=((100-ChanPercent)/2)/100;
      ChanLineMax[shift]=Max/2; // Min+(Max-Min)*(1-k);
      ChanLineMin[shift]=Min/2; //Min+(Max-Min)*(k);
     }
//---- 
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments