This indicator is designed to identify specific trend shifts and price momentum by analyzing the relationship between three primary technical components: Exponential Moving Averages (EMA), the Parabolic SAR (Stop and Reverse) indicator, and current price action.
Rather than providing a single signal, it visualizes multiple types of market conditions using a variety of colored shapes and icons on your chart. Here is the breakdown of the logic used to generate these signals:
Core Technical Components
- EMA 10 & EMA 40: The script tracks two different smoothed averages. These are used to identify "crossovers," which often suggest a change in the immediate trend direction.
- Parabolic SAR (SAR): This is used as a dynamic trailing stop and a momentum filter. The logic specifically looks for when the SAR "flips" (moves from above price to below, or vice versa).
How the Signals are Generated
The script interprets these components through several specific rules:
1. Trend Crosses (Boxes) The indicator looks for moments where the shorter-term average (EMA 10) crosses the longer-term average (EMA 40).
- White Box: Appears when the EMA 10 crosses above the EMA 40, provided the SAR is currently positioned below the price (indicating an upward trend).
- Red Box: Appears when the EMA 10 crosses below the EMA 40, provided the SAR is currently positioned above the price (indicating a downward trend).
2. Momentum & SAR Interactions (Dots and Arrows) The script monitors how the Parabolic SAR interacts with the slower EMA 40 to filter out "noise."
- White/Red Dots: These appear when the Parabolic SAR crosses the EMA 40. Specifically, a White dot marks a move from below to above, while a Red dot marks a move from above to below.
- White/Red Arrows: These are triggered by a "flip" in the Parabolic SAR. To ensure these signals are reliable, the script includes a counter; it will only display the arrow if the SAR has been positioned in its current direction for 6 periods or fewer. This helps identify fresh momentum changes rather than stale ones.
Summary of Visual Language
- Red Icons: Generally represent bearish (downward) price pressure or signals.
- White Icons: Generally represent bullish (upward) price pressure or signals.
- Positioning: By combining the EMA crossover (the "trigger") with the Parabolic SAR (the "filter"), the script attempts to show you where a trend change is being confirmed by both moving averages and momentum oscillators simultaneously.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| 5 Min RSI 12-period qual INDICATOR |
//+------------------------------------------------------------------+
#property copyright "Ron T"
#property link "http://www.lightpatch.com"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 White
#property indicator_color6 White
#property indicator_color7 White
#property indicator_color8 White
//---- buffers
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];
// User Input
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init()
{
// 233 up arrow
// 234 down arrow
// 159 big dot
// 168 open square
// 120 box with X
SetIndexStyle(0,DRAW_ARROW); //RED ARROW
SetIndexBuffer(0, Buffer1);
SetIndexArrow(0,234);
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1, Buffer2);
SetIndexArrow(1,159);
SetIndexStyle(2,DRAW_ARROW); //RED OPEN BOX
SetIndexBuffer(2, Buffer3);
SetIndexArrow(2,120);
SetIndexStyle(3,DRAW_ARROW); //RED DOT
SetIndexBuffer(3, Buffer4);
SetIndexArrow(3,159);
SetIndexStyle(4,DRAW_ARROW); //WHITE ARROW
SetIndexBuffer(4, Buffer5);
SetIndexArrow(4,233);
SetIndexStyle(5,DRAW_ARROW);
SetIndexBuffer(5, Buffer6);
SetIndexArrow(5,159);
SetIndexStyle(6,DRAW_ARROW); //WHITE X BOX
SetIndexBuffer(6, Buffer7);
SetIndexArrow(6,120);
SetIndexStyle(7,DRAW_ARROW); //RED DOT
SetIndexBuffer(7, Buffer8);
SetIndexArrow(7,159);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
int i;
for( i=0; i<Bars; i++ ) Buffer1[i]=0;
for( i=0; i<Bars; i++ ) Buffer2[i]=0;
for( i=0; i<Bars; i++ ) Buffer3[i]=0;
for( i=0; i<Bars; i++ ) Buffer4[i]=0;
for( i=0; i<Bars; i++ ) Buffer5[i]=0;
for( i=0; i<Bars; i++ ) Buffer6[i]=0;
for( i=0; i<Bars; i++ ) Buffer7[i]=0;
for( i=0; i<Bars; i++ ) Buffer8[i]=0;
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int pos=350; // leave room for moving average periods
double cEMA10=0, pEMA10=0;
double cEMA40=0, pEMA40=0;
double cSAR=0, pSAR=10;
bool rising=false;
bool falling=false;
bool sarLO=false;
bool sarHI=false;
bool flipUP=false;
bool flipDN=false;
int dCROSS; // how many periods since last MA cross
int above=0; // how long SAR has been up
int below=0; // how long SAR has been down
double p=Point();
bool Over=false;
bool Under=false;
// 1 RED DOWN ARROW
// 2 RED
// 3 RED BIG OPEN BOX
// 4 RED BIG DOT
// 5 WHITE UP ARROW
// 6 WHITE
// 7 WHITE BIG X BOX
// 8 WHITE BIG DOT
while(pos>=0)
{
cEMA10=iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE, pos);
pEMA10=iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE, pos+1);
cEMA40=iMA(Symbol(),0,40,0,MODE_EMA,PRICE_CLOSE, pos);
pEMA40=iMA(Symbol(),0,40,0,MODE_EMA,PRICE_CLOSE, pos+1);
cSAR=iSAR(Symbol(),0,0.02,0.2,pos);
pSAR=iSAR(Symbol(),0,0.02,0.2,pos+1);
//
// Set all the switches
//
// determine if rising or falling cross
rising=false;
if (pEMA10<=pEMA40 && cEMA10>=cEMA40){rising=true;}
falling=false;
if (pEMA10>=pEMA40 && cEMA10<=cEMA40){falling=true;}
// which side is SAR on
sarLO=false;
if (cSAR<Low[pos]) sarLO=true;
sarHI=false;
if (cSAR>High[pos]) sarHI=true;
// did PSAR just flip
flipUP=false;
if (pSAR<=Low[pos+1] && cSAR>=High[pos]){flipUP=true;}
flipDN=false;
if (pSAR>=High[pos+1] && cSAR<=Low[pos]){flipDN=true;}
//
// Show all the indicators based on switches
//
// rising crosses with LOW SAR ONLY
if (rising){Buffer7[pos]=cEMA10; above=0; below=0;} //WHITE BOX
// falling crosses with HIGH SAR ONLY
if (falling){Buffer3[pos]=cEMA10; above=0; below=0;} //RED BOX
//SAR crossed above EMA40
if (pSAR<pEMA40 && cSAR>=cEMA40 && !flipUP && !flipDN){Buffer8[pos]=cSAR;}
//SAR crossed below EMA40
if (pSAR>pEMA40 && cSAR<=cEMA40 && !flipUP && !flipDN){Buffer4[pos]=cSAR;}
if (sarHI) above++; // count how long SAR has been up
if (sarLO) below++; // count how long SAR has been down
if (flipUP && below<=6){Buffer1[pos]=cSAR;}
if (flipDN && above<=6){Buffer5[pos]=cSAR;}
pos--;
}
return(0);
}
//+------------------------------------------------------------------+
Comments