/// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { // used to set values for bars less than the period int tmpPeriod = Math.Min(CurrentBar, Period); double average = Close[0]; switch (averageType) { case BollingerBandwidth_MATypes.EMA: average = EMA(tmpPeriod)[0]; break; case BollingerBandwidth_MATypes.SMA: average = SMA(tmpPeriod)[0]; break; } double stdDevValue = StdDev(tmpPeriod)[0]; double upperValue = average + numStdDev * stdDevValue; double lowerValue = average - numStdDev * stdDevValue; Bandwidth.Set((upperValue - lowerValue) / average * 100); Bulge.Set(MAX(Bandwidth, bulgeLength)[0]); Squeeze.Set(MIN(Bandwidth, squeezeLength)[0]); }