class_docstr: Bollinger Bands filter as described in http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:bollinger_bands.
  
  :param dataSeries: The DataSeries instance being filtered.
  :type dataSeries: :class:`pyalgotrade.dataseries.DataSeries`.
  :param period: The number of values to use in the calculation. Must be > 1.
  :type period: int.
  :param numStdDev: The number of standard deviations to use for the upper and lower bands.
  :type numStdDev: int.
  :param maxLen: The maximum number of values to hold.
      Once a bounded length is full, when new items are added, a corresponding number of items are discarded from the
      opposite end. If None then dataseries.DEFAULT_MAX_LEN is used.
  :type maxLen: int.
code: def __init__(self, dataSeries, period, numStdDev, maxLen=None):
      self.__sma = ma.SMA(dataSeries, period, maxLen=maxLen)
      self.__stdDev = stats.StdDev(dataSeries, period, maxLen=maxLen)
      self.__upperBand = dataseries.SequenceDataSeries(maxLen)
      self.__lowerBand = dataseries.SequenceDataSeries(maxLen)
      self.__numStdDev = numStdDev
      # It is important to subscribe after sma and stddev since we'll use those values.
      dataSeries.getNewValueEvent().subscribe(self.__onNewValue)
  
file_path: pyalgotrade/pyalgotrade/technical/bollinger.py
imports: from pyalgotrade import dataseries
  from pyalgotrade.technical import ma
  from pyalgotrade.technical import stats
label_desc: Use image node_id 1 to create a new BollingerBands object from inherited base classes: object with example: obj = BollingerBands(dataSeries, period, numStdDev, maxLen)