DocsStrategy APIindicators

BBANDS (Bollinger Bands)

Bollinger Bands consist of a middle SMA with upper and lower bands at a standard deviation distance. They expand during high volatility and contract during low volatility.

Declaration

function init(ctx) { ctx.indicator('bb', 'BBANDS', { period: 20, stdDev: 2 }); }

Options

OptionTypeDefaultDescription
periodnumber20SMA lookback period
stdDevnumber2Standard deviation multiplier
sourcestring'close'Price source

Output

Returns an object with three series, accessed via underscore naming:

PropertyDescription
upperUpper band (SMA + stdDev x sigma)
middleMiddle band (SMA)
lowerLower band (SMA - stdDev x sigma)

Accessing Values

function onBar(ctx, i) { const upper = ctx.ind.bb_upper[i]; const middle = ctx.ind.bb_middle[i]; const lower = ctx.ind.bb_lower[i]; }

Use Cases

Bollinger Bounce (Mean Reversion)

function onBar(ctx, i) { const close = ctx.series.close[i]; const lower = ctx.ind.bb_lower[i]; const upper = ctx.ind.bb_upper[i]; if (close <= lower) { ctx.order.market('ASSET', 1, { signal: 'buy', reason: 'bb_bounce_lower' }); } if (close >= upper) { ctx.order.close('ASSET', { signal: 'sell', reason: 'bb_touch_upper' }); } }

Bollinger Squeeze (Breakout)

function onBar(ctx, i) { const bandwidth = (ctx.ind.bb_upper[i] - ctx.ind.bb_lower[i]) / ctx.ind.bb_middle[i]; const prevBandwidth = (ctx.ind.bb_upper[i-1] - ctx.ind.bb_lower[i-1]) / ctx.ind.bb_middle[i-1]; // Squeeze: narrow bands followed by expansion if (bandwidth > prevBandwidth * 1.5 && ctx.series.close[i] > ctx.ind.bb_upper[i]) { ctx.order.market('ASSET', 1, { signal: 'buy', reason: 'bb_squeeze_breakout' }); } }

Calculation

  • Middle = SMA(Close, period)
  • Upper = Middle + stdDev x StdDeviation(Close, period)
  • Lower = Middle - stdDev x StdDeviation(Close, period)

Related

indicatorbbandsbollingervolatilitybandsqsl