public static RSIRangeData GetRSIRange(int period, List <double> prices) { List <double> sortedRSI = RSICalculator.CalculateRsi(period, prices.ToArray()).OrderBy(e => e).ToList(); int count = sortedRSI.Count(); if (count < 100) { return(null); } RSIRangeData value = new RSIRangeData(); value.Min = sortedRSI.First(); value.Max = sortedRSI.Last(); value.L5 = sortedRSI.Skip(count / 20).First(); value.L10 = sortedRSI.Skip(count / 10).First(); value.L15 = sortedRSI.Skip(count / 20 * 3).First(); value.H5 = sortedRSI.Skip(count / 20 * 19).First(); value.H10 = sortedRSI.Skip(count / 10 * 9).First(); value.H15 = sortedRSI.Skip(count / 20 * 17).First(); return(value); }
public Indicator AnalyzeData(DataState state) { List <double> closePrices = _analyseRepo.LoadClosePriceBySymbol(state.Symbol, true).ToList(); RSIRangeData range = RSICalculator.GetRSIRange(RSICalculator.Period, closePrices); if (range == null) { return(null); } RSIRange value = new RSIRange(); value.Symbol = state.Symbol; value.Date = state.Last.Value; value.Min = range.Min; value.Max = range.Max; value.L5 = range.L5; value.H5 = range.H5; value.L10 = range.L10; value.H10 = range.H10; value.L15 = range.L15; value.H15 = range.H15; return(value.ToIndicator()); }