コード例 #1
0
        public List <FactorTrendCorrectRate> AnalyseHistoricalTrend_Old(PermutationFactorHistoricalTrendAnalyseDto <byte> dto)
        {
            var trends = new List <FactorTrendCorrectRate>();

            if (dto.Numbers.Count < dto.AnalyseNumberCount)
            {
                throw new Exception("分析历史趋势时,分析记录数量不能大于记录数量!");
            }

            var analyseNumbers = dto.Numbers.OrderByDescending(n => n.TimesValue).Skip(0).Take(dto.AnalyseNumberCount).ToList();



            //允许的连续次数,由小到大
            for (var consecutiveTimes = dto.StartAllowMinFactorCurrentConsecutiveTimes; consecutiveTimes <= dto.EndAllowMinFactorCurrentConsecutiveTimes; consecutiveTimes++)
            {
                //允许的间隔数,由大到小
                for (var interval = dto.StartAllowMaxInterval; interval >= dto.EndAllowMaxInterval; interval--)
                {
                    var resultCount  = 0;
                    var successCount = 0;

                    var trend = new FactorTrendCorrectRate
                    {
                        //HistoricalTrendType = dto.HistoricalTrendType,
                        StartTimes = analyseNumbers[0].TimesValue,
                        //Items = new List<HistoricalTrendItem>(),
                        Location = dto.Location,
                        AllowConsecutiveTimes = consecutiveTimes,
                        AllowInterval         = interval,
                        AnalyseNumberCount    = dto.AnalyseNumberCount,
                        TypeDescription       = dto.TypeDescription
                    };
                    trends.Add(trend);
                    for (int i = 0, maxCount = analyseNumbers.Count; i < maxCount; i++)
                    {
                        var number     = analyseNumbers[i].Number;
                        var times      = analyseNumbers[i].Times;
                        var timesValue = analyseNumbers[i].TimesValue;
                        var numbers    = dto.Numbers.Where(n => n.TimesValue < timesValue).Select(n => n.Number).ToList();

                        var factorResults = Analyse(new PermutationFactorTrendAnalyseDto <byte>
                        {
                            Numbers             = numbers,
                            AllowMinTimes       = dto.AllowMinTimes,
                            NumbersTailCutCount = dto.NumbersTailCutCount,
                            AllowMinFactorCurrentConsecutiveTimes = consecutiveTimes,
                            AllowMaxInterval   = interval,
                            PermutationFactors = dto.PermutationFactors
                        });

                        //结果是否正确
                        var success = false;

                        //对结果再分析
                        var factorResult           = factorResults.OrderByDescending(t => t.FactorCurrentConsecutiveTimes).FirstOrDefault();
                        var factors                = new List <byte>();
                        var resultConsecutiveTimes = 0;
                        var resultInterval         = 0;
                        if (factorResult != null)
                        {
                            factors = factorResult.PredictiveFactor;
                            resultConsecutiveTimes = factorResult.FactorCurrentConsecutiveTimes;
                            resultInterval         = factorResult.Interval;
                            if (factorResult.PredictiveFactor != null && factorResult.PredictiveFactor.Count > 0)
                            {
                                resultCount++;

                                if (factors.Contains(number))
                                {
                                    successCount++;
                                    success = true;
                                }
                            }
                        }

                        var trendItem = new HistoricalTrendItem
                        {
                            Times   = times,
                            Number  = number,
                            Success = success,
                            ResultConsecutiveTimes = resultConsecutiveTimes,
                            ResultInterval         = resultInterval,
                            PredictiveFactor       = factors
                        };

                        trend.AnalyticalCount = resultCount;
                        trend.CorrectCount    = successCount;
                        trend.CorrectRate     = trend.AnalyticalCount == 0 ? 0 : (double)trend.CorrectCount / trend.AnalyticalCount;
                        //trend.Items.Add(trendItem);
                    }
                }
            }
            return(trends);
        }