zktier Posted July 19, 2010 Report Share Posted July 19, 2010 (edited) I would like to attach bollinger bands based on a 20 period smoothed moving average on the mt4. I suppose that the standard bb indicator that comes with mt4 is based on a exponential moving average or am I wrong? If it is, can i found a custom bb indicator based on the smoothed moving average somewhere? Edited July 19, 2010 by zktier Quote Link to comment Share on other sites More sharing options...
drbastem Posted July 21, 2010 Report Share Posted July 21, 2010 //+------------------------------------------------------------------+ //| 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_color1 LightSeaGreen #property indicator_color2 LightSeaGreen #property indicator_color3 LightSeaGreen //---- indicator parameters extern int BandsPeriod=20; extern int BandsShift=0; extern double BandsDeviations=2.0; //---- buffers double MovingBuffer[]; double UpperBuffer[]; double LowerBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,MovingBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,UpperBuffer); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,LowerBuffer); //---- SetIndexDrawBegin(0,BandsPeriod+BandsShift); SetIndexDrawBegin(1,BandsPeriod+BandsShift); SetIndexDrawBegin(2,BandsPeriod+BandsShift); //---- return(0); } //+------------------------------------------------------------------+ //| Bollinger Bands | //+------------------------------------------------------------------+ int start() { int i,k,counted_bars=IndicatorCounted(); double deviation; double sum,oldval,newres; //---- if(Bars<=BandsPeriod) return(0); //---- initial zero if(counted_bars<1) for(i=1;i<=BandsPeriod;i++) { MovingBuffer[bars-i]=EMPTY_VALUE; UpperBuffer[bars-i]=EMPTY_VALUE; LowerBuffer[bars-i]=EMPTY_VALUE; } //---- int limit=Bars-counted_bars; if(counted_bars>0) limit++; for(i=0; i MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMMA,PRICE_CLOSE,i); //---- i=Bars-BandsPeriod+1; if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1; while(i>=0) { sum=0.0; k=i+BandsPeriod-1; oldval=MovingBuffer; while(k>=i) { newres=Close[k]-oldval; sum+=newres*newres; k--; } deviation=BandsDeviations*MathSqrt(sum/BandsPeriod); UpperBuffer=oldval+deviation; LowerBuffer=oldval-deviation; i--; } //---- return(0); } //+------------------------------------------------------------------+ Quote Link to comment Share on other sites More sharing options...
mykap Posted July 22, 2010 Report Share Posted July 22, 2010 tq drbastem Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.