Jump to content

Recommended Posts

Posted (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 by zktier
Posted

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

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

}

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

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...