Skip to main content

Bollinger Bands

Usage

// Basic usage (20, 2.0 is standard)
bb := s.k.Indicators().BollingerBands(btc, 20, 2.0)

s.k.Log().Debug("Bollinger Bands", btc.Symbol(), "Upper: %s, Middle: %s, Lower: %s",
bb.Upper, bb.Middle, bb.Lower)

// With options
bb := s.k.Indicators().BollingerBands(btc, 20, 2.0, indicators.IndicatorOptions{
Interval: "1h",
})

In a Strategy

func (s *Strategy) GetSignals() ([]*strategy.Signal, error) {
btc := s.k.Asset("BTC")

price := s.k.Market().Price(btc)
bb := s.k.Indicators().BollingerBands(btc, 20, 2.0)

// Buy when price touches lower band
if price.LessThan(bb.Lower) {
return []*strategy.Signal{
s.Signal().
Buy(btc).
Quantity(decimal.NewFromFloat(0.1)).
Reason("Price below lower Bollinger Band").
Build(),
}, nil
}

// Sell when price touches upper band
if price.GreaterThan(bb.Upper) {
return []*strategy.Signal{
s.Signal().
Sell(btc).
Quantity(decimal.NewFromFloat(0.1)).
Reason("Price above upper Bollinger Band").
Build(),
}, nil
}

return nil, nil
}

Parameters

BollingerBands(asset, period, stdDev, ...options) *BollingerBandsResult
ParameterTypeDescription
assettypes.AssetAsset to calculate for
periodintSMA period (typically 20)
stdDevfloat64Std dev multiplier (typically 2.0)
options...IndicatorOptionsOptional exchange/interval

Return Value

type BollingerBandsResult struct {
Upper decimal.Decimal // Upper band (SMA + stdDev)
Middle decimal.Decimal // Middle band (SMA)
Lower decimal.Decimal // Lower band (SMA - stdDev)
}

Common Patterns

Mean Reversion

price := s.k.Market().Price(btc)
bb := s.k.Indicators().BollingerBands(btc, 20, 2.0)

// Buy at lower band
if price.LessThan(bb.Lower) {
return s.Signal().Buy(btc).Build()
}

// Sell at upper band
if price.GreaterThan(bb.Upper) {
return s.Signal().Sell(btc).Build()
}

Breakout Detection

bb := s.k.Indicators().BollingerBands(btc, 20, 2.0)

// Band width (volatility measure)
bandWidth := bb.Upper.Sub(bb.Lower).Div(bb.Middle).Mul(decimal.NewFromInt(100))

// Squeeze: bands narrowing (low volatility)
if bandWidth.LessThan(decimal.NewFromInt(10)) {
// Potential breakout coming
}

What It Measures

Bollinger Bands measure volatility and identify overbought/oversold conditions:

Formulas

Middle Band = SMA(period)
Upper Band = Middle + (stdDev × Standard Deviation)
Lower Band = Middle - (stdDev × Standard Deviation)

Interpretation

  • Price near upper band: Overbought
  • Price near lower band: Oversold
  • Bands narrow: Low volatility, potential breakout
  • Bands wide: High volatility

See Also

References