コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }