public void ProcessUpcomingFixtures(out double expectedProfit) { List <MetricInterface> metrics = MetricFactory.GetMetrics(metricConfigs_, configManager_.GetYear(), configManager_, fixtureRetriever_); List <Fixture> thisRoundFixtures = fixtureRetriever_.GetRound(configManager_.GetYear(), configManager_.GetMatchDay()); List <double> matchdayOdds = new List <double>(thisRoundFixtures.Count); foreach (Fixture fixture in thisRoundFixtures) { int totalMetricsWithData = 0; string aggregateResult = string.Empty; foreach (MetricInterface metric in metrics) { ResultChecker checker = new ResultChecker(metric, fixture, configManager_); if (checker.dataAvailable) { aggregateResult += checker.GetExpectedResult() + " "; totalMetricsWithData++; } } string computedResult = ComputeExpectedResult(aggregateResult, totalMetricsWithData); if (computedResult.Length == 0) { totalMetricsWithData = 0; } else if (fixture.odds[computedResult] > configManager_.GetMaxOdds() && fixture.odds[computedResult] < configManager_.GetMinOdds()) { totalMetricsWithData = 0; } string padding = new string(' ', 50 - fixture.homeTeamName.Length - fixture.awayTeamName.Length); if (totalMetricsWithData == metrics.Count && computedResult != string.Empty) { logger_.LogInfo("{0} - {1},{2} result {3}, \t odds {4:0.00} \t aggregate {5} \t date {6} \n", fixture.homeTeamName, fixture.awayTeamName, padding, computedResult, fixture.odds[computedResult], aggregateResult, fixture.date); matchdayOdds.Add(fixture.odds[computedResult]); } else { logger_.LogInfoFail("{0} - {1},{2} result {3}, \t odds {4:0.00} \t aggregate {5} \t date {6} \n", fixture.homeTeamName, fixture.awayTeamName, padding, computedResult, fixture.odds[computedResult], aggregateResult, fixture.date); } } expectedProfit = GetMatchdayProfit(matchdayOdds); logger_.LogInfo("Profit: {0}", expectedProfit); }
public void GetExpectedResult2() { // Arrange int pctTeam1 = 10; int pctTeam2 = 90; metricInterfaceMock.Setup(p => p.GetPercentage(out pctTeam1, out pctTeam2, teamId1, teamId2, actualFixture)); configManagerMock.Setup(p => p.GetDrawMargin()).Returns(20); configManagerMock.Setup(p => p.GetDrawMixedMargin()).Returns(40); ResultChecker resultChecker = new ResultChecker(metricInterfaceMock.Object, actualFixture, configManagerMock.Object); // Act string expectedResult = resultChecker.GetExpectedResult(); // Assert Assert.AreEqual(expectedResult, "2"); Assert.IsTrue(resultChecker.dataAvailable); }
public void GetMatchdayData(out int correctFixturesWithData, out int totalFixturesWithData, out double currentProfit, int matchDay, int year) { List <MetricInterface> metrics = MetricFactory.GetMetrics(metricConfigs_, year, configManager_, fixtureRetriever_); List <Fixture> thisRoundFixtures = fixtureRetriever_.GetRound(year, matchDay); correctFixturesWithData = 0; totalFixturesWithData = 0; List <double> matchdayOdds = new List <double>(thisRoundFixtures.Count); foreach (Fixture fixture in thisRoundFixtures) { int totalMetricsWithData = 0; StringBuilder aggregatExpectedResultsBuilder = new StringBuilder(); string actualResult = string.Empty; foreach (MetricInterface metric in metrics) { ResultChecker checker = new ResultChecker(metric, fixture, configManager_); if (checker.dataAvailable) { aggregatExpectedResultsBuilder.Append(checker.GetExpectedResult()); aggregatExpectedResultsBuilder.Append(" "); totalMetricsWithData++; } actualResult = fixture.result; } string aggregateResult = aggregatExpectedResultsBuilder.ToString(); /*double oddDiff1 = fixture.odds["1"] - fixture.fairOdds["1"]; * if (oddDiff1 > 0 && oddDiff1 < 1 * && fixture.odds["1"] <= configManager_.GetMaxOdds() * && fixture.odds["1"] >= configManager_.GetMinOdds()) * { * aggregateResult += "1 "; * totalMetricsWithData++; * } * * double oddDiffX = fixture.odds["X"] - fixture.fairOdds["X"]; * if (oddDiffX > 0 && oddDiffX < 1 * && fixture.odds["X"] <= configManager_.GetMaxOdds() * && fixture.odds["X"] >= configManager_.GetMinOdds()) * { * aggregateResult += "X "; * totalMetricsWithData++; * }*/ string computedResult = ComputeExpectedResult(aggregateResult, totalMetricsWithData); if (computedResult.Length == 0) { totalMetricsWithData = 0; } else if (fixture.odds[computedResult] > configManager_.GetMaxOdds() || fixture.odds[computedResult] < configManager_.GetMinOdds()) { totalMetricsWithData = 0; } string padding = new string(' ', 50 - fixture.homeTeamName.Length - fixture.awayTeamName.Length); if (totalMetricsWithData == metrics.Count && computedResult.Length != 0 && actualResult.Length != 0) { bool metricSuccess = computedResult.Contains(actualResult); totalFixturesWithData++; if (metricSuccess) { correctFixturesWithData++; } if (metricSuccess) { logger_.LogDebugSuccess("{0} - {1},{2} result {3}({4}), \t odds {5:0.00} \t aggregate {6} \n", fixture.homeTeamName, fixture.awayTeamName, padding, computedResult, actualResult, fixture.odds[computedResult], aggregateResult); matchdayOdds.Add(fixture.odds[computedResult]); } else { logger_.LogDebugFail("{0} - {1},{2} result {3}({4}), \t odds {5:0.00} \t aggregate {6} \n", fixture.homeTeamName, fixture.awayTeamName, padding, computedResult, actualResult, fixture.odds[computedResult], aggregateResult); matchdayOdds.Add(0); } } else { logger_.LogDebug("{0} - {1},{2} result {3}({4}), \t odds {5:0.00} \t aggregate {6} \n", fixture.homeTeamName, fixture.awayTeamName, padding, computedResult, actualResult, fixture.odds[computedResult], aggregateResult); } } currentProfit = GetMatchdayProfit(matchdayOdds); }