Page 1 of 1

Bollenger Bands with exponential moving average mid line

Posted: 29 Jul 2008
by kelly simon
I was wondering if the Bollenger Band plot is based on an exponential moving average or a simple moving average. The mid line seems to plot on a simple moving average, by comparisson - but what about the actual bands - are they based on an ema or sma? Or is it that BB's are always based on an ema, by formula?

Thanks,
Simon

Posted: 29 Jul 2008
by TJ
According to John Bollinger in his book, Bollinger on Bollinger Bands. it is best to use SMA for BB.

He is correct.

Posted: 30 Jul 2008
by bowlesj3
I use the Simple. It works fine.

Posted: 30 Jul 2008
by kelly simon
OK, thank you all. Still, it sure would be nice to be able to compare - even if just for the sake of comparison. Anyone have the skills to write out the code for an ema based BB - and willing to share..!

Simon

Posted: 30 Jul 2008
by SUPER
OK, thank you all. Still, it sure would be nice to be able to compare - even if just for the sake of comparison. Anyone have the skills to write out the code for an ema based BB - and willing to share..!

Simon
Replace simple moving average with exponential in your code.

Here's BollingerBandxAvg function to get you started:


Inputs: Price(NumericSeries), Length(NumericSimple), StandardDev(NumericSimple);

BollingerBand.XAvg = Xaverage(Price, Length) + (StandardDev * StdDev(Price, Length));

Posted: 31 Jul 2008
by SUPER
Here's the indicator you are looking for hope it helps.

Code: Select all

inputs:
BollingerPrice( Close ),
TestPriceUBand( Close ),
TestPriceLBand( Close ),
Length( 20 ),
NumDevsUp( 2 ),
NumDevsDn( -2 ),
Displace( 0 ) ;

variables:
var0( 0 ),
var1( 0 ),
var2( 0 ),
var3( 0 ) ;

var0 = XAverage( BollingerPrice, Length ) ;
var1 = StandardDev( BollingerPrice, Length, 1 ) ;
var3 = var0 + NumDevsUp * var1 ;
var2 = var0 + NumDevsDn * var1 ;

condition1 = Displace >= 0 or CurrentBar > AbsValue( Displace ) ;
if condition1 then
begin
Plot1[Displace]( var3, "UpperBand" ) ;
Plot2[Displace]( var2, "LowerBand" ) ;
Plot3[Displace]( var0, "MidLine" ) ;


if Displace <= 0 then
begin
condition1 = TestPriceLBand crosses over var2 ;
if condition1 then
Alert( "Price crossing over lower price band" )
else
begin
condition1 = TestPriceUBand crosses under var3 ;
if condition1 then
Alert( "Price crossing under upper price band" ) ;
end;
end ;
end ;

Posted: 31 Jul 2008
by kelly simon
Super, that is super!
Thanks,
Simon