Trendsignal version 2

Author: pankajbhaban@gmail.com
Trendsignal version 2
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt sends emails
0 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

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---