Tennis Desk Strategy Spec

Version: 3.0 | Date: 2026-04-03 | Status: DEPLOYED

Overview

Trade mispriced Kalshi tennis contracts using Pinnacle de-vigged fair value. Coverage: ~49 Kalshi series spanning ATP, WTA, Challenger, Grand Slams. Year-round daily action.

Edge Detection

Market De-vig Method Notes
Match winner (2-way) Shin Primary market — DEPLOYED
Game spread / Total games Markov chain + Kalshi alt-lines DEPLOYED — model-priced via Markov chain, compared to Kalshi prices
Set winner / Exact set score Markov chain + Kalshi alt-lines DEPLOYED — exact set score matrix from Markov chain
Grand Slam outright (N-way) Monte Carlo (100K bracket sims) DEPLOYED — SA-Elo + fatigue through rounds

Kalshi fee: 7% on profit. Gross edge ~4.3c needed to net 4c. Min edge: 4 cents after fee.

Tennis-Specific Models

Edge Scanner (DEPLOYED)

Scans Pinnacle ML de-vigged vs Kalshi match prices. Uses last-name fuzzy matching for player identification. Now produces edges with correct market type labels (ml, spread, total, setscore, setwinner).

Odds API Integration: Dynamic tournament key resolution deployed — automatically discovers active ATP/WTA tournaments from the Odds API sports endpoint. No more stale hardcoded keys.

Position Sizing

Market Kelly Fraction Max
Match winner 1/8
Game/set spreads 1/8
Total games 1/8 2% bankroll on extremes
Set betting 1/10
Exact scores 1/12 0.5% bankroll
Outrights 1/8
Per-match cap 3% bankroll

Collection Schedule

Time (ET) Data
Every 30min Kalshi tennis prices (49 series, ~498K snapshots)
Adaptive Pinnacle tennis odds (dynamic tournament discovery)
Weekly Sackmann CSV ingest, SA-Elo, surface baselines, H2H, rankings, tournaments, draws, WTA calibration, TennisAbstract
Daily Fatigue scores, weather (24 venues)
8AM/10AM/2PM/6PM Edge scanner (all market types)
Static Integrity kill-switch config

Kalshi Series (49 active)

ATP Match: KXATPMATCH, KXATPCHALLENGERMATCH, KXATPDOUBLES WTA Match: KXWTAMATCH, KXWTACHALLENGERMATCH Alt Lines: KXATPGAMETOTAL, KXATPGSPREAD, KXATPGAMESPREAD Sets: KXATPSETWINNER, KXATPTOTALSETS, KXATPEXACTMATCH, KXATPEXACTSETS, KXATPANYSET Outrights: KXATPGRANDSLAM, KXWTAGRANDSLAM, KXATPGRANDSLAMFIELD Rankings: KXATP1RANK, KXATPRANK Table Tennis: KXTABLETENNIS, KXTTELITEGAME

Key Constants

Parameter Value
SA-Elo blend 0.5 overall + 0.3 surface + 0.2 recent
Min edge 4 cents
Kalshi fee 7% on profit
Kelly fraction (match) 1/8
Min surface matches 10+ for both players
H2H min meetings 3
Elo stabilization ATP 30 initial, 50+ stable
Elo stabilization WTA ~40 matches
WTA upset rate ~38% vs ATP ~32%
Challenger Kelly 50% of normal
Integrity kill-switch 40c Pinnacle move on Challenger/ITF

Deferred (needs more data)

Item Reason
WTA edge scanner Needs WTA Pinnacle data flowing; dynamic resolver deployed, waiting for data

Discarded

Item Reason
Kalshi WebSocket REST polling adequate
Betfair exchange Not worth integration
Press conference sentiment Low-signal, council rejected
In-play Bayesian updating No spec exists
OnCourt historical DB $5K/yr, not building
Pinnacle direct feed $1.5K/yr, not building
Source: ~/edgeclaw/results/spec-panel/sports-desk/tennis-strategy.md