Jump to content

Bollinger bands


Recommended Posts

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 by zktier
Link to comment
Share on other sites

//+------------------------------------------------------------------+

//| 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);

}

//+------------------------------------------------------------------+

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...