TTF_look-ahead_v1

Download script
Author: Copyright � 2005, Nick Bilak
TTF_look-ahead_v1

This technical indicator is designed to measure market momentum by analyzing the relative strength between recent price movements and older price actions. It functions by creating a visual representation of "Buying Power" versus "Selling Power," allowing traders to identify shifts in sentiment through a specialized mathematical formula.

Core Logic and Methodology

The script operates on a comparative analysis of price extremes. To determine the current market state, it looks at two distinct timeframes:

  1. Recent Activity: It identifies the highest highs and lowest lows over a specific number of bars (defined by the user).
  2. Historical Reference: It simultaneously identifies the highest highs and lowest lows from an adjacent period immediately preceding the recent data.

By calculating the difference between these two areas, the indicator derives two primary values:

  • Buy Power: The distance between the current recent high and the older low.
  • Sell Power: The distance between the older high and the current recent low.

Momentum Calculation

The indicator then calculates a percentage value based on the relationship between these two powers. If Buy Power significantly outweighs Sell Power, the resulting value trends upward; conversely, if Sell Power is dominant, the value trends downward.

To ensure the data is smooth and readable for a human user—rather than erratic and jagged—the script applies a multi-stage smoothing process. It passes the raw momentum value through a series of weighted calculations (similar to an exponential moving average) multiple times. This filters out market "noise" and highlights the underlying trend more clearly.

Visual Representation

The tool produces two distinct lines on a separate window below the main price chart:

  • Main Trend Line: This represents the processed momentum value. It shows the fluctuating balance of power in the market.
  • Signal Line: This serves as a binary "threshold" indicator. It monitors the Main Trend Line and reacts to whether the momentum is positive or negative. When the momentum stays above zero, the signal remains at a high level (Top Line); when it drops below zero, it moves to a low level (Bottom Line).

Summary for Traders

Essentially, this script tells you who is winning the "tug-of-war" between buyers and sellers. It looks at how much further the price has pushed in the recent past compared to the past, smooths that data to remove distractions, and provides a clear signal based on whether the prevailing momentum is currently bullish or bearish.

Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
TTF_look-ahead_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                   ttf.mq4        |
//|                      Copyright © 2005, Nick Bilak                |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Nick Bilak"
#property link      "beluck[at]gmail.com"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
//---- input parameters
extern int TTFbars=7;
//15=default number of bars for computation
extern int TopLine=100;
extern int BottomLine=-100;
extern int t3_period=6;
extern double b=1.618;
//---- buffers
double MainBuffer[];
double SignalBuffer[];
//----
int draw_begin1=0;
int draw_begin2=0;
double b2=0;
double b3=0;
double c1=0;
double c2=0;
double c3=0;
double c4=0;
double r=0;
double w1=0;
double w2=0;
double e1 = 0;
double e2 = 0;
double e3 = 0;
double e4 = 0;
double e5 = 0;
double e6 = 0;
double  HighestHighRecent=0;
double  HighestHighOlder =0;
double  LowestLowRecent =0;
double  LowestLowOlder =0;
double  BuyPower =0;
double  SellPower=0;
double  TTF=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(2);
//---- indicator lines
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0, MainBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1, SignalBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="TTF_look-ahead ("+TTFbars+") ";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   SetIndexLabel(1,"Signal");
//----
   draw_begin1=TTFbars*2+1+TTFbars*3;
   draw_begin2=draw_begin1;
   SetIndexDrawBegin(0,draw_begin1);
   SetIndexDrawBegin(1,draw_begin2);
   
   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);

   r=t3_period;

   if (r<1) r=1;
   r = 1 + 0.5*(r-1);
   w1 = 2 / (r + 1);
   w2 = 1 - w1;
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| ttf                                            |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k;
   int    counted_bars=IndicatorCounted();
   double price;
//----
   if(Bars<=draw_begin2) return(0);
//---- initial zero
   if(counted_bars<1)
     {
      for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0;
      for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0;
     }
//---- %K line
   i=Bars-draw_begin1;
   if(counted_bars>draw_begin1) i=Bars-counted_bars-1;
   while(i>=0)
     {
     
     
  HighestHighRecent=High[Highest(NULL,0,MODE_HIGH,TTFbars,i-TTFbars+1)];//High[Highest(MODE_HIGH,shift+TTFbars-1,TTFbars)];
  HighestHighOlder =High[Highest(NULL,0,MODE_HIGH,TTFbars,i+1)];//High[Highest(MODE_HIGH,shift+TTFbars*2-1,TTFbars)];
  LowestLowRecent =Low[Lowest(NULL,0,MODE_LOW,TTFbars,i-TTFbars+1)];//Low [Lowest (MODE_LOW ,shift+TTFbars-1,TTFbars)];
  LowestLowOlder =Low[Lowest(NULL,0,MODE_LOW,TTFbars,i+1)];//Low [Lowest (MODE_LOW ,shift+TTFbars*2-1,TTFbars)];
  BuyPower =HighestHighRecent-LowestLowOlder;
  SellPower=HighestHighOlder -LowestLowRecent;
  TTF=(BuyPower-SellPower)/(0.5*(BuyPower+SellPower))*100;

  e1 = w1*TTF + 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;

  TTF = c1*e6 + c2*e5 + c3*e4 + c4*e3;

  MainBuffer[i]=TTF;
  i--;
 }
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
//---- signal line is simple movimg average
   for(i=0; i<limit; i++) {
      if (MainBuffer[i]>=0) 
         SignalBuffer[i]=TopLine;
      else
         SignalBuffer[i]=BottomLine;
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments