AO_FozzySignalALL
Download scriptThe Fozzy Daily Indicator is a technical analysis tool designed to help traders visualize momentum and volatility trends in a single, dedicated window. Rather than looking at raw price action alone, this script processes three distinct layers of data to provide a clearer picture of market sentiment.
How the Logic Works
The indicator operates by layering three different types of mathematical calculations on top of one another:
1. Momentum Tracking (RSI & RSI-MA) First, the tool calculates the Relative Strength Index (RSI). This is a standard measure used to determine whether an asset is being overbought or oversold. To smooth out the "noise" of the market, the script then takes that RSI data and applies a Moving Average (RSIMA). By comparing the actual RSI against its moving average, the indicator helps identify where the current momentum is heading relative to its recent past.
2. Volatility Mapping (Bollinger Bands) Next, the tool creates a set of boundaries known as Bollinger Bands. Interestingly, instead of applying these bands directly to the price, this script applies them to the RSIMA (the moving average of the RSI). This creates a "band" around the momentum line. These bands help define the "normal" range of market activity; when the momentum pushes toward or beyond these dots, it signals significant strength or weakness in the trend.
3. The Signal Generation The final layer is the automated Signal logic. The script looks for specific "crossovers"—moments where the momentum (RSI) crosses its moving average line.
- When the RSI crosses from below to above the moving average, it generates a high signal point.
- When the RSI crosses from above to below the moving average, it generates a low signal point.
Summary for the Trader
Essentially, this indicator acts as a filter. It takes raw price data, converts it into momentum, smooths that momentum out to remove distractions, and then draws boundaries around it to show volatility. The final result is a visual map that helps you see exactly when the trend is shifting direction, providing clear markers for potential entry or exit points based on momentum shifts.
//+------------------------------------------------------------------+
//| Fozzy Daily Indicator |
//| Programmed by Aidrian O'Connor |
//| http://www.unitone.org |
//+------------------------------------------------------------------+
#property copyright "Fozzy"
#property link "http://"
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White
#property indicator_color4 White
#property indicator_color5 White
#property indicator_color6 Green
//---- indicator parameters
extern int RSIPeriod = 8;
extern int RSIMAPeriod = 8;
extern int BandsPeriod=20;
extern int BandsShift=0;
extern double BandsDeviations=2.0;
//---- buffers
double RSI[];
double RSIMA[];
double BBMid[];
double BBUp[];
double BBDn[];
double Signal[];
int i;
int init()
{
IndicatorBuffers(6);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
SetIndexDrawBegin(0,i-1);
SetIndexBuffer(0, RSI);
SetIndexLabel(0,"RSI");
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID);
SetIndexDrawBegin(1,i-1);
SetIndexBuffer(1, RSIMA);
SetIndexLabel(1,"RSI-MA");
SetIndexStyle(2,DRAW_LINE,STYLE_DOT);
SetIndexDrawBegin(2,i-1);
SetIndexBuffer(2, BBMid);
SetIndexLabel(2,"BB-Mid");
SetIndexStyle(3,DRAW_LINE,STYLE_DOT);
SetIndexDrawBegin(3,i-1);
SetIndexBuffer(3, BBUp);
SetIndexLabel(3,"BB-Up");
SetIndexStyle(4,DRAW_LINE,STYLE_DOT);
SetIndexDrawBegin(4,i-1);
SetIndexBuffer(4, BBDn);
SetIndexLabel(4,"BB-Dn");
SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,1);
SetIndexDrawBegin(5,i-1);
SetIndexBuffer(5, Signal);
SetIndexLabel(5,"Signal");
return(0);
}
int start()
{
i=Bars-BandsPeriod;
while(i>=0) {
RSI[i] = iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,i);
i--;
}
i=Bars-BandsPeriod;
while(i>=0) {
RSIMA[i] = iMAOnArray(RSI,0,RSIMAPeriod,0,MODE_SMA,i);
i--;
}
i=Bars-BandsPeriod;
while(i>=0) {
BBMid[i] = iMAOnArray(RSIMA,0,BandsPeriod,BandsShift,MODE_SMA,i);
BBUp[i] = iBandsOnArray(RSIMA,0,BandsPeriod,BandsDeviations,BandsShift,MODE_UPPER,i);
BBDn[i] = iBandsOnArray(RSIMA,0,BandsPeriod,BandsDeviations,BandsShift,MODE_LOWER,i);
i--;
}
i=Bars-BandsPeriod;
while(i>=0) {
Signal[i] = 50;
if(RSI[i]>RSIMA[i] && RSI[i+1]<RSIMA[i+1]){
Signal[i] = 100;
} else {
if(RSI[i]<RSIMA[i] && RSI[i+1]>RSIMA[i+1]){
Signal[i] = 0;
}
}
i--;
}
return(0);
}
//+------------------------------------------------------------------+
Comments