nd1_v1

This tool is designed to help traders identify market trends by analyzing price movements and volatility. Instead of just looking at the raw price, it evaluates how "strong" a move is relative to the recent history of the market, helping to distinguish between significant trend changes and minor market noise.

How the Logic Works

The script processes the market data through several distinct logical steps:

1. Volatility Measurement First, the tool looks at a small window of recent price bars to calculate the average size of the candles (the difference between the high and low points). This establishes a "baseline" for what a normal price movement looks like in the current market environment.

2. Identifying Significant Breaks The logic then scans for two specific types of movement:

  • Gap Analysis: It checks if there is a sudden jump or gap in prices that is significantly larger than the average volatility.
  • Momentum Shifts: It looks for sharp, rapid price changes over a short period to see if the market is reacting aggressively.

3. Dynamic Sensitivity Adjustment Based on whether these "significant breaks" occur, the tool automatically adjusts its internal sensitivity. If the market is showing explosive, high-momentum behavior, the tool tightens its logic to react more quickly. If the market is moving steadily without sudden spikes, it uses a broader, more stable setting to avoid "false alarms."

4. Trend Filtering (The WPR Component) Once the volatility and momentum are assessed, the tool uses a percentage-based oscillator to determine where the price sits relative to its recent range. It calculates how overbought or oversold the market is.

Visual Output

The final result is translated into visual signals on your chart:

  • Bullish Signals: When the calculated momentum exceeds a specific upper threshold, the tool identifies an upward trend.
  • Bearish Signals: When the momentum falls below a specific lower threshold, it identifies a downward trend.

By combining volatility analysis with momentum filtering, the logic aims to provide a clearer picture of the market direction, highlighting when a trend has enough strength to be considered a reliable move rather than just a temporary fluctuation.

Indicators Used
Larry William percent range indicator
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
nd1_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+-----------------------------------------------------------------------+
//|                                                       BrainTrend1.mq4 |
//|                                   Copyright © 2005. Alejandro Galindo |
//|                                                   http://elCactus.com |
//|         ASCTrend1 modified to generate similar signals to BrainTrend1 |
//|           	Author := C0Rpus - big thanks CHANGE2002, STEPAN and SERSH |
//|	                                 Notes := ASCTrend1 3.0 Open Source |
//+-----------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue

//---- input parameters
extern int RISK=3;
extern int CountBars=5000;

//---- buffers
double Buffer1[];
double Buffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_HISTOGRAM,0,1);
   SetIndexStyle(1,DRAW_HISTOGRAM,0,1);
   SetIndexBuffer(0,Buffer1);
   SetIndexBuffer(1,Buffer2);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| ASCTrend1                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+11+1);
   SetIndexDrawBegin(1,Bars-CountBars+11+1);
   int i,shift,counted_bars=IndicatorCounted();
   int Counter,i1,value10,value11;
   double value1,x1,x2;
   double value2,value3;
   double TrueCount,Range,AvgRange,MRO1,MRO2;
   
   value10=3+RISK*2;
   x1=67+RISK;
   x2=33-RISK;
   value11=value10;
//----
   if(Bars<=value11+1) return(0);
//---- initial zero
   if(counted_bars<value11+1)
   {
      for(i=1;i<=0;i++) Buffer1[CountBars-i]=0.0;
      for(i=1;i<=0;i++) Buffer2[CountBars-i]=0.0;
   }
//----
   shift=CountBars-11-1;
   while(shift>=0)
     {
     
   Counter=shift;
	Range=0.0;
	AvgRange=0.0;
	for (Counter=shift; Counter<=shift+9; Counter++) AvgRange=AvgRange+MathAbs(High[Counter]-Low[Counter]);
		
	Range=AvgRange/10;
	Counter=shift;
	TrueCount=0;
	while (Counter<shift+9 && TrueCount<1)
		{if (MathAbs(Open[Counter]-Close[Counter+1])>=Range*2.0) TrueCount=TrueCount+1;
		Counter=Counter+1;
		}
	if (TrueCount>=1) {MRO1=Counter;} else {MRO1=-1;}
	Counter=shift;
	TrueCount=0;
	while (Counter<shift+6 && TrueCount<1)
		{if (MathAbs(Close[Counter+3]-Close[Counter])>=Range*4.6) TrueCount=TrueCount+1;
		Counter=Counter+1;
		}
	if (TrueCount>=1) {MRO2=Counter;} else {MRO2=-1;}
	if (MRO1>-1) {value11=3;} else {value11=value10;}
	if (MRO2>-1) {value11=4;} else {value11=value10;}
	value2=100-MathAbs(iWPR(NULL,0,value11,shift)); // PercentR(value11=9)
   Buffer1[shift]=0;
	Buffer2[shift]=0;
	if (value2>x1)
		{
		Buffer1[shift]=Low[shift]; Buffer2[shift]=High[shift];
		}
	if (value2<x2)
		{
		Buffer1[shift]=High[shift]; Buffer2[shift]=Low[shift];
		}
      
      shift--;
     }

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


Comments