Calculate the Bollinger Bands for a given price series.

Bollinger Bands are a volatility indicator that consists of three lines: an upper band, a middle band (simple moving average), and a lower band. The upper and lower bands are calculated as the moving average plus and minus a specified number of standard deviations, respectively.

The formula is as follows:

\[\text{Middle Band} = \operatorname{SMA}(\text{Close},\; \text{Window})\] \[\text{Upper Band} = \text{Middle Band} + (\text{Num Std Dev} \cdot \text{Std Dev})\] \[\text{Lower Band} = \text{Middle Band} - (\text{Num Std Dev} \cdot \text{Std Dev})\]

The standard deviation is the population standard deviation (dividing by n), as Bollinger himself specifies and as TA-Lib and StockCharts both implement, not pandas’ default sample standard deviation.

Also known as: Bollinger Bands, BB, volatility bands, price channels.

Bollinger Bands in Python

get_bollinger_bands is part of the Technicals module of the open-source Finance Toolkit. Install it with:

pip install financetoolkit -U

Then call get_bollinger_bands as shown below.

from financetoolkit import Toolkit

toolkit = Toolkit(tickers=["AAPL", "MSFT"])

toolkit.technicals.get_bollinger_bands().xs("AAPL", level=1, axis="columns")

Which returns:

Date Close Lower Band Middle Band Upper Band
2026-06-18 298.01 284.642 300.742 316.843
2026-06-22 297.01 284.201 300.078 315.955
2026-06-23 294.3 285.08 298.585 312.09
2026-06-24 293.08 285.388 297.358 309.328
2026-06-25 275.15 280.386 294.781 309.176
2026-06-26 283.78 279.544 293.098 306.652
2026-06-29 281.74 277.796 291.684 305.571
2026-06-30 289.36 277.667 291.599 305.53
2026-07-01 294.38 277.788 291.799 305.81
2026-07-02 308.63 276.137 292.727 309.318

Parameters

get_bollinger_bands accepts the following parameters:

  • period (str, optional): The time period to consider for historical data. Can be “daily”, “weekly”, “quarterly”, or “yearly”. Defaults to “daily”.
  • close_column (str, optional): The column name for closing prices in the historical data. Defaults to “Adj Close”.
  • window (int, optional): Number of periods for moving average calculation. The number of periods (time intervals) over which to calculate the moving average.
  • num_std_dev (int, optional): Number of standard deviations for the bands. Defaults to 2.
  • rounding (int | None, optional): The number of decimals to round the results to. Defaults to 4.
  • growth (bool, optional): Whether to calculate the growth of the bands. Defaults to False.
  • lag (int | list[int], optional): The lag to use for the growth calculation.
  • standardize (bool, optional): Whether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False. Defaults to 1.
Share