//+------------------------------------------------------------------+ //|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