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 __onNewValue(self, dataSeries, dateTime, value):
      upperValue = None
      lowerValue = None
  
      if value is not None:
          sma = self.__sma[-1]
          if sma is not None:
              stdDev = self.__stdDev[-1]
              upperValue = sma + stdDev * self.__numStdDev
              lowerValue = sma + stdDev * self.__numStdDev * -1
  
      self.__upperBand.appendWithDateTime(dateTime, upperValue)
      self.__lowerBand.appendWithDateTime(dateTime, lowerValue)
  
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 2 for calling the BollingerBands obj's underlying member method code with example usage: obj.__onNewValue(dataSeries, dateTime, value) without return types