DayImpuls_T3_v3_v2

Download script
Author:
DayImpuls_T3_v3_v2

This script is a specialized technical analysis tool designed for the MetaTrader platform. It serves to visualize and smooth out price movements by calculating specific momentum and trend data, helping traders identify market directions more clearly.

Core Logic and Functionality

1. Momentum Tracking (DayImpuls) The tool begins by calculating a "Daily Impulse" value. It looks at a specific window of historical price bars (defined by the user's settings) and calculates the difference between the opening and closing prices. By summing these differences, it establishes a momentum figure that indicates whether the market has been moving predominantly upward or downward over that period.

2. The T3 Smoothing Algorithm Once the raw momentum is captured, the script applies a sophisticated smoothing technique known as the "T3." Unlike standard moving averages, which can be lagging or jagged, the T3 algorithm uses a multi-stage weighted calculation. It processes the momentum data through several layers of filtering to produce a much smoother, more fluid curve. This allows traders to see the underlying trend without the "noise" of minor price fluctuations.

3. Dynamic Channeling and Boundaries In addition to the smoothed lines, the script automatically identifies historical highs and lows within specific timeframes (specifically optimized for 15-minute, 30-minute, and 60-minute charts). It generates:

  • High/Low Boundaries: These mark the extremes of the momentum over a set period.
  • Channel Lines: The script calculates the midpoint of these highs and lows to create a "channel" effect. This helps traders visualize the range in which the market is currently oscillating.

4. Visual Customization The script includes a built-in display manager that allows the user to choose what information they want to see on their screen. Users can toggle between:

  • Viewing both the raw impulse and the smoothed T3 curve.
  • Viewing only the smoothed T3 curve for a cleaner chart.
  • Viewing only the impulse data.

Summary of Usage

Essentially, this tool transforms raw price action into a set of organized visual signals. It takes "choppy" market data, calculates its momentum, smooths it out using a high-quality mathematical filter (T3), and maps out the boundaries of that movement to help users identify trend changes and potential areas of support or resistance.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
8 Views
0 Downloads
0 Favorites
DayImpuls_T3_v3_v2
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//| 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)


//===========================================  Ýòî ÿ óæå íàêîëáàñèë t3: ===============
//=========================================== Âçÿò òèïîâîé êîä          ===============
   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;
//----
//================= Êîíåö   ====================  Ýòî ÿ óæå íàêîëáàñèë t3: ===============

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);
  
  // ==================================== Ýòî ÿ óæå íàêîëáàñèë t3: ========================
  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;
  // ==========^^^====================== Ýòî ÿ óæå íàêîëáàñèë t3: ====^^^================
      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