Author: Copyright � 2005, Nick Bilak
TTF_hist

This script is a custom technical analysis indicator designed to measure and visualize market momentum by comparing "Buy Power" against "Sell Power." It generates a visual output in a separate window, providing traders with a simplified representation of whether the current price action is being driven more by aggressive buying or selling.

Core Logic and Mechanics

1. Data Collection (Price Extremes) The indicator looks back at specific timeframes to identify critical price points. It captures four key values based on a user-defined number of bars:

  • The highest price reached in the recent period.
  • The lowest price reached in the recent period.
  • The highest price reached in a previous, older period.
  • The lowest price reached in an older period.

2. Power Calculation By comparing these extremes, the script calculates two distinct "Power" metrics:

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

The script then normalizes these figures into a single percentage-based value (TTF). This tells the indicator how much more dominant one side of the market is compared to the other.

3. Signal Smoothing and Filtering To prevent the data from looking erratic or "jittery," the script applies a sophisticated smoothing process. It uses a multi-stage weighted calculation (similar to a triple exponential moving average) to refine the raw power data. This ensures that the resulting visual representation is fluid and easier for a human observer to read, filtering out minor market noise while preserving the overall trend.

4. Visual Output The indicator produces two distinct visual elements:

  • Main Histogram: This represents the smoothed momentum value. It fluctuates based on the balance of power in the market.
  • Signal Line: This acts as a binary threshold. Depending on whether the momentum value is positive or negative, the signal line will switch between two set levels (TopLine and BottomLine). This provides a clear visual cue: when the indicator moves above the baseline, it suggests bullish dominance; when it drops below, it suggests bearish dominance.

Summary for the User

Essentially, this tool identifies who is "winning" the tug-of-war between buyers and sellers. It takes raw price extremes, calculates the strength of each side, smooths out the fluctuations to provide a clear trend, and displays it as a histogram that allows you to see at a glance whether the market is leaning toward a bullish or bearish direction.

Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
TTF_hist
//+------------------------------------------------------------------+
//|                                                          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