Class BettingOddsCalculator
java.lang.Object
org.episteme.social.sports.BettingOddsCalculator
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)
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordContextual factors that influence the outcome of a match.static final recordThe result of an odds calculation, including probabilities and decimal odds. -
Method Summary
Modifier and TypeMethodDescriptioncalculateFromElo(Real ratingA, Real ratingB, BettingOddsCalculator.MatchContext context, double drawMargin) Calculates match probabilities and odds based on Elo ratings and context.static StringdecimalToAmerican(double decimalOdds) Converts Decimal odds to a formatted American format string.static intdecimalToAmericanNegative(double decimalOdds) Converts Decimal odds to US Moneyline (Negative).static intdecimalToAmericanPositive(double decimalOdds) Converts Decimal odds to US Moneyline (Positive).static doubledecimalToFractional(double decimalOdds) Converts Decimal odds to Fractional odds. e.g., 2.50 -> 1.5/1 (returned as 1.5)static RealexpectedValue(double stake, double decimalOdds, double trueProbability) Calculates the Expected Value (EV) of a specific bet.findArbitrage(double oddsA_bookie1, double oddsB_bookie2) Checks for an arbitrage opportunity between two bookmakers (Surebet).static doubleimpliedProbability(double decimalOdds) Calculates Implied Probability from Decimal odds.static RealkellyBetFraction(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.static doubleparlayOdds(List<Double> individualOdds) Calculates combined odds for a Parlay (Accumulator) bet.
-
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 AratingB- Elo rating of Team Bcontext- Contextual factorsdrawMargin- 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
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
Calculates the Expected Value (EV) of a specific bet. EV = (Prob * Profit) - (LossProb * Stake)- Parameters:
stake- Amount wagereddecimalOdds- Odds offeredtrueProbability- The 'actual' probability of winning- Returns:
- Expected Value
-
kellyBetFraction
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 winningdecimalOdds- Odds offered- Returns:
- Fraction of bankroll to bet (0.0 if EV is negative)
-
findArbitrage
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 1oddsB_bookie2- Odds for Outcome B at Bookie 2- Returns:
- Optional containing the percentage profit (ROI) if arbitrage exists
-
parlayOdds
-