public override IEnumerable<TeamRecommendation> Analyse(Player player, Fixture fixture, SimulationContext context) { var res = new TeamRecommendation(); res.Type = TeamRecommendationType.HomeTeamAdvantage; var playerTeam = player.GetLeagueTeam(fixture); if (fixture.HomeTeam.Team.ID == playerTeam.Team.ID || player.HasHomeTeamAdvantage(fixture)) { res.Points = PointsWhenHomeTeam; } else if (fixture.AwayTeam.Team.ID == player.Team.ID) { res.Points = PointsWhenAwayTeam; } yield return res; }
public override IEnumerable<TeamRecommendation> Analyse(Player player, Fixture fixture, SimulationContext context) { if (PointMapper == null) throw new ArgumentException("Invalid property", nameof(PointMapper)); if (EloProvider == null) throw new ArgumentException("Invalid property", nameof(EloProvider)); var res = new TeamRecommendation(); res.Type = TeamRecommendationType.FixtureOdds; var playerTeam = player.GetLeagueTeam(fixture); var opposingTeam = player.GetOpposingTeam(fixture); if (playerTeam == null || opposingTeam == null) { _log.Warn($"Invalid teams"); yield break; } var playerTeamEloRating = EloProvider.GetRating(fixture.Time, player.Team).WaitForResult(); var opposingTeamEloRating = EloProvider.GetRating(fixture.Time, opposingTeam.Team).WaitForResult(); if (playerTeamEloRating == null) { _log.Warn($"Could not get elo rating for team {playerTeam.Team.Name} @{fixture.Time}"); yield break; } if (opposingTeamEloRating == null) { _log.Warn($"Could not get elo rating for team {opposingTeam.Team.Name} @{fixture.Time}"); yield break; } float diff = playerTeamEloRating.Rating - opposingTeamEloRating.Rating; float diffPercentage = diff / playerTeamEloRating.Rating; var valueMap = new ValueMap(); valueMap[ValueMapKeys.EloRatingPlayerTeam] = playerTeamEloRating.Rating; valueMap[ValueMapKeys.EloRatingOpposingTeam] = opposingTeamEloRating.Rating; valueMap[ValueMapKeys.EloRatingTeamDifferance] = diff; valueMap[ValueMapKeys.EloRatingTeamDifferancePercentage] = diffPercentage; res.Points = PointMapper.Test(valueMap).Sum(x => x.Points); yield return res; }
public override IEnumerable<TeamRecommendation> Analyse(Player player, Fixture fixture, SimulationContext context) { if (PointMapper == null) throw new ArgumentException("Invalid property", nameof(PointMapper)); var res = new TeamRecommendation(); res.Type = TeamRecommendationType.FixtureOdds; var playerTeam = player.GetLeagueTeam(fixture); var valueMap = new ValueMap(); if (fixture.Odds == null) { _log.Info($"No odds for fixture {fixture.HomeTeam.Team.ShortName} vs {fixture.AwayTeam.Team.ShortName} (GW #{fixture.Gameweek.Number}, cannot continue analyse"); yield break; } else if (fixture.HomeTeam.Team.ID == playerTeam.Team.ID) { valueMap["odds-win"] = fixture.Odds.HomeWin.Value; valueMap["odds-draw"] = fixture.Odds.Draw.Value; valueMap["odds-loss"] = fixture.Odds.AwayWin.Value; } else if (fixture.AwayTeam.Team.ID == player.Team.ID) { valueMap["odds-win"] = fixture.Odds.AwayWin.Value; valueMap["odds-draw"] = fixture.Odds.Draw.Value; valueMap["odds-loss"] = fixture.Odds.HomeWin.Value; } else { _log.Warn($"Player '{player.DisplayName}' doesn't play for any of the fixture teams: {fixture.HomeTeam.Team.ShortName} vs {fixture.AwayTeam.Team.ShortName} (GW #{fixture.Gameweek.Number}"); yield break; } res.Points = PointMapper.Test(valueMap).Sum(x => x.Points); yield return res; }
public void AddRecommendation(TeamRecommendation recommendation) { TeamRecommendations.Add(recommendation); }