5minYANS_IND_01_v1

Download script
Author: Ron T
5minYANS_IND_01_v1

This 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.

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