5minYANS_IND_01_v1
Download scriptThis custom indicator is designed to provide visual market signals by monitoring the relationship between several key technical analysis tools: Exponential Moving Averages (EMA), Parabolic SAR (PSAR), and price action. Rather than relying on a single metric, it looks for "qualitative" confirmations where multiple conditions align simultaneously to identify potential trend shifts or entries.
Core Trading Logic
The tool operates by tracking four primary types of market behaviors:
1. Moving Average Crossovers The script continuously compares two different Exponential Moving Averages—one fast (10-period) and one slow (40-period).
- When the faster average crosses above the slower one, it signals a potential upward momentum shift.
- When the faster average crosses below the slower one, it signals a potential downward momentum shift.
2. Parabolic SAR Dynamics The indicator tracks the Parabolic SAR (a trend-following tool that usually appears as dots on a chart). It identifies two specific behaviors:
- SAR Shifts: It detects when the SAR flips from being below the price to above it (or vice versa), which traditionally indicates a change in trend direction.
- Momentum Duration: The logic includes a "counting" mechanism that tracks how long the SAR has remained on one side of the price. This helps distinguish between a fresh trend change and an overextended market move.
3. Combined Trend Confirmations (Hybrid Signals) To reduce "noise" and false signals, the script looks for intersections between different indicators:
- It monitors instances where the Parabolic SAR crosses the 40-period Moving Average.
- It uses a specific timeframe check to ensure that the trend has enough "room" to move. For example, it evaluates whether the market has been consistently staying above or below certain thresholds over a specific period before validating a signal.
Visual Output
The logic translates these mathematical calculations into eight distinct visual markers on your chart:
- Arrows and Boxes: These represent high-probability trend shifts, such as when an EMA crossover coincides with a SAR momentum shift.
- Signal Filtering: Some markers only appear if the market has remained stable for a minimum number of periods (a "quiet" period), preventing the indicator from triggering signals during erratic, sideways price action.
In summary, this script acts as a multi-layered filter. It doesn't just tell you when a price moves; it waits for the Moving Averages, the Parabolic SAR, and specific price momentum thresholds to all agree on a direction before placing a visual signal on your trading screen.
/*-----------------------------+
| |
| 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 HotPink
#property indicator_color3 Red
#property indicator_color4 MistyRose
#property indicator_color5 White
#property indicator_color6 LightGray
#property indicator_color7 White
#property indicator_color8 DarkGray
//---- 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);
SetIndexBuffer(0, Buffer1);
SetIndexArrow(0,159); //up
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1, Buffer2);
SetIndexArrow(1,159); //down
SetIndexStyle(2,DRAW_ARROW);
SetIndexBuffer(2, Buffer3);
SetIndexArrow(2,120);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(3, Buffer4);
SetIndexArrow(3,159);
SetIndexStyle(4,DRAW_ARROW);
SetIndexBuffer(4, Buffer5);
SetIndexArrow(4,159);
SetIndexStyle(5,DRAW_ARROW);
SetIndexBuffer(5, Buffer6);
SetIndexArrow(5,159);
SetIndexStyle(6,DRAW_ARROW);
SetIndexBuffer(6, Buffer7);
SetIndexArrow(6,120);
SetIndexStyle(7,DRAW_ARROW);
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 |
//+------------------------------------------------------------------+
// Current position if 55/45 or over/under. Does any of
// the previous 'qual' period ever fall below55/above45? (last11)
//
// If qual*2 periods have been above55/below45
// then lets not try to transact any more (last22)
int start()
{
int pos=Bars-100; // leave room for moving average periods
double cEMA10=0, pEMA10=0;
double cEMA40=0, pEMA40=0;
double cSAR=0, pSAR=10;
double pip=Point();
double spread=pip*3;
int pTRANS; // 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
while(pos>=0)
{
pTRANS++;
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);
if (pEMA10<cEMA40 && cEMA10>cEMA40)
{
Buffer1[pos]=cEMA10; // rising cross
pTRANS=0; // clear period counter
}
if (pEMA10>cEMA40 && cEMA10<cEMA40)
{
Buffer5[pos]=cEMA10; // falling cross
pTRANS=0; // clear period counter
}
if (pSAR<cSAR && cSAR>=High[pos])
{
Buffer2[pos]=cSAR; // rising SAR
if (below<=7 && pTRANS>=7) Buffer3[pos]=cSAR; // Box Indicator
above=0;
below=0;
}
if (pSAR>cSAR && cSAR<=Low[pos])
{
Buffer6[pos]=cSAR; // falling SAR
if (above<=7 && pTRANS>=7) Buffer7[pos]=cSAR; // Box Indicator
above=0;
below=0;
}
if (pSAR<cEMA40 && cSAR>cEMA40) Buffer4[pos]=cEMA40; //rising SAR/EMA40 cross
if (pSAR>cEMA40 && cSAR<cEMA40) Buffer8[pos]=cEMA40; //falling SAR/EMA40 cross
if (cSAR>High[pos]) above++; // count how long SAR has been up
if (cSAR<Low[pos]) below++; // count how long SAR has been down
pos--;
}
return(0);
}
//+------------------------------------------------------------------+
Comments