RAVI FX Fisher_001
Download scriptThe RAVI FX Fisher is a technical analysis tool designed to help traders visualize market momentum and price velocity in a clear, consolidated format. Instead of looking at raw price movements, this script translates complex market data into a smooth oscillating line that highlights the strength of current trends.
How it Works
The core logic of the script relies on comparing two different moving averages—one that reacts quickly to price changes (the fast average) and one that tracks long-term trends (the slow average). By calculating the difference between these two, the tool determines the "velocity" of the market.
To ensure the data is relevant across different types of assets (like different currencies or commodities), the script automatically adjusts for market volatility. This means the indicator remains consistent and readable regardless of whether the market is moving aggressively or quietly.
Key Features and Visuals
- The Momentum Line: The primary output is a flowing line that moves between specific boundaries. It serves as a visual representation of where the market's "energy" currently sits.
- Dynamic Scaling: The script includes an optional mathematical conversion (the IFT toggle) that helps smooth out the data, making it easier to identify significant shifts in trend without being distracted by minor price noise.
- Trigger Zones: The tool establishes clear upper and lower horizontal boundaries (trigger levels). These act as visual benchmarks:
- When the momentum line approaches or exceeds these boundaries, it indicates a high-intensity move in the market.
- When the line stays within these zones, it suggests a more neutral or consolidating environment.
Summary for Traders
Essentially, this indicator acts as a "speedometer" for price action. It strips away the clutter of standard charts to show you the underlying force behind a movement. By monitoring how the momentum line interacts with the upper and lower trigger boundaries, traders can better identify when a trend is gaining significant strength or potentially losing steam.
//+------------------------------------------------------------------+
//| RAVI FX Fisher.mq4 |
//| Copyright © 2005, Luis Guilherme Damiani |
//| http://www.damianifx.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Luis Guilherme Damiani"
#property link "http://www.damianifx.com.br"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 MediumSeaGreen
#property indicator_color2 MediumVioletRed
#property indicator_color3 MediumVioletRed
//---- input parameters
extern int MAfast=4;
extern int MAslow=49;
extern double trigger=0.07;
extern int maxbars=500;
extern bool apply_IFT=true;
//---- buffers
double RAVIfxFishBuffer[];
double LoTrigBuff[];
double HiTrigBuff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,RAVIfxFishBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,LoTrigBuff);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,HiTrigBuff);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
double MAValue=0;
double IFish=0;
//---- check for possible errors
if(counted_bars<0) return(-1);
int limit=Bars-counted_bars;
if(limit>maxbars)limit=maxbars;
if (limit>Bars-MAslow-1)limit=Bars-MAslow-1;
//----
for (int shift = 0; shift<=limit;shift++)
{
//if period >70 then {LoTrigger=-0.15;HiTrigger=0.15;}else {LoTrigger=-0.07;HiTrigger=0.07;};
MAValue = 100 * (iMA(NULL,0,MAfast,0,MODE_LWMA,PRICE_TYPICAL,shift) - iMA(NULL,0,MAslow,0,MODE_LWMA,PRICE_TYPICAL,shift))*iATR(NULL,0,MAfast,shift)
/iMA(NULL,0,MAslow,0,MODE_LWMA,PRICE_TYPICAL,shift)/iATR(NULL,0,MAslow,shift);
if(apply_IFT)IFish=(MathExp(2*MAValue)-1)/(MathExp(2*MAValue)+1);
else IFish=MAValue;
RAVIfxFishBuffer[shift]=IFish;
LoTrigBuff[shift]=-trigger;
HiTrigBuff[shift]=trigger;
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments