Trendsignal version 2

Download script
Author: pankajbhaban@gmail.com
Trendsignal version 2

The Trendsignal version 2 script is designed to analyze market price movements and identify significant shifts in trend direction. Rather than reacting to every minor price flicker, it focuses on identifying structural changes in the market to provide clear "Buy" and "Sell" signals.

How the Logic Works

1. Market Range Analysis The tool begins by calculating the typical volatility of the market over a specific lookback period. It measures the average distance between the highest and lowest prices reached during that timeframe. This allows the script to understand how much the price normally moves, helping it distinguish between normal "noise" and actual significant trends.

2. Dynamic Support and Resistance Levels For every point in time, the script identifies the highest and lowest prices within its lookback window. It then calculates two critical price thresholds:

  • Upper Threshold: A level slightly below the recent peak.
  • Lower Threshold: A level slightly above the recent floor.

These levels act as "tripwires." By using a customizable risk percentage, the script determines how far away from the absolute highs or lows these thresholds should be placed, ensuring that a signal is only triggered when the price breaks out convincingly.

3. Trend Detection and Signal Generation The core logic monitors whether the current closing price has crossed these calculated thresholds:

  • Buy Signals: When the price closes above the upper threshold, the script identifies an upward trend shift. It places a visual marker (an arrow) on the chart and triggers a notification.
  • Sell Signals: When the price closes below the lower threshold, the script identifies a downward trend shift, placing a corresponding marker and alert.

4. Visual and Notification Features To ensure the trader is informed in real-time, the script provides three layers of feedback:

  • On-Chart Visuals: It draws arrows to highlight exactly where a trend change occurred and maps out "Potential Targets" to help with profit planning.
  • Pop-up Alerts: Immediate audible/visual alerts are triggered on the trading platform when a new signal appears on the current candle.
  • Email Notifications: If enabled, the script can automatically send an email summary containing the signal type, the specific asset, and the current price, allowing for monitoring outside of the terminal.

Summary for the User

Essentially, this tool automates the process of "watching" the market for breakouts. It filters out minor price fluctuations by requiring the market to move significantly beyond recent highs or lows before it confirms a new trend, aiming to provide the trader with clearer entry points and objective trend reversals.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt sends emails
9 Views
0 Downloads
0 Favorites
Trendsignal version 2
//+------------------------------------------------------------------+
//|                                        Trendsignal version 2.mq4 |
//|                                                    Pankaj Bhaban |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "pankajbhaban@gmail.com"
#property link      "trendsignal.co.in"


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Magenta
#property indicator_color3 White

#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 2

//---- input parameters
extern int RISK=3;
extern int SSP=9;
 int CountBars=500;
 int Alert_Delay_In_Seconds=0;
extern bool Enablemail = false;
 string subjectUp="Buy signal";
 string subjectDown="Sell signal";
 string textUp="Long ";
 string textDown="Short ";

int PrevAlertTime=0;

//---- buffers
double val1[];
double val2[];
double alertBar;
double Mainbuffer[];
double UpperBuffer[];
double LowerBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
   IndicatorDigits( Digits );
   
   string short_name;
   //---- indicator line
   IndicatorBuffers(5);
   
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,233);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,234);
   SetIndexBuffer(0,val1);
   SetIndexBuffer(1,val2);
   
   //---- drawing settings
   SetIndexStyle(2,DRAW_SECTION);
   //---- indicator buffers mapping
   SetIndexBuffer(2,Mainbuffer);
   SetIndexBuffer(3,UpperBuffer);
   SetIndexBuffer(4,LowerBuffer);
   
   SetIndexLabel(0, "UP");
   SetIndexLabel(1, "DOWN");
   SetIndexLabel(2, "Potential targets");
   
   SetIndexEmptyValue(0, 0);
   SetIndexEmptyValue(1, 0);
   SetIndexEmptyValue(2, 0);
   
   //----
   return( 0 );
}
//+------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------+
int start()
{
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+SSP);
   SetIndexDrawBegin(1,Bars-CountBars+SSP);
   int i,shift,counted_bars=IndicatorCounted();
   int i1,i2,K;
   double Range,AvgRange,smin,smax,SsMax,SsMin,price;
   bool uptrend,old;
   //----
   
   if(Bars<=SSP+1) return(0);
   //---- initial zero
   if( counted_bars < SSP+1 ) {
      for(i=1;i<=SSP;i++) val1[CountBars-i]=0.0;
      for(i=1;i<=SSP;i++) val2[CountBars-i]=0.0;
   }
   //----
   
   K = 33-RISK;
   for( shift = CountBars-SSP; shift>=0; shift-- ) {
      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*0.5;
         Mainbuffer[shift]=val1[shift];
         if( Bars>alertBar && shift==0 && (CurTime() - PrevAlertTime > Period()*Alert_Delay_In_Seconds) ) {
         
         Alert("Trendsignal V2.0 ",Period(),""," Mins Timeframe",Symbol()," BUY @", Ask,"");alertBar = Bars;
if(Enablemail == true) {SendMail(subjectDown+" "+ Symbol(),textDown+" "+ Close[1]+" "+ Symbol()); }
            PrevAlertTime = CurTime();
         }
      }
      
      if( uptrend!=old && uptrend==false ) {
         
         val2[shift]=High[shift]+Range*0.5;
         Mainbuffer[shift]=val2[shift];
         if( Bars>alertBar && shift==0 && (CurTime() - PrevAlertTime > Period()*Alert_Delay_In_Seconds) ) {
         
         Alert("Trendsignal V2.0 ",Period(),"","Mins Timeframe ",Symbol()," SELL @", Bid,"");alertBar = Bars;
if(Enablemail == true) {SendMail(subjectUp +" "+ Symbol(),textUp+" "+ Close[1]+" " + Symbol());}
            PrevAlertTime = CurTime();
         }
      }
      
      Comment(shift);
      old=uptrend;
   }
   
   return(0);
}
//+------------------------------------------------------------------+

Comments