1_Fish_v1

This custom indicator is designed to help traders visualize momentum and identify potential trend reversals by analyzing price fluctuations over a specific timeframe. Rather than simply tracking the price of an asset, it focuses on the intensity and direction of market movement.

How the Logic Works

1. Price Range Analysis The script begins by looking at a set number of previous price bars (defined by the period setting). It identifies the highest peak and the lowest valley within that window. By calculating the midpoint of the current price relative to these extremes, the tool determines where the price currently sits within its recent range.

2. Momentum Smoothing Instead of reacting instantly to every tiny tick in price, the logic applies a smoothing formula. It blends the current position with previous data to create a consistent flow. This helps filter out "market noise"—the small, erratic movements that can often mislead traders—allowing for a clearer view of the underlying trend.

3. Logarithmic Transformation To make the data more readable and mathematically accurate for trading purposes, the script converts these momentum values into a logarithmic scale. This ensures that the movement is represented proportionally, making it easier to see when momentum is accelerating or decelerating significantly.

4. Trend Visualization (The Dual Histogram) The most distinct feature of this script is how it displays information on your chart. It splits the data into two separate visual components based on polarity:

  • Positive Momentum: When the calculated value is above zero, it highlights the upward trend.
  • Negative Momentum: When the calculated value drops below zero, it switches to reflect the downward trend.

By separating these movements into distinct colors (Lime and Red), the indicator provides a clear visual cue for market sentiment. It allows you to see at a glance whether the current "push" in the market is bullish or bearish, providing a structured way to monitor price action intensity.

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

#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"

#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
 
extern int period=10;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];


int init()
  {
   
   
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName("Fisher_Yur4ik");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }


int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;  
   

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++)
    {  MaxH = High[Highest(NULL,0,MODE_HIGH,period,i)];
       MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      
    }


   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
           
      if (((current<0)&&(prev>0))||(current<0))   up= false;    
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
        
       else
         {
          ExtBuffer1[i]=current;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }

Comments