1from models.odds import american_to_decimal, implied_probability
2
3def calculate_expected_value(
4 true_probability: float,
5 american_odds: int,
6 stake: float = 1.0
7) -> dict:
8 "Calculate expected value for a bet."
9 decimal_odds = american_to_decimal(american_odds)
10 implied_prob = implied_probability(american_odds)
11 edge = true_probability - implied_prob
12
13 ev = (true_probability * (decimal_odds - 1) * stake) - \
14 ((1 - true_probability) * stake)
15
16 roi = ev / stake * 100
17
18 return {
19 "edge": round(edge * 100, 2),
20 "expected_value": round(ev, 4),
21 "roi_per_bet": round(roi, 2),
22 "kelly_fraction": round(edge / (decimal_odds - 1), 4),
23 "is_positive_ev": ev > 0
24 }
25
26# Lakers -3.5 @ -110
27result = calculate_expected_value(
28 true_probability=0.542,
29 american_odds=-110
30)