Tennis Games Handicap (Spread) Model — SGW/RGW version
Uses Service Games Won% and Return Games Won% (by surface) plus context. Presets included for starting point.
Match Inputs
Loads baseline SGW/RGW/volatility and sets the surface. You can edit after applying.
Core Performance Inputs (by surface)
Context & Adjustments
Advanced nudges (optional)
Negative favors A (fresher A), positive favors B.
Scoped styles
Outputs
P(A covers spread)
—
Spread is A games − line. A covers if margin ≥ line.
P(B covers spread)
—
B covers if margin < line.
Fair Odds (A side)
—
American odds for A covering.
Fair Odds (B side)
—
American odds for B covering.
Distribution Snapshot
A cover
—
How this prices spreads (SGW/RGW)
– Core drivers are Service Games Won% (SGW) and Return Games Won% (RGW), by surface.
– Adjusts SGW for court speed, wind, injury, fatigue, and second-serve edges.
– Simulates sets and matches to build the distribution of A games − B games.
– P(A covers) = P(margin ≥ line). Converts to fair American odds.
– Use presets to start, then tweak for matchup and conditions.
– Adjusts SGW for court speed, wind, injury, fatigue, and second-serve edges.
– Simulates sets and matches to build the distribution of A games − B games.
– P(A covers) = P(margin ≥ line). Converts to fair American odds.
– Use presets to start, then tweak for matchup and conditions.
What this tool does
- Prices game spreads like -2.5, -3.5, +2.5, etc.
- Uses Service Games Won% (SGW) and Return Games Won% (RGW) as core drivers, with court/conditions and advanced nudges.
- Runs a Monte Carlo simulation of full matches to produce:
- P(A covers spread)
- P(B covers spread)
- Fair American odds for both sides
- Optional value flags if you enter sportsbook prices
Key concepts
- Spread line: Enter the handicap you’re pricing. If line = -2.5, the model computes P(A wins by 3+ games).
- SGW (Service Games Won%): How often a player holds serve. Higher SGW increases spread for that player.
- RGW (Return Games Won%): How often a player breaks. Higher RGW reduces opponent holds and increases spread.
- Context: Surface, altitude/indoor, and wind shift hold probabilities. Volatility and correlation affect randomness and shared set-to-set swings.
- Advanced nudges: Optional small adjustments for second‑serve matchups, pressure conversion, and fatigue/travel.
Recommended workflow (2–4 minutes)
- Load a preset that matches tour and surface (ATP/WTA, Hard/Clay/Grass/Indoor).
- Input the book’s spread line (e.g., -2.5).
- Enter SGW% and RGW% for both players, ideally surface-specific (last 12–24 months). You can google this.
- Adjust context:
- Altitude/Indoor for faster conditions.
- Wind for outdoor sessions (reduces holds).
- Injury/fitness nudge if you have reliable info.
- Optional advanced nudges:
- Second-serve: Enter A’s 2nd-serve points won on serve and B’s 2nd-serve return vs 2nd (and vice versa).
- Conversion nudge: Slightly favor returners or servers in pressure points.
- Fatigue: Negative means A is fresher; positive means B is fresher.
- Click Calculate. Review P(A covers)/P(B covers) and fair odds.
- If you have book prices, paste them to see value badges (difference between fair probability and implied from book odds).
How to source inputs quickly
- SGW% and RGW%:
- ATP/WTA official stats (Service Games Won %, Return Games Won %), Tennis Abstract, Ultimate Tennis Statistics.
- Prefer surface splits. If you only have overall, use preset as baseline and nudge ±1–2%.
- Second‑serve stats (optional):
- Infosys ATP/WTA match centers or Tennis Abstract if available.
- Context:
- Surface and indoor/outdoor from tournament site.
- Altitude from event page/Wikipedia (e.g., Madrid ~650m).
- Wind from a weather app for the match time.
Parameter tips
- Volatility: Higher for big-serve matchups or variable conditions; lower for grindy clay matchups.
- Correlation: Higher when conditions affect both players similarly (windy day, slow balls).
- Injury/Fatigue: Keep nudges modest unless confirmed. Small changes can move spread probabilities a lot.
Interpreting outputs
- P(A covers): Probability that A’s total games − B’s total games ≥ line.
- Fair odds: No-vig American odds derived from those probabilities.
- Value badges: Show probability edge vs your entered book prices. Positive “pts” suggests potential value, but still sanity-check with market and matchup.
Common scenarios and adjustments
- Big server vs average returner on fast court:
- Slightly increase A’s SGW; small boost from Altitude/Indoor; maybe lower wind.
- Volatility a tick higher; expect larger spreads.
- Elite returner vs shaky second serve:
- Use second-serve nudges to favor returner; consider a “returner-favoring” conversion nudge.
- Spreads can swing toward the returner even if raw SGW looks close.
- Windy outdoor session:
- Apply -3% to -6% wind. Lowers holds, narrows spreads, increases variance in breaks.
Working sample for context and for you to follow along.
Scenario
- Tour/surface: ATP — Hard (outdoor), calm wind, no altitude.
- Line: A -2.5 games.
- Player A: Strong server, average returner.
- Player B: Solid all-rounder.
Inputs
- Preset: ATP — Hard
- SGW% / RGW% (surface-weighted last 12–24 months):
- Player A: SGW 84, RGW 20
- Player B: SGW 80, RGW 22
- Volatility proxies (aces+DF per service game):
- A 0.70, B 0.55
- Context:
- Altitude/Indoor: Neutral
- Wind: Calm
- Injury: Neutral
- Advanced nudges:
- A 2nd-serve PW on serve: 53
- B 2nd-serve return vs 2nd: 51
- B 2nd-serve PW on serve: 50
- A 2nd-serve return vs 2nd: 52
- Conversion nudge: Neutral
- Fatigue: 0.00
- Volatility slider: 0.32
- Correlation: 0.30
- Sims: 20,000
Interpretation (example output you might see; your run will vary slightly)
- P(A covers -2.5): ~56–58% → fair odds around -130 to -138
- P(B covers +2.5): ~42–44% → fair odds around +130 to +138
- Notes:
- A’s stronger SGW and slight second‑serve edge nudge A upward.
- If wind becomes Moderate (-3%), A’s cover probability typically dips a couple of points.
- If you enter a sportsbook price of -110 on A -2.5 (implied ~52.4%), the value badge should flag a positive edge vs a ~57% fair.
Quick troubleshooting
- Results feel too favorite-heavy:
- Lower Altitude/Indoor or add Wind.
- Reduce SGW if your inputs used overall rather than surface-specific numbers.
- Too returner-heavy:
- Check that RGW isn’t overstated; use a 12–24 month, surface-filtered split.
- Reduce Conversion nudge if set to favor returners.
- Performance:
- If it feels slow, reduce Monte Carlo samples to 10,000 during iteration; raise to 30–50k to finalize.
FAQ
- Do I need second-serve stats? No. They’re optional. Use them when high-confidence and surface-relevant.
- Can I model alt lines? Yes—run multiple lines or ask me to add an alt-lines table.
- Best-of-5 note: Spreads widen for favorites. Expect higher P(cover) with the same SGW/RGW gap.


