Ejemplo n.º 1
0
        // calculate Bollinger Bands
        public static void CalculateBollinger(out string key, out string key2, out string key3, StockPoints data, Dictionary<DateTime, Dictionary<string, double>> indicators, int period, int multiplier, out int offset)
        {
            key = string.Format("BB-Upper-({0}:{1})", period.ToString("00"), multiplier.ToString("00"));
            key2 = string.Format("BB-Mid-({0}:{1})", period.ToString("00"), multiplier.ToString("00"));
            key3 = string.Format("BB-Lower-({0}:{1})", period.ToString("00"), multiplier.ToString("00"));
            offset = period - 1;

            double upperBand;
            double midBand;
            double lowerBand;

            SimpleMovingAverage sma = new SimpleMovingAverage(period);
            SimpleMovingAverage smaPrice = new SimpleMovingAverage(period);

            int i = 0;
            foreach (StockPoint point in data)
            {
                sma.AddValue(point.Close);
                if (i < period - 1)
                {
                    i++;
                }
                else
                {
                    double smaValue = sma.MovingAverage();
                    double stdMultiplied = sma.StandardDeviation() * multiplier;

                    upperBand = smaValue + stdMultiplied;
                    midBand = smaValue;
                    lowerBand = smaValue - stdMultiplied;

                    AddValue(point.PointDateTime, key, upperBand, indicators);
                    AddValue(point.PointDateTime, key2, midBand, indicators);
                    AddValue(point.PointDateTime, key3, lowerBand, indicators);
                }
            }
        }