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()); }
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()); }