//+------------------------------------------------------------------+ //| BBands Stops Bar.mq4 | //| Modified to Bar type by cja | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| BBands Stops.mq4 | //| Copyright © 2006, TrendLaboratory Ltd. | //| http://finance.groups.yahoo.com/group/TrendLaboratory | //| E-mail: igorad2004@list.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, TrendLaboratory Ltd." #property link "http://finance.groups.yahoo.com/group/TrendLaboratory" #property indicator_separate_window #property indicator_buffers 6 /*#property indicator_color1 White #property indicator_color2 Red #property indicator_color3 White*/ #property indicator_color4 Red #property indicator_color5 White #property indicator_color6 Red #property indicator_width5 3 #property indicator_width6 3 #property indicator_minimum 0 #property indicator_maximum 1 //---- input parameters extern int TimeFrame= 0; extern int Length=3; // Bollinger Bands Period extern int Deviation=1; // Deviation was 2 extern double MoneyRisk=1.00; // Offset Factor extern int Signal=1; // Display signals mode: 1-Signals & Stops; 0-only Stops; 2-only Signals; extern int Line=1; // Display line mode: 0-no,1-yes extern int Nbars=1000; //---- indicator buffers double UpTrendBuffer[]; double DownTrendBuffer[]; double UpTrendSignal[]; double DownTrendSignal[]; double UpTrendLine[]; double DownTrendLine[]; extern bool SoundON=true; bool TurnedUp = false; bool TurnedDown = false; string TimeFrameStr; //+------------------------------------------------------------------+ //| 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_NONE,0,0); SetIndexStyle(1,DRAW_NONE,0,0); SetIndexStyle(2,DRAW_NONE,0,2); SetIndexStyle(3,DRAW_NONE,0,2); SetIndexStyle(4,DRAW_HISTOGRAM); SetIndexStyle(5,DRAW_HISTOGRAM); SetIndexArrow(0,164); SetIndexArrow(1,164); SetIndexArrow(2,174); SetIndexArrow(3,174); IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); //---- name for DataWindow and indicator subwindow label 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); switch(TimeFrame) { case 1 : TimeFrameStr="Period M1"; break; case 5 : TimeFrameStr="Period M5"; break; case 15 : TimeFrameStr="Period M15"; break; case 30 : TimeFrameStr="Period M30"; break; case 60 : TimeFrameStr="Period H1"; break; case 240 : TimeFrameStr="Period H4"; break; case 1440 : TimeFrameStr="Period D1"; break; case 10080 : TimeFrameStr="Period W1"; break; case 43200 : TimeFrameStr="Period MN1"; break; default : TimeFrameStr=" Current Timeframe "; TimeFrame=0; } short_name="BBands Stops Bar [" +TimeFrameStr+" ]"; IndicatorShortName(short_name); //---- return(0); } //+------------------------------------------------------------------+ //| Bollinger Bands_Stop_v1 | //+------------------------------------------------------------------+ int start() { 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,TimeFrame,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift); smin[shift]=iBands(NULL,TimeFrame,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 (Signal>0 && UpTrendBuffer[shift+1]==-1.0) { UpTrendSignal[shift]=bsmin[shift]; UpTrendBuffer[shift]=bsmin[shift]; if(Line>0) UpTrendLine[shift]=bsmin[shift]; if (SoundON==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 (Signal==2) UpTrendBuffer[shift]=0; DownTrendSignal[shift]=-1; DownTrendBuffer[shift]=-1.0; DownTrendLine[shift]=EMPTY_VALUE; } if (trend<0) { if (Signal>0 && DownTrendBuffer[shift+1]==-1.0) { DownTrendSignal[shift]=bsmax[shift]; DownTrendBuffer[shift]=bsmax[shift]; if(Line>0) DownTrendLine[shift]=bsmax[shift]; if (SoundON==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 (Signal==2) DownTrendBuffer[shift]=0; UpTrendSignal[shift]=-1; UpTrendBuffer[shift]=-1.0; UpTrendLine[shift]=EMPTY_VALUE; } } return(0); }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_NONE
Implements a curve of type DRAW_HISTOGRAM
Indicators Used:
Bollinger bands indicator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen