TTF_hist_v1

Download script
Author: Copyright � 2005, Nick Bilak
TTF_hist_v1

This technical indicator is designed to provide traders with a visual representation of market momentum and sentiment by measuring the relative strength between buying and selling pressures. Rather than simply looking at current price action, it analyzes historical price extremes to determine which side of the market—buyers or sellers—holds the dominant "power."

How the Logic Works

1. Measuring Market Power The script examines specific windows of time (based on a user-defined number of bars) to identify key price points:

  • Buy Power: It calculates the difference between the highest recent high and the lowest older low. This represents the upward momentum or "reach" of the bulls.
  • Sell Power: It calculates the difference between the highest older high and the lowest recent low. This represents the downward pressure or "reach" of the bears.

2. Calculating the Sentiment Score (TTF) Once these two powers are calculated, the script creates a percentage-based score. By comparing Buy Power against Sell Power, it determines which side is winning.

  • A positive result indicates that buying pressure is currently stronger than selling pressure.
  • A negative result indicates that selling pressure is dominating the market.

3. Smoothing and Refinement To prevent the data from being too "jittery" or reacting erratically to small price flickers, the script applies a sophisticated smoothing process. It uses a series of weighted calculations (similar to an exponential moving average) to filter out market noise. This ensures that the final reading reflects a more stable trend rather than temporary spikes.

4. Visual Representation The indicator presents this data in two distinct ways on your chart:

  • The Histogram: This shows the actual calculated sentiment score. It allows you to see the magnitude of the momentum—how much stronger one side is compared to the other.
  • The Signal Line: This provides a binary "zone" perspective. Based on the smoothed sentiment score, it identifies whether the market is generally leaning toward a positive or negative state, helping to clearly distinguish between overall bullish and bearish environments.

Summary for Traders

In simple terms, this tool tells you who is in control of the market at any given moment. By looking at the relationship between recent highs and older lows (and vice versa), it identifies whether the market has enough "fuel" to keep moving in its current direction or if the opposing side is beginning to take over.

Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
TTF_hist_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=8;
//15=default number of bars for computation
extern int TopLine=75;
extern int BottomLine=-75;
extern int t3_period=3;
extern double b=0.7;
//---- 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_HISTOGRAM,STYLE_SOLID,2);
   SetIndexBuffer(0, MainBuffer);
   SetIndexStyle(1,DRAW_LINE,2);
   SetIndexBuffer(1, SignalBuffer);
//---- name for DataWindow and indicator subwindow label
  short_name="TTF("+TTFbars+")";
  IndicatorShortName(short_name);
  SetIndexLabel(0,short_name);
  SetIndexLabel(1,"Signal");
   
   
   
//----
   draw_begin1=TTFbars*2+1;
   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)];//High[Highest(MODE_HIGH,shift+TTFbars-1,TTFbars)];
  HighestHighOlder =High[Highest(NULL,0,MODE_HIGH,TTFbars,i+TTFbars)];//High[Highest(MODE_HIGH,shift+TTFbars*2-1,TTFbars)];
  LowestLowRecent =Low[Lowest(NULL,0,MODE_LOW,TTFbars,i)];//Low [Lowest (MODE_LOW ,shift+TTFbars-1,TTFbars)];
  LowestLowOlder =Low[Lowest(NULL,0,MODE_LOW,TTFbars,i+TTFbars)];//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