# Bollenger Bands with exponential moving average mid line

Studies that have been contributed to the community by other users. If you’ve got something useful to share, that’s great!
kelly simon
Posts: 45
Joined: 31 Jan 2008

### Bollenger Bands with exponential moving average mid line

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

TJ
Posts: 7176
Joined: 29 Aug 2006
Location: Global Citizen
Has thanked: 990 times
Been thanked: 2049 times
According to John Bollinger in his book, Bollinger on Bollinger Bands. it is best to use SMA for BB.

bowlesj3
Posts: 2104
Joined: 21 Jul 2007
Has thanked: 200 times
Been thanked: 420 times

### He is correct.

I use the Simple. It works fine.

kelly simon
Posts: 45
Joined: 31 Jan 2008
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

SUPER
Posts: 632
Joined: 03 Mar 2007
Has thanked: 105 times
Been thanked: 81 times
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));

SUPER
Posts: 632
Joined: 03 Mar 2007
Has thanked: 105 times
Been thanked: 81 times
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 ;`

kelly simon
Posts: 45
Joined: 31 Jan 2008
Super, that is super!
Thanks,
Simon