5minYANS_IND_01

Author: Ron T
5minYANS_IND_01

This indicator is designed to provide visual trading signals on a MetaTrader chart by analyzing the relationship between three core technical components: Exponential Moving Averages (EMA), the Parabolic SAR (Stop and Reverse) indicator, and price action.

Instead of just showing these lines, the script identifies specific "trigger moments" where these indicators interact in significant ways, marking them on your chart with various shapes and arrows. Here is a breakdown of the logic:

Core Technical Logic

The script constantly monitors the following conditions to determine when to place a signal:

1. Moving Average Crosses (Trend Shifts)

  • Bullish Signal: The script looks for a "Golden Cross" scenario, where a fast-moving average (10-period) crosses upward over a slower-moving average (40-period). This identifies a potential shift into an upward trend.
  • Bearish Signal: Conversely, it monitors for a "Death Cross," where the fast average crosses downward below the slow average, indicating a potential move into a downtrend.

2. Parabolic SAR Interactions The script tracks the Parabolic SAR to identify momentum shifts:

  • Trend Flips: It marks points where the SAR flips from being below the price (bullish) to above the price (bearish), and vice versa.
  • SAR vs. Long-Term Trend: It also detects unique moments when the SAR crosses the 40-period EMA. This helps identify when short-term momentum is moving against the long-term average.

3. The "Quality" Filter (Advanced Timing) The logic includes a sophisticated filtering system to ensure signals are not generated during "noisy" market conditions:

  • Time Duration: The script tracks how many periods the SAR has remained in a specific position (above or below the price).
  • Trend Stability: It uses a counter to measure the time elapsed since the last Moving Average cross.
  • Validation: For certain "Box" signals, the script requires the trend to have been stable for at least 7 periods. This ensures that the indicator only marks signals during established moves rather than volatile, flickering price action.

Visual Representation on Chart

Rather than cluttering your screen with lines, the script converts these mathematical triggers into clear visual markers:

  • Arrows: Used to highlight primary trend reversals from the Moving Average crosses and Parabolic SAR flips.
  • Boxes/Special Markers: Used to highlight "qualified" signals—those that meet the specific stability requirements (the 7-period rule), helping you distinguish between high-probability trend continuations and standard price fluctuations.
Price Data Components
Indicators Used
Moving average indicatorParabolic Stop and Reverse system
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
5minYANS_IND_01
//+------------------------------------------------------------------+
//| 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