AltrTrend_Signal_v2_2-Alert

Download script
AltrTrend_Signal_v2_2-Alert

This tool is designed to identify significant shifts in market momentum by analyzing price action patterns and volatility. Rather than simply following the price, it looks for specific structural "breakouts" to signal when a trend has officially changed direction.

How the Logic Works

The script operates by evaluating the relationship between current prices and a dynamic range established by recent history. Here is the step-by-step breakdown of its logic:

1. Dynamic Range Calculation The tool first calculates how much the price has been moving recently. It determines a "lookback period" based on the market's volatility—meaning, in a fast-moving market, it looks at a shorter window, and in a slow market, it expands its view. It then finds the highest high and lowest low within that specific window to establish the current price boundaries.

2. The "Buffer Zone" (Signal Filtering) To prevent the tool from giving false signals during minor price fluctuations, it creates a mathematical buffer zone. Instead of triggering a signal the moment a price touches a boundary, it requires the price to move beyond a calculated percentage of that range. This acts as a filter, ensuring that only decisive moves are flagged as actual trend changes.

3. Trend Detection & Signal Triggering The script constantly monitors whether the closing price has breached the upper or lower boundaries:

  • Bullish Shift: If the price closes significantly above the upper boundary of the calculated range, the logic identifies a potential move to an upward trend and places a visual signal.
  • Bearish Shift: If the price closes significantly below the lower boundary, it identifies a potential downward trend and places its corresponding signal.

4. Automated Alerts The tool is programmed to monitor the very latest price action in real-time. When a new trend shift is confirmed on the current candle, the script triggers an audible alert. This allows traders to receive immediate notification of a trend change without having to constantly watch the screen.

Summary for the User

In simple terms, this script acts as a "trend hunter." It ignores the "noise" of daily market movement by calculating how much the price normally moves and only alerts you when the price breaks out of that normal behavior with enough force to suggest a new direction is forming.

Indicators Used
Movement directional index
Miscellaneous
Implements a curve of type %1It plays sound alerts
11 Views
0 Downloads
0 Favorites
AltrTrend_Signal_v2_2-Alert
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2.mq4 
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property  copyright "Author - OlegVS, GOODMAN"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Chartreuse
#property indicator_color2 Yellow

#property indicator_width1 2
#property indicator_width2 2

//---- input parameters
extern int K=30;
extern double Kstop=0.5;
extern int Kperiod=150;
extern int PerADX=14;
extern int CountBars=350;
extern int SoundON=1; //zakton's


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

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()
  {   
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+PerADX);
   SetIndexDrawBegin(1,Bars-CountBars+PerADX);
   int i,shift,counted_bars=IndicatorCounted();
   int i1,i2;
   double Range,AvgRange,smin,smax,SsMax,SsMin,SSP,price;
   bool uptrend,old;
//----
   if(Bars<=PerADX+1) return(0);
//---- initial zero
   if(counted_bars<PerADX+1)
   {
      for(i=1;i<=PerADX;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=PerADX;i++) val2[CountBars-i]=0.0;
   }
//----


for (shift = CountBars-PerADX; shift>=0; shift--) 
{ 

SSP=MathCeil(Kperiod/iADX(NULL,0,PerADX,PRICE_CLOSE,MODE_MAIN,1));
	Range=0;
	AvgRange=0;
	for (i1=shift; i1<=shift+SSP; i1++)
		{AvgRange=AvgRange+MathAbs(High[i1]-Low[i1]);
		}
	Range=AvgRange/(SSP+1);

SsMax=High[shift]; SsMin=Low[shift]; 
   for (i2=shift;i2<=shift+SSP-1;i2++)
        {
         price=High[i2];
         if(SsMax<price) SsMax=price;
         price=Low[i2];
         if(SsMin>=price)  SsMin=price;
        }
 
smin = SsMin+(SsMax-SsMin)*K/100; 
smax = SsMax-(SsMax-SsMin)*K/100; 
	val1[shift]=0;
	val2[shift]=0;
	if (Close[shift]<smin)
		{
		uptrend = false;
		}
	if (Close[shift]>smax)
		{
		uptrend = true;
		}
   if (uptrend!=old && uptrend==true) {val1[shift]=Low[shift]-Range*Kstop;}
   
   if (uptrend!=old && uptrend==false) {val2[shift]=High[shift]+Range*Kstop;}
   old=uptrend;

// zakton's code   
   if ((shift == 0) && (SoundON == 1)) {
      if (val1[0] > 0) PlaySound("ReadyToExit.wav");
   }
   
   if ((shift == 0) && (SoundON == 1)) {
      if (val2[0] > 0) PlaySound("ReadyToExit.wav");
   }
}
   return(0);
  }
//+------------------------------------------------------------------+

Comments