public NFLResult PredictGame(NFLGame game, IStorePredictions persistor, DateTime predictionDate)
        {
            if (game.HomeNflTeam == null)
            {
                game.HomeNflTeam = Masters.Tm.GetTeam(game.Season + game.HomeTeam);
            }
            if (game.AwayNflTeam == null)
            {
                game.AwayNflTeam = Masters.Tm.GetTeam(game.Season + game.AwayTeam);
            }

            game.HomeNflTeam.LetterRating = Masters.Sm.GetGordan(game.Season, game.Season + game.HomeTeam);
            game.AwayNflTeam.LetterRating = Masters.Sm.GetGordan(game.Season, game.Season + game.AwayTeam);

            var weekIndex  = Int32.Parse(game.Week) - 1;
            var homeLetter = game.HomeNflTeam.LetterRating[weekIndex].Trim();
            var awayLetter = game.AwayNflTeam.LetterRating[weekIndex].Trim();
            //  home team
            var ratingGap = DanGordan.RatingGap(homeLetter, awayLetter);

            //  home teams get 2.5 points home field advantage
            ratingGap += 2.5M;
            //
            //  I give 3/4 strength to the letter power rating because it is adjusted every week and
            //  better takes into account a team's current form.  The number power ratings though more
            //  objective, are totally dependant on Scores, which at times can be deceptive.
            var homeNumberAvgRating = (game.HomeNflTeam.NumberRating[0] +
                                       game.HomeNflTeam.NumberRating[weekIndex]) / 2.0M;
            var awayNumberAvgRating = (game.AwayNflTeam.NumberRating[0] +
                                       game.AwayNflTeam.NumberRating[weekIndex]) / 2.0M;

            //  home advantage
            homeNumberAvgRating += 2.5M;
            var numberRating = (homeNumberAvgRating - awayNumberAvgRating);

            //  if the rating gap is positive its a home win
            game.GordanLine = RoundToNearestHalfPoint((0.75M * ratingGap) + (0.25M * numberRating));

            var homeScore = 21 + Convert.ToInt32((ratingGap / 2));
            var awayScore = 21 + Convert.ToInt32((ratingGap * -1) / 2);

            return(new NFLResult(game.HomeTeam, homeScore, game.AwayTeam, awayScore));
        }
Exemplo n.º 2
0
        public NFLResult PredictGame(NFLGame game, IStorePredictions persistor, DateTime predictionDate)
        {
            if (game.HomeNflTeam == null)
            {
                game.HomeNflTeam = Masters.Tm.GetTeam(game.Season + game.HomeTeam);
            }
            if (game.AwayNflTeam == null)
            {
                game.AwayNflTeam = Masters.Tm.GetTeam(game.Season + game.AwayTeam);
            }

            var homeLetter = game.HomeNflTeam.LetterRating[0].Trim();
            var awayLetter = game.AwayNflTeam.LetterRating[0].Trim();
            //  home team
            var ratingGap = DanGordan.RatingGap(homeLetter, awayLetter);

            //  home teams get 2.5 points home field advantage
            ratingGap += 2.5M;
            //  if the rating gap is positive its a home win
            game.GordanLine = ratingGap;

            var decimalEquivalent = DanGordan.CalculateSpreadsAsDecimals(ratingGap);

            if (ratingGap > 0)
            {
                //  home win
                game.HomeDecEquivalent = decimalEquivalent;        //  .5 pt win = .507 to home
                game.AwayDecEquivalent = 1.0M - decimalEquivalent; //              .493 to away
            }
            else
            {
                //  away win
                game.AwayDecEquivalent = decimalEquivalent;        //  .5 pt win = .507 to away
                game.HomeDecEquivalent = 1.0M - decimalEquivalent; //              .493 to home
            }

            var homeScore = 21 + Convert.ToInt32((ratingGap / 2));
            var awayScore = 21 + Convert.ToInt32((ratingGap * -1) / 2);

            return(new NFLResult(game.HomeTeam, homeScore, game.AwayTeam, awayScore));
        }