mj_ADXFilter_v1.0

Download script
Author: Copyright � 2007, Forex-TSD.com
mj_ADXFilter_v1.0

This tool is designed to act as a visual filter for traders, helping them identify the strength and direction of market trends more clearly. It uses a specialized technical indicator called the Average Directional Index (ADX) to categorize market behavior into four distinct states.

How the Logic Works

The script analyzes price action by looking at two primary components: the overall trend strength and the specific direction of price movement. By combining these, it categorizes the market into one of four scenarios:

1. Mild Upward Movement (Weak Trend) When the market is moving upwards but lacks significant momentum or "strength," the tool identifies this as a mild trend. This suggests that while the price is climbing, the move may be sluggish or lacks heavy buying pressure.

2. Strong Upward Movement (Powerful Trend) When the market shows both clear upward movement and high momentum, the tool signals a strong uptrend. This indicates a robust period of buying activity where the trend is well-established.

3. Mild Downward Movement (Weak Trend) Conversely, if the price is drifting downward but without significant force, the tool recognizes this as a mild downtrend. It identifies a lack of aggressive selling pressure, suggesting a quieter decline.

4. Strong Downward Movement (Powerful Trend) When the market exhibits both clear downward movement and high momentum, the tool signals a strong downtrend. This identifies a period of heavy selling activity where the downward move is dominant.

Visual Presentation

To make this information easy to read at a glance, the script displays these four states as distinct visual bars on your chart:

  • UpTrend: Highlights active bullish movement.
  • DownTrend: Highlights active bearish movement.
  • Mild UpTrend: Identifies gentle buying pressure.
  • Mild DownTrend: Identifies gentle selling pressure.

By using this logic, the tool helps filter out "noise" in the market, allowing you to see whether a move is just a minor fluctuation or a significant trend shift.

Indicators Used
Movement directional index
Miscellaneous
Implements a curve of type %1
18 Views
0 Downloads
0 Favorites
mj_ADXFilter_v1.0
//+------------------------------------------------------------------+
//|                                                    ADXFilter.mq4 |
//|                                  Copyright © 2006, Forex-TSD.com |
//|                                                Written by mj_bolt|   
//|                                                                  |                                      
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Forex-TSD.com "
#property link      "http://www.forex-tsd.com/"

#property indicator_separate_window
#property indicator_minimum -0.05
#property indicator_maximum 1.05
#property indicator_buffers 4
#property indicator_color1 MediumBlue
#property indicator_color2 Crimson
#property indicator_color3 LightBlue
#property indicator_color4 Orange



//---- input parameters
extern int PeriodADX=14;

//---- indicator buffers
double UpBuffer1[];
double DnBuffer1[];
double UpBuffer2[];
double DnBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
  int init()
  {
   string short_name;
   
//---- indicator line
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,2);
   
   SetIndexBuffer(0,UpBuffer1);
   SetIndexBuffer(1,DnBuffer1);
   SetIndexBuffer(2,UpBuffer2);
   SetIndexBuffer(3,DnBuffer2);
   
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   
//---- name for DataWindow and indicator subwindow label
   short_name="ADX Filter("+PeriodADX+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"UpTrend");
   SetIndexLabel(1,"DownTrend");
   SetIndexLabel(2,"Mild UpTrend");
   SetIndexLabel(3,"Mild DownTrend");
   
//----
   SetIndexDrawBegin(0,PeriodADX);
   SetIndexDrawBegin(1,PeriodADX);
   SetIndexDrawBegin(2,PeriodADX);
   SetIndexDrawBegin(3,PeriodADX);
     
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| ADXFilter                                                         |
//+------------------------------------------------------------------+
int start()
  {
   int shift,trend;
   double ADX0,ADX1,ADX2;

   
   for(shift=Bars-PeriodADX-1;shift>=0;shift--)
   {	
   ADX0=iADX(NULL,0,PeriodADX,PRICE_CLOSE,MODE_MAIN,shift);
   ADX1=iADX(NULL,0,PeriodADX,PRICE_CLOSE,MODE_PLUSDI,shift);
   ADX2=iADX(NULL,0,PeriodADX,PRICE_CLOSE,MODE_MINUSDI,shift);
   	
	  if (ADX0<20 && ADX1>ADX2)  trend=1;
	  if (ADX0>20 && ADX1>ADX2)  trend=2;  
	  if (ADX0<20 && ADX2>ADX1)  trend=-1;
	  if (ADX0>20 && ADX2>ADX1)  trend=-2;
	  
	  if (trend==1) 
	  {
	  
	  UpBuffer1[shift]=0;
	  UpBuffer2[shift]=1;
	  DnBuffer1[shift]=0;
	  DnBuffer2[shift]=0;
	  
	  }
	  if (trend==2) 
	  {
	  
	  UpBuffer1[shift]=1;
	  UpBuffer2[shift]=0;
	  DnBuffer1[shift]=0;
	  DnBuffer2[shift]=0;
	  
	  }
	  if (trend==-1) 
	  {
	   
	  UpBuffer1[shift]=0;
	  UpBuffer2[shift]=0;
	  DnBuffer1[shift]=0;
	  DnBuffer2[shift]=1;
	  }
	  
	  if (trend==-2) 
	  {
	  
	  UpBuffer1[shift]=0;
	  UpBuffer2[shift]=0;
	  DnBuffer1[shift]=1;
	  DnBuffer2[shift]=0; 
	  
	  }
	}
	return(0);	
 }

Comments