Trendsignal_v1

Download script
Trendsignal_v1

This tool is designed to analyze market trends and identify specific entry points by evaluating price movement patterns and momentum. Instead of relying on a single data point, it scans historical price action to determine whether the current trend is strong enough to generate a reliable signal.

Core Logic Overview

The script operates by performing three primary types of analysis:

1. Volatility and Range Assessment The tool first establishes a "baseline" for what constitutes a normal price move. It looks at a recent window of candles to calculate the average size of the price range (the difference between the highs and lows). This helps the script distinguish between standard market noise and significant trend shifts.

2. Trend Validation (True Movement) Once it knows the average range, the logic searches for "true" movements. It looks for two specific conditions:

  • Gap/Breakout Detection: It checks if the price has jumped significantly enough to exceed a certain multiple of the average range.
  • Momentum Confirmation: It verifies if the price has moved far enough over a set period to confirm sustained momentum rather than a momentary spike.

If these conditions are met, the script dynamically adjusts its internal settings to focus more sharply on the current trend's strength.

3. Momentum Scoring and Signal Generation The tool then uses a weighted percentage calculation (similar to a Williams %R oscillator) to score the current momentum based on the findings above. This score is then compared against specific thresholds:

  • Buy Signals: If the momentum drops below a specific "oversold" floor after showing a recovery pattern, it identifies a potential upward move.
  • Sell Signals: If the momentum rises above a specific "overbought" ceiling after showing a reversal pattern, it identifies a potential downward move.

Visual Output

The result of this logic is displayed on your chart as visual markers (arrows).

  • Magenta Arrows indicate identified areas where the trend dynamics suggest an upward move.
  • Aqua Arrows indicate identified areas where the trend dynamics suggest a downward move.

By combining volatility analysis with momentum scoring, the script aims to filter out "choppy" market behavior and highlight moments where price action confirms a shift in direction.

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

//+------------------------------------------------------------------+
//| //| Ramdass - Conversion only
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

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

//---- buffers
double val1[];
double val2[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,234);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,233);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| ASCTrend1sig                                                     |
//+------------------------------------------------------------------+
int start()
  {
   if (CountBars>=1000) CountBars=950;
   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;
   double Table_value2[1000];
   
   value10=3+RISK*2;
   x1=67+RISK;
   x2=33-RISK;
   value11=value10;
//----
   if(Bars<=11+1) return(0);
//---- initial zero
   if(counted_bars<11+1)
   {
      for(i=1;i<=0;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=0;i++) val2[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)
	Table_value2[shift]=value2;
	val1[shift]=0;
	val2[shift]=0;
	value3=0;
	if (value2<x2)
		{i1=1;
		while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
		if (Table_value2[shift+i1]>x1) 
			{
			value3=High[shift]+Range*0.5;
			val1[shift]=value3;
			} 
		}
	if (value2>x1)
		{i1=1;
		while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
		if (Table_value2[shift+i1]<x2) 
			{
			value3=Low[shift]-Range*0.5;
			val2[shift]=value3;
			}
		}
      
      shift--;
     }

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


Comments