Class BettingOddsCalculator

java.lang.Object
org.episteme.social.sports.BettingOddsCalculator

public final class BettingOddsCalculator extends Object
A utility for calculating betting odds, probabilities, and expected values for sports matches. Uses underlying rating systems (like Elo) and applies contextual factors.
Since:
1.0
Version:
1.1
Author:
Silvere Martin-Michiellot, Gemini AI (Google DeepMind)
  • Method Details

    • calculateFromElo

      public static BettingOddsCalculator.OddsResult calculateFromElo(Real ratingA, Real ratingB, BettingOddsCalculator.MatchContext context, double drawMargin)
      Calculates match probabilities and odds based on Elo ratings and context.
      Parameters:
      ratingA - Elo rating of Team A
      ratingB - Elo rating of Team B
      context - Contextual factors
      drawMargin - The "width" of the draw band in probability space (sport specific)
      Returns:
      OddsResult containing implied probabilities and bookmaker-style odds
    • decimalToFractional

      public static double decimalToFractional(double decimalOdds)
      Converts Decimal odds to Fractional odds. e.g., 2.50 -> 1.5/1 (returned as 1.5)
      Parameters:
      decimalOdds - Decimal odds
      Returns:
      Fractional numerator (denominator assumed 1)
    • decimalToAmericanPositive

      public static int decimalToAmericanPositive(double decimalOdds)
      Converts Decimal odds to US Moneyline (Positive). Used for underdogs (odds >= 2.00). Returns amount won on 100 stake.
      Parameters:
      decimalOdds - Decimal odds (> 2.0)
      Returns:
      Moneyline value
    • decimalToAmericanNegative

      public static int decimalToAmericanNegative(double decimalOdds)
      Converts Decimal odds to US Moneyline (Negative). Used for favorites (odds invalid input: '<' 2.00). Returns stake needed to win 100.
      Parameters:
      decimalOdds - Decimal odds (invalid input: '<' 2.0)
      Returns:
      Moneyline value (negative integer)
    • decimalToAmerican

      public static String decimalToAmerican(double decimalOdds)
      Converts Decimal odds to a formatted American format string.
      Parameters:
      decimalOdds - Decimal odds
      Returns:
      String like "+150" or "-200"
    • impliedProbability

      public static double impliedProbability(double decimalOdds)
      Calculates Implied Probability from Decimal odds. P = 1 / Odds
      Parameters:
      decimalOdds - Decimal odds
      Returns:
      Probability (0-1)
    • expectedValue

      public static Real expectedValue(double stake, double decimalOdds, double trueProbability)
      Calculates the Expected Value (EV) of a specific bet. EV = (Prob * Profit) - (LossProb * Stake)
      Parameters:
      stake - Amount wagered
      decimalOdds - Odds offered
      trueProbability - The 'actual' probability of winning
      Returns:
      Expected Value
    • kellyBetFraction

      public static Real kellyBetFraction(double trueProbability, double decimalOdds)
      Calculates the Kelly Criterion fraction for optimal bet sizing. f* = (bp - q) / b where b = net odds (odds - 1), p = prob of winning, q = prob of losing.
      Parameters:
      trueProbability - Estimated probability of winning
      decimalOdds - Odds offered
      Returns:
      Fraction of bankroll to bet (0.0 if EV is negative)
    • findArbitrage

      public static Optional<Real> findArbitrage(double oddsA_bookie1, double oddsB_bookie2)
      Checks for an arbitrage opportunity between two bookmakers (Surebet). Occurs if the sum of implied probabilities is less than 1.
      Parameters:
      oddsA_bookie1 - Odds for Outcome A at Bookie 1
      oddsB_bookie2 - Odds for Outcome B at Bookie 2
      Returns:
      Optional containing the percentage profit (ROI) if arbitrage exists
    • parlayOdds

      public static double parlayOdds(List<Double> individualOdds)
      Calculates combined odds for a Parlay (Accumulator) bet. Multiplies distinct event odds together.
      Parameters:
      individualOdds - List of decimal odds for each selection
      Returns:
      Combined decimal odds