Пример #1
0
        public void BollingerBandsCalculator_shouldCalculateBollingerBands_with_validData()
        {
            double[] _longPrices =
            {
                24.8,  24.55, 24.45,  24.5, 24.44, 24.11, 24.31, 25.37,    26, 25.61, 25.43, 25.56,
                25.41, 24.91,  25.1, 25.59, 25.85, 25.15, 25.46, 26.05, 25.74, 25.79, 25.67,
                25.8,  25.23, 25.19, 25.28, 24.91, 24.66, 24.99, 24.53, 24.15,  24.1, 24.18,
                23.92, 24.37,  24.2, 24.66,  24.2, 24.09, 23.49, 23.54, 23.55,  23.2, 23.37,
                23.04, 23.44,  23.3,  23.2, 22.91, 22.97, 23.79, 23.21, 23.13, 23.13, 23.36,
                23.13, 22.92, 22.92,  22.5,  22.8, 22.66, 22.88, 23.16, 23.54, 23.91, 23.92,
                23.83, 24.12, 23.78,    24, 23.83, 23.53, 23.05, 22.15,  22.2, 22.26, 22.38, 22.46,22.54, 22.32, 22.48, 22.25, 21.49, 21.48, 21.7, 21.79, 21.8, 22, 21.89, 21.71, 21.27, 22.07, 22.12, 22.2, 22.05, 21.92, 21.98, 21.81, 22.08, 22.26, 22, 22.22, 22.29, 22.89, 22.96, 23.19, 23.08, 23.14, 22.63, 22.79, 22.64, 22.13, 22.21, 22.17, 22.19, 21.99, 21.67, 21.94, 21.95, 22.02, 22.09, 22.02, 21.99, 21.88, 21.81, 21.84, 22.39, 22.31, 22.33, 21.92, 22.12, 21.71, 21.69, 21.89, 21.9, 22.05, 21.95, 22.14, 22.08, 22.15, 22.26, 22.09, 21.84, 22.07, 21.95, 22.03, 22.26, 22.15, 22.08, 22.48, 22.58, 22.39, 22.35, 22.03, 22.04, 21.97, 22.07, 22.01, 22.16, 22.31, 22.47, 22.52, 22.6, 22.74, 22.6, 22.6, 22.34, 22.19, 22.47, 22.73, 22.69, 22.73, 22.42, 22.62, 22.67, 23.12, 23.12, 23.63, 23.87, 24.58, 24.6, 24.38, 24.63, 24.59, 25.08, 24.81, 24.72, 24.41, 24.71, 25.05, 25.04, 25.02, 24.73, 24.96, 25.21, 25.22, 25, 24.8, 24.88, 24.71, 24.58, 24.59, 24.36, 24.63, 25.17, 25.65, 25.72, 26.04, 25.98, 25.85, 25.72, 25.71, 25.74, 25.6, 25.42, 25.28, 25.38, 25.37, 24.82, 25.04, 25.77, 25.47, 25.61, 25.35, 25.77, 25.54, 25.45, 25.69, 25.97, 25.73, 26.25, 25.86, 25.64, 25.63, 25.64, 25.8, 25.6, 25.76, 25.85, 25.79, 25.47, 25.22, 25.24, 24.88, 25.63, 25.85, 26.09, 26.57, 26.54, 26.55, 26.47, 26.44, 26.38, 27.08, 27.23, 27.44, 27.35, 28.25, 27.43, 27.18, 27.33, 27.23, 28.61, 29.2, 29.67, 29.59, 30.3, 29.22, 30.91, 32.21, 34.79, 34.49, 35.15, 32.57, 33.29, 34.06, 33.43, 33.55, 34.79, 35.9, 35.55, 35.68, 35.4, 34.07, 33.86, 36.16, 35.95, 36.23, 37.21, 37.28, 37.46, 37.58, 38.01, 37.02, 36.96, 36.39, 36.33, 36.09, 37.31, 36.27, 34.9, 36.95, 37, 36.88, 37.16, 36.56, 35.43, 35.74, 33.9, 34.57, 35.93, 36.33, 34.91, 33.67, 34.11, 34.91, 34.88, 35.38, 35.67, 36.18, 36.04, 35.9, 36.05, 36, 36.41, 35.51, 36.54, 36.35, 36.73, 35.75, 35.69, 35.45, 35, 35.77, 35.41, 35.83, 36.64, 36.66, 38.1, 38.82, 39.93, 39.7, 40.53, 40.81, 40.77, 40.17, 40.4, 40.98, 42.89, 41.64, 42.7, 42.32, 43.46, 43.91, 44.18, 43.26, 45, 45.02, 45.35, 44.79, 46.8, 44.48, 46.44, 47.45, 49.24, 48.58, 48.63, 49.4, 48.85, 48.95, 48.76, 49.09, 49.62, 47.11, 46.19, 45.92, 47.12, 48.08, 48.54, 47.96, 48.65, 47.72,
            };

            List <BollingerBandsData> value =
                BollingerBandsCalculator.CalculateBollingerBands(
                    BollingerBandsCalculator.Period,
                    BollingerBandsCalculator.DeviationUp,
                    BollingerBandsCalculator.DeviationDown,
                    _longPrices.ToArray());

            Assert.IsTrue(value.Count == 364);
            var last = AlgorithmHelper.TakeLast <BollingerBandsData>(value, 1).FirstOrDefault();

            Assert.IsTrue(last != null);
            Assert.IsTrue(last.Upper.AlmostEqual(50.30));
            Assert.IsTrue(last.Middle.AlmostEqual(48.12));
            Assert.IsTrue(last.Lower.AlmostEqual(45.92));
        }
        public Indicator AnalyzeData(DataState state)
        {
            double[] closePrices = _analyseRepo.LoadClosePriceBySymbol(state.Symbol, true).ToArray();
            List <BollingerBandsData> bBDataValues = BollingerBandsCalculator.CalculateBollingerBands(
                BollingerBandsCalculator.Period,
                BollingerBandsCalculator.DeviationUp,
                BollingerBandsCalculator.DeviationDown,
                closePrices);

            if (bBDataValues.Count == 0)
            {
                return(null);
            }
            var lastBB = AlgorithmHelper.TakeLast <BollingerBandsData>(bBDataValues, 1).FirstOrDefault();

            if (lastBB == null)
            {
                return(null);
            }
            BollingerBands value = new BollingerBands();

            value.Symbol         = state.Symbol;
            value.Date           = state.Last.Value;
            value.Upper          = lastBB.Upper;
            value.Middle         = lastBB.Middle;
            value.Lower          = lastBB.Lower;
            value.ChannelHight   = value.Upper - value.Lower;
            value.ChannelPercent = value.ChannelHight * 100 / value.Middle;
            return(value.ToIndicator());
        }