public Indicator AnalyzeData(DataState state)
        {
            double[] closePrices = _analyseRepo.LoadClosePriceBySymbol(state.Symbol, true).ToArray();
            double[] RsiValues   = RSICalculator.CalculateRsi(RSICalculator.Period, closePrices);
            if (RsiValues.Length == 0)
            {
                return(null);
            }

            var cont  = new ContinuousCalculator(RsiValues, r => r > 50.0);
            RSI value = new RSI();

            value.Symbol          = state.Symbol;
            value.Date            = state.Last.Value;
            value.Avg             = RsiValues.Average();
            value.LastRSI         = AlgorithmHelper.GetLast(RsiValues);
            value.PercentGT50     = RsiValues.Where(r => r > 50).Count() * 100 / RsiValues.Count();
            value.TotalDays       = RsiValues.Count();
            value.MaxContGT50Days = cont.TrueMax;
            value.MaxContLT50Days = cont.FalseMax;
            value.AvgContGT50Days = cont.TrueAvg;
            value.AvgContLT50Days = cont.FalseAvg;
            value.LastContDays    = cont.LastCont;
            return(value.ToIndicator());
        }
Exemple #2
0
        public void CanDoContinuousCalculation()
        {
            double[] raw  = new double[] { 1.0, 2.2, 3.1, 6, 7, 2.3, 7.2, 8.2 };
            var      calc = new ContinuousCalculator(
                raw, i => i > 5);

            Assert.IsTrue(calc.FalseMax == 3);
            Assert.IsTrue(calc.FalseAvg == 2.0);
            Assert.IsTrue(calc.TrueMax == 2);
            Assert.IsTrue(calc.TrueAvg == 2.0);
            Assert.IsTrue(calc.LastCont == 2);

            calc = new ContinuousCalculator(
                raw, i => i > 50);
            Assert.IsTrue(calc.FalseMax == 8);
            Assert.IsTrue(calc.FalseAvg == 8.0);
            Assert.IsTrue(calc.TrueMax == 0);
            Assert.IsTrue(calc.TrueAvg == 0.0);
            Assert.IsTrue(calc.LastCont == 8);

            calc = new ContinuousCalculator(
                raw, i => i < 50);
            Assert.IsTrue(calc.FalseMax == 0);
            Assert.IsTrue(calc.FalseAvg == 0.0);
            Assert.IsTrue(calc.TrueMax == 8);
            Assert.IsTrue(calc.TrueAvg == 8.0);
            Assert.IsTrue(calc.LastCont == 8);
        }
        public Indicator AnalyzeData(DataState state)
        {
            double[] gainLoss = _analyseRepo.LoadComputedEod(state.Symbol)
                                .OrderByDescending(ce => ce.Date)
                                .Select(e => e.GL).ToArray();
            var      calculator = new ContinuousCalculator(gainLoss, gl => gl > 0);
            GainLoss value      = new GainLoss();

            value.Symbol          = state.Symbol;
            value.Date            = state.Last.Value;
            value.MaxContGainDays = calculator.TrueMax;
            value.AvgContGainDays = calculator.TrueAvg;
            value.MaxContLossDays = calculator.FalseMax;
            value.AvgContLossDays = calculator.FalseAvg;
            value.LastGLContDays  = calculator.LastCont;
            return(value.ToIndicator());
        }