### Question:
BollingerBandsLowerIndicator extends CachedIndicator<Num> { public Num getK() { return k; } BollingerBandsLowerIndicator(BollingerBandsMiddleIndicator bbm, Indicator<Num> indicator);  BollingerBandsLowerIndicator(BollingerBandsMiddleIndicator bbm, Indicator<Num> indicator, Num k); Num getK(); @Override String toString();  }### Answer:
@Test public void bollingerBandsLowerUsingSMAAndStandardDeviation() { BollingerBandsMiddleIndicator bbmSMA = new BollingerBandsMiddleIndicator(sma); StandardDeviationIndicator standardDeviation = new StandardDeviationIndicator(closePrice, barCount); BollingerBandsLowerIndicator bblSMA = new BollingerBandsLowerIndicator(bbmSMA, standardDeviation); assertNumEquals(2, bblSMA.getK()); assertNumEquals(1, bblSMA.getValue(0)); assertNumEquals(0.5, bblSMA.getValue(1)); assertNumEquals(0.367, bblSMA.getValue(2)); assertNumEquals(1.367, bblSMA.getValue(3)); assertNumEquals(2.3905, bblSMA.getValue(4)); assertNumEquals(2.7239, bblSMA.getValue(5)); assertNumEquals(2.367, bblSMA.getValue(6)); BollingerBandsLowerIndicator bblSMAwithK = new BollingerBandsLowerIndicator(bbmSMA, standardDeviation, numFunction.apply(1.5)); assertNumEquals(1.5, bblSMAwithK.getK()); assertNumEquals(1, bblSMAwithK.getValue(0)); assertNumEquals(0.75, bblSMAwithK.getValue(1)); assertNumEquals(0.7752, bblSMAwithK.getValue(2)); assertNumEquals(1.7752, bblSMAwithK.getValue(3)); assertNumEquals(2.6262, bblSMAwithK.getValue(4)); assertNumEquals(2.9595, bblSMAwithK.getValue(5)); assertNumEquals(2.7752, bblSMAwithK.getValue(6)); }