public Indicator AnalyzeData(DataState state)
        {
            double[]        closePrices = _analyseRepo.LoadClosePriceBySymbol(state.Symbol, true).ToArray();
            List <MacdData> macdValues  = MACDCalculator.CalculateMACD(
                MACDCalculator.FastPeriod,
                MACDCalculator.SlowPeriod,
                MACDCalculator.SignalPeriod,
                closePrices);

            if (macdValues.Count == 0)
            {
                return(null);
            }
            var lastMacd = AlgorithmHelper.TakeLast <MacdData>(macdValues, 1).FirstOrDefault();

            if (lastMacd == null)
            {
                return(null);
            }
            MACD value = new MACD();

            value.Symbol     = state.Symbol;
            value.Date       = state.Last.Value;
            value.MacdValue  = lastMacd.MacdValue;
            value.MacdSingal = lastMacd.MacdSingal;
            value.MacdHIST   = lastMacd.MacdHIST;
            return(value.ToIndicator());
        }
Beispiel #2
0
        public void MACDCalculator_shouldReturnEmpty_with_invalidData()
        {
            List <double> shortPrices = new List <double> {
                24.8, 24.55, 24.45, 24.5, 24.44, 24.11, 24.31, 25.37, 26, 25.61, 25.43,
            };

            var value = MACDCalculator.CalculateMACD(MACDCalculator.FastPeriod, MACDCalculator.SlowPeriod, MACDCalculator.SignalPeriod, shortPrices.ToArray());

            Assert.IsTrue(value.Count == 0);
        }
Beispiel #3
0
        public void MACDCalculator_shouldCalculateMacd_with_validData()
        {
            List <double> longPrices = new List <double> {
                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,
            };

            List <MacdData> value = MACDCalculator.CalculateMACD(MACDCalculator.FastPeriod, MACDCalculator.SlowPeriod, MACDCalculator.SignalPeriod, longPrices.ToArray());

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

            Assert.IsTrue(last != null);
            Assert.IsTrue(last.MacdHIST.AlmostEqual(-0.3536));
            Assert.IsTrue(last.MacdValue.AlmostEqual(1.15));
            Assert.IsTrue(last.MacdSingal.AlmostEqual(1.50));
        }