public BollingerBands(CandleStickCollection candleSticks, int period = 20, double multiplier = 2, PriceSource priceSource = PriceSource.Close) { int length = candleSticks.Count - period; double[] prices = priceSource.GetArrayFromCandleStickCollection(candleSticks); StandardDeviation standardDeviation; LowerBand = UpperBand = new double[length]; MiddleBand = MovingAverages.SMA(candleSticks, period, priceSource).MA; for (int i = 0; i < length; i++) { standardDeviation = new StandardDeviation(prices.GetSegment(i, i + period), MiddleBand.GetSegment(i, i + period)); UpperBand[i] = MiddleBand[i] + multiplier * standardDeviation.Value; LowerBand[i] = MiddleBand[i] - multiplier * standardDeviation.Value; } }