BBands_StopsV1A_mtf





//+------------------------------------------------------------------+
//|BBands_Stops_mtf                                 BBands Stops.mq4 |
//|                           Copyright © 2006, TrendLaboratory Ltd. |
//|            http://finance.groups.yahoo.com/group/TrendLaboratory |
//| (MTF ForexTSD.com 2007)mladen ki      E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, TrendLaboratory Ltd."
#property link      "http://finance.groups.yahoo.com/group/TrendLaboratory"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Goldenrod
#property indicator_color2 DeepPink
#property indicator_color3 Yellow
#property indicator_color4 Magenta
#property indicator_color5 Goldenrod
#property indicator_color6 DeepPink

#property  indicator_width3  3
#property  indicator_width4  3
#property  indicator_width5  2
#property  indicator_width6  2

//---- input parameters
extern int    Length =13;       // Bollinger Bands Period
extern double Deviation =1.62;    // Deviation was 2
extern double MoneyRisk =1.00; // Offset Factor
extern int    SignalMode =1;       // Display signals mode: 1-Signals & Stops; 0-only Stops; 2-only Signals; 3-no Signals;
extern int    Line=1;         // Display line mode: 0-no,1-yes  
extern int    Nbars=1500;
extern bool   AlertSoundON=false;
extern int TimeFrame = 0;
extern string  note_TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
extern string  note___SignalMode = "1-Signals&Stops;0-onlyStops;2-onlySignals;3-noSignals";

string IndicatorFileName;
//---- indicator buffers
double UpTrendBuffer[];
double DownTrendBuffer[];
double UpTrendSignal[];
double DownTrendSignal[];
double UpTrendLine[];
double DownTrendLine[];
bool TurnedUp = false;
bool TurnedDown = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
  int init()
  {
   string short_name;
//---- indicator line
   
   SetIndexBuffer(0,UpTrendBuffer);
   SetIndexBuffer(1,DownTrendBuffer);
   SetIndexBuffer(2,UpTrendSignal);
   SetIndexBuffer(3,DownTrendSignal);
   SetIndexBuffer(4,UpTrendLine);
   SetIndexBuffer(5,DownTrendLine);
   SetIndexStyle(0,DRAW_ARROW,0,0);
   SetIndexStyle(1,DRAW_ARROW,0,0);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexArrow(0,164);
   SetIndexArrow(1,164);
   SetIndexArrow(2,171);
   SetIndexArrow(3,171);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS+4));

//---- name for DataWindow and indicator subwindow label

   short_name="BBands Stops["+TimeFrame+"]";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"UpTrend Stop");
   SetIndexLabel(1,"DownTrend Stop");
   SetIndexLabel(2,"UpTrend Signal");
   SetIndexLabel(3,"DownTrend Signal");
   SetIndexLabel(4,"UpTrend Line");
   SetIndexLabel(5,"DownTrend Line");
//----
   SetIndexDrawBegin(0,Length);
   SetIndexDrawBegin(1,Length);
   SetIndexDrawBegin(2,Length);
   SetIndexDrawBegin(3,Length);
   SetIndexDrawBegin(4,Length);
   SetIndexDrawBegin(5,Length);
//----
   IndicatorFileName = WindowExpertName();

    if (TimeFrame < Period()) TimeFrame = Period();

   return(0);
  }

//+------------------------------------------------------------------+
//| Bollinger Bands_Stop_v1                                             |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars1=IndicatorCounted();
   int      limit1,i1;
   if(counted_bars1 < 0) return(-1);
   limit1 = Bars-counted_bars1;
   if (TimeFrame != Period())
      {
         limit1 = MathMax(limit1,TimeFrame/Period());
         datetime TimeArray[];
        ArrayCopySeries(TimeArray ,MODE_TIME ,NULL,TimeFrame);
            for(i1=0,int y=0; i1<limit1; i1++)
           {
              if(Time[i1]<TimeArray[y]) y++;
            UpTrendBuffer   [i1]   = iCustom(NULL,TimeFrame,IndicatorFileName,Length,Deviation,MoneyRisk,SignalMode,Line,Nbars,AlertSoundON,0,y);
            DownTrendBuffer [i1]   = iCustom(NULL,TimeFrame,IndicatorFileName,Length,Deviation,MoneyRisk,SignalMode,Line,Nbars,AlertSoundON,1,y);
            if (Time[i1]==TimeArray[y])UpTrendSignal   [i1]= iCustom(NULL,TimeFrame,IndicatorFileName,Length,Deviation,MoneyRisk,SignalMode,Line,Nbars,AlertSoundON,2,y);
            if (Time[i1]==TimeArray[y])DownTrendSignal [i1]= iCustom(NULL,TimeFrame,IndicatorFileName,Length,Deviation,MoneyRisk,SignalMode,Line,Nbars,AlertSoundON,3,y);
            UpTrendLine     [i1]   = iCustom(NULL,TimeFrame,IndicatorFileName,Length,Deviation,MoneyRisk,SignalMode,Line,Nbars,AlertSoundON,4,y);
            DownTrendLine   [i1]   = iCustom(NULL,TimeFrame,IndicatorFileName,Length,Deviation,MoneyRisk,SignalMode,Line,Nbars,AlertSoundON,5,y);

            }
         return(0);         
      }
   int    i,shift,trend;
   double smax[25000],smin[25000],bsmax[25000],bsmin[25000];
   
   for (shift=Nbars;shift>=0;shift--)
   {
   UpTrendBuffer[shift]=0;
   DownTrendBuffer[shift]=0;
   UpTrendSignal[shift]=0;
   DownTrendSignal[shift]=0;
   UpTrendLine[shift]=EMPTY_VALUE;
   DownTrendLine[shift]=EMPTY_VALUE;
   }
   
   for (shift=Nbars-Length-1;shift>=0;shift--)
   {	
     smax[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);
	  smin[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_LOWER,shift);
	
	  if (Close[shift]>smax[shift+1]) trend=1; 
	  if (Close[shift]<smin[shift+1]) trend=-1;
		 	
	  if(trend>0 && smin[shift]<smin[shift+1]) smin[shift]=smin[shift+1];
	  if(trend<0 && smax[shift]>smax[shift+1]) smax[shift]=smax[shift+1];
	  	  
	  bsmax[shift]=smax[shift]+0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);
	  bsmin[shift]=smin[shift]-0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);
		
	  if(trend>0 && bsmin[shift]<bsmin[shift+1]) bsmin[shift]=bsmin[shift+1];
	  if(trend<0 && bsmax[shift]>bsmax[shift+1]) bsmax[shift]=bsmax[shift+1];
	  
	  if (trend>0) 
	  {
	     if (SignalMode>0 && UpTrendBuffer[shift+1]==-1.0)
	     {
	     UpTrendSignal[shift]=bsmin[shift];
	     UpTrendBuffer[shift]=bsmin[shift];
	     if(Line>0) UpTrendLine[shift]=bsmin[shift];
     if (AlertSoundON==true && shift==0 && !TurnedUp)
         {
     Alert("BBands go Up",Symbol(),"-",Period());
                       TurnedUp = true;
            TurnedDown = false;
     }
	     }
	     else
	     {
	     UpTrendBuffer[shift]=bsmin[shift];
	     if(Line>0) UpTrendLine[shift]=bsmin[shift];
	     UpTrendSignal[shift]=-1;
	     }
	  if (SignalMode==2) UpTrendBuffer[shift]=0;   
	  DownTrendSignal[shift]=-1;
	  DownTrendBuffer[shift]=-1.0;
	  DownTrendLine[shift]=EMPTY_VALUE;
	  
	  if (SignalMode==3) 
	   {
	  UpTrendBuffer[shift]=0;   
	  UpTrendSignal[shift]=0;
//	  DownTrendBuffer[shift]=-1.0;
	  DownTrendLine[shift]=EMPTY_VALUE;
	   }
	  }
	  if (trend<0) 
	  {
	  if (SignalMode>0 && DownTrendBuffer[shift+1]==-1.0)
	     {
	     DownTrendSignal[shift]=bsmax[shift];
	     DownTrendBuffer[shift]=bsmax[shift];
	     if(Line>0) DownTrendLine[shift]=bsmax[shift];
     if (AlertSoundON==true && shift==0 && !TurnedDown)
         {
     Alert("BBands go Down",Symbol(),"-",Period());
            TurnedDown = true;
            TurnedUp = false;
     }
	     }
	     else
	     {
	     DownTrendBuffer[shift]=bsmax[shift];
	     if(Line>0)DownTrendLine[shift]=bsmax[shift];
	     DownTrendSignal[shift]=-1;
	     }
	  if (SignalMode==2) DownTrendBuffer[shift]=0;    
	  UpTrendSignal[shift]=-1;
	  UpTrendBuffer[shift]=-1.0;
	  UpTrendLine[shift]=EMPTY_VALUE;
	
		  if (SignalMode==3)
	  {
	  DownTrendBuffer[shift]=0;    
	  DownTrendSignal[shift]=0;
//	  UpTrendSignal[shift]=EMPTY_VALUE;
//	  UpTrendBuffer[shift]=-1.0;
	  UpTrendLine[shift]=EMPTY_VALUE;
     }
	
	  }
	  
	 }
	return(0);	
 }





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_LINE

Indicators Used:


Bollinger bands indicator


Custom Indicators Used:
IndicatorFileName

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen