Exemplo n.º 1
0
        /// <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]);
        }