YANS_IND_04_v1

Author: Ron T
YANS_IND_04_v1

This script is a technical analysis tool designed to provide visual trading signals on a chart by filtering price action through three specific mathematical lenses: Exponential Moving Averages (EMA), the Parabolic SAR, and Relative Price Positioning. Rather than overwhelming the user with raw data, the logic focuses on identifying "confluence"—moments where multiple trend indicators agree simultaneously.

Core Logic Overview

The tool operates by scanning historical price data to identify specific geometric relationships between different technical indicators. It uses three primary components to make its determinations:

  • Moving Average Crosses (EMA 10 & 40): The script monitors the relationship between a fast-moving average (10 periods) and a slower-moving average (40 periods). When these lines cross, it signals a potential change in momentum.
  • Parabolic SAR Positioning: This is used as a trend-following "stop" indicator. The script checks whether the SAR dots are currently appearing above or below the price candles to determine the prevailing trend direction.
  • Momentum Flips: The logic specifically looks for sudden "flips" in the Parabolic SAR, identifying the exact moment the trend reverses from upward to downward (or vice-versa).

Signal Generation Logic

The script translates these calculations into eight distinct visual markers on the chart. These are categorized by color and shape to represent different levels of confirmation:

1. Trend Reversal Boxes (Red & White) These appear when a Moving Average cross occurs, but only if the Parabolic SAR confirms the direction.

  • A White Box appears when the fast average crosses above the slow average while the SAR confirms an upward trend.
  • A Red Box appears when the fast average crosses below the slow average while the SAR confirms a downward trend.

2. SAR Momentum Crosses (Dots) The script identifies specific instances where the Parabolic SAR line physically crosses the 40-period Moving Average.

  • It marks a Red Dot when the SAR crosses from above to below the EMA, suggesting a move into a bearish state.
  • It marks a White Dot when the SAR crosses from below to above the EMA, suggesting a move into a bullish state.

3. Immediate Trend Flips (Arrows) The script looks for rapid "flips" in the Parabolic SAR and applies a "cooldown" logic to them.

  • An Up Arrow appears when the SAR flips upward, provided it has been in a downward state for no more than 6 periods.
  • A Down Arrow appears when the SAR flips downward, provided it has been in an upward state for no more than 6 periods.

Summary of Behavior

In professional terms, this script acts as a trend-confirmation filter. It ignores minor price fluctuations and only plots a signal when a trend change is validated by both the moving average "crossover" and the Parabolic SAR's position relative to the price. By using multiple visual symbols (Boxes, Dots, and Arrows), it allows a trader to distinguish between a confirmed trend shift, a momentum crossover, and an immediate trend flip.

Price Data Components
Indicators Used
Moving average indicatorParabolic Stop and Reverse system
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
YANS_IND_04_v1
//+------------------------------------------------------------------+
//| 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