예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }