//+------------------------------------------------------------------+ //| Bands.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_chart_window //#property indicator_buffers 3 #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Green //#property indicator_color3 Red //---- indicator parameters extern int TrailingStop = 20; //---- buffers double UpperBuffer[]; double LowerBuffer[]; //double ExitBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,UpperBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,LowerBuffer); //SetIndexStyle(2,DRAW_ARROW); //SetIndexArrow(2,251); //SetIndexBuffer(2,ExitBuffer); //---- SetIndexDrawBegin(0,1); SetIndexDrawBegin(1,1); //---- return(0); } //+------------------------------------------------------------------+ //| Bollinger Bands | //+------------------------------------------------------------------+ int start() { int i,k,counted_bars=IndicatorCounted(); double uppertemp, lowertemp; //---- if(Bars<=1) return(0); //---- initial zero if(counted_bars<1) for(i=1;i<=1;i++) { UpperBuffer[Bars-i]=EMPTY_VALUE; LowerBuffer[Bars-i]=EMPTY_VALUE; } //---- i=Bars; if(counted_bars>0) i=Bars-counted_bars-1; while(i>=0) { uppertemp = Low[i+1] + TrailingStop*Point; if (uppertemp < UpperBuffer[i+1] || (UpperBuffer[i+1] == EMPTY_VALUE && High[i] < High[i+1])) UpperBuffer[i]= uppertemp; else UpperBuffer[i] = UpperBuffer[i+1]; if(UpperBuffer[i] != EMPTY_VALUE && High[i] > UpperBuffer[i]) { UpperBuffer[i] = EMPTY_VALUE; //ExitBuffer[i] = High[i]; } lowertemp = High[i+1]-TrailingStop*Point; if (lowertemp > LowerBuffer[i+1] || (LowerBuffer[i+1] == EMPTY_VALUE && Low[i] > Low[i+1])) LowerBuffer[i]=lowertemp; else LowerBuffer[i] = LowerBuffer[i+1]; if (LowerBuffer[i] != EMPTY_VALUE && Low[i] < LowerBuffer[i]) { LowerBuffer[i] = EMPTY_VALUE; //ExitBuffer[i] = Low[i]; } i--; } //---- return(0); } //+------------------------------------------------------------------+