100ma_qual_v1

Download script
Author: Ron T
100ma_qual_v1

This trading indicator is designed to identify specific market trends and potential entry points by analyzing the relationship between different moving averages. It focuses on detecting momentum shifts and "quality" signals rather than just raw price action.

Core Logic and Mechanism

The script operates by monitoring three distinct types of Linear Weighted Moving Averages (LWMA), which are calculated based on opening prices:

  • Short-term Average: A fast-moving average reflecting immediate price changes.
  • Medium-term Average: A mid-range indicator that smooths out minor fluctuations.
  • Long-term Average: A slower average representing the broader market trend.

Trend Identification

The primary logic revolves around "crossovers"—the moment a medium-term average crosses over a long-term average.

  • Bullish Signal (Rising): The script identifies a potential upward trend when the medium-term average moves from below the long-term average to above it.
  • Bearish Signal (Falling): The script identifies a potential downward trend when the medium-term average moves from above the long-term average to below it.

Signal Filtering (The "Qual" Logic)

To prevent false signals caused by market noise, the indicator employs a validation system based on duration:

  1. Tracking: Once a crossover occurs (either rising or falling), the script begins counting how many consecutive bars the medium-term average remains on that side of the long-term average.
  2. Validation: A signal is only considered "qualified" and visualized on the chart once the trend has persisted for more than 30 periods. This ensures that the indicator ignores temporary spikes and only highlights sustained, stable movements.

Visual Output

When these conditions are met, the script places specific visual markers (arrows or dots) on the chart:

  • Bullish Markers: Placed when a sustained rising trend is confirmed after the 30-period threshold.
  • Bearish Markers: Placed when a sustained falling trend is confirmed after the 30-period threshold.

By combining crossover detection with a mandatory duration requirement, this tool helps traders filter out "choppy" price action and focus on established directional moves in the market.

Price Data Components
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
100ma_qual_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 DarkGray
#property indicator_color4 Red

#property indicator_color5 White
#property indicator_color6 LightGray
#property indicator_color7 DarkGray
#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
   // 158 little dot
   // 168 open square
   // 120 box with X
   
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexBuffer(0, Buffer1);
   SetIndexArrow(0,159);
   
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexBuffer(1, Buffer2);
   SetIndexArrow(1,158);

   SetIndexStyle(2,DRAW_ARROW);
   SetIndexBuffer(2, Buffer3);
   SetIndexArrow(2,112);

   SetIndexStyle(3,DRAW_ARROW);
   SetIndexBuffer(3, Buffer4);
   SetIndexArrow(3,120);

   SetIndexStyle(4,DRAW_ARROW);
   SetIndexBuffer(4, Buffer5);
   SetIndexArrow(4,159);

   SetIndexStyle(5,DRAW_ARROW);
   SetIndexBuffer(5, Buffer6);
   SetIndexArrow(5,158);

   SetIndexStyle(6,DRAW_ARROW);
   SetIndexBuffer(6, Buffer7);
   SetIndexArrow(6,112);

   SetIndexStyle(7,DRAW_ARROW);
   SetIndexBuffer(7, Buffer8);
   SetIndexArrow(7,120);

   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
   int      ctr=0;

   double   cMAfst=0, pMAfst=0;
   double   cMAmid=0, pMAmid=0;
   double   cMAslo=0, pMAslo=0;
   double   MA100=0;
   
   bool     rising=false;
   bool    falling=false;
      
   double p=Point();
   
   while(pos>=1)
     {

      cMAfst=iMA(Symbol(),0,5  ,0,MODE_LWMA,PRICE_OPEN, pos);
      pMAfst=iMA(Symbol(),0,5  ,0,MODE_LWMA,PRICE_OPEN, pos+1);

      cMAmid=iMA(Symbol(),0,25 ,0,MODE_LWMA,PRICE_OPEN, pos);
      pMAmid=iMA(Symbol(),0,25 ,0,MODE_LWMA,PRICE_OPEN, pos+1);
      
      cMAslo=iMA(Symbol(),0,100,0,MODE_LWMA,PRICE_OPEN, pos);
      pMAslo=iMA(Symbol(),0,100,0,MODE_LWMA,PRICE_OPEN, pos+1);

      // rising
      if (pMAmid<=pMAslo && cMAmid>=cMAslo)
        {
         rising=true;
         falling=false;
         ctr=0;
        }

      //falling
      if (pMAmid>=pMAslo && cMAmid<=cMAslo)
        {
         rising=false;
         falling=true;
         ctr=0;
        }
      
      ctr++;
      if (ctr>30 && falling) {Buffer1[pos]=cMAmid;}
      if (ctr>30 && rising)  {Buffer5[pos]=cMAmid;}

 	   pos--;
     }

   return(0);
  }
//+------------------------------------------------------------------+

Comments