The MLB Player Props desk prices Kalshi player prop alt-line rungs using probability curves derived from FanDuel/DraftKings de-vigged anchor lines. For markets without sportsbook coverage (home runs), a model-only approach using Zero-Inflated Poisson with EWMA baselines is used. Edges are detected when model probability diverges from Kalshi price by more than 4 cents after the 7% fee.
Current production: 8,260 prop edges stored across 4 active prop types. 1,083 executable edges. Scanner runs 4x daily.
| Series | Description | Scanner Status |
|---|---|---|
| KXMLBKS | Pitcher Strikeouts | Active — 1,384 edges, 246 executable |
| KXMLBHIT | Batter Hits | Active — 2,176 edges, 705 executable |
| KXMLBTB | Batter Total Bases | Active — 2,294 edges, 126 executable |
| KXMLBHR | Batter Home Runs | Active (model-only) — 2,406 edges, 6 executable |
| KXMLBHRR | Hits+Runs+RBIs combo | Collecting prices |
| KXMLBSTAT | Season Stats | Collecting prices |
| KXMLBSTATCOUNT | Season Stat Count | Collecting prices |
| KXMLBSEASONHR | Season HRs | Collecting prices |
| Market | FanDuel | DraftKings | Anchor Used |
|---|---|---|---|
| pitcher_strikeouts | Yes | Yes | FanDuel (primary) |
| pitcher_outs | Yes | Yes | FanDuel (primary) |
| batter_stolen_bases | Yes | No | FanDuel |
| batter_hits | No | Yes | DraftKings (FD unavailable) |
| batter_total_bases | No | Yes | DraftKings (FD unavailable) |
| batter_rbis | No | Yes | DraftKings (no Kalshi market) |
| batter_runs_scored | No | Yes | DraftKings (no Kalshi market) |
| batter_home_runs | No | No | Model-only (ZIP + EWMA baselines) |
| Prop Type | Distribution | EWMA Span | Key Driver |
|---|---|---|---|
| Pitcher Strikeouts | Negative Binomial | 8 games | K/9 x projected IP x opp K rate x umpire zone |
| Pitcher Outs | Truncated Normal | 12 games | Avg outs/start, manager hook probability |
| Batter Hits | Beta-Binomial | 12 games | Hit rate x PA x platoon split |
| Batter Home Runs | Zero-Inflated Poisson | 20 games | HR/PA x PA x park factor; pi=0.85 (model-only) |
| Batter Total Bases | Multinomial per PA | 15 games | P(1B), P(2B), P(3B), P(HR) per PA |
| Batter RBIs | Monte Carlo (10K sims) | 15 games | Lineup simulation — deferred (no Kalshi market) |
| Batter Runs | Monte Carlo (10K sims) | 15 games | Subsequent batter quality — deferred (no Kalshi market) |
| Stolen Bases | Bernoulli per opportunity | 25 games | P(attempt) x P(success) — deferred (no Kalshi market) |
| Scanner | Unique Inputs |
|---|---|
| Pitcher Ks | Opp team K rate, umpire K zone, pitch count projection, SP pitch mix vs lineup handedness |
| Pitcher Outs | SP quality trend, opp team contact rate, opener detection (outs capped low) |
| Batter Hits | SP WHIP vs hand, batter contact rate, BABIP luck adjustment, park hits factor |
| Batter HRs | ZIP model, park HR factor (hand-specific), EWMA baseline, pi=0.85 zero-inflation |
| Batter TB | Multinomial outcomes per PA, ISO power, park dimensions, SP pitch mix weakness |
| Parameter | Value |
|---|---|
| Single prop max | 3% bankroll |
| Per-player max | 5% bankroll |
| Per-game max | 8% bankroll |
| Daily prop exposure | 15% bankroll |
| Kelly fraction | 1/4 |
| Correlation | Reduction |
|---|---|
| Pitcher K-over + Outs-over (rho ~ 0.6) | -20% combined |
| Batter Hits-over + TB-over (rho ~ 0.7) | -25% combined |
| Batter HR-over + RBI-over (rho ~ 0.4) | -15% combined |
| Constant | Value |
|---|---|
| Kalshi fee | 7% on profit |
| Min net edge | 4 cents |
| Min sample (pitcher) | 10 games |
| Min sample (batter) | 20 games |
| EWMA alpha: K | 0.08 (span ~8) |
| EWMA alpha: hits/TB | 0.12 (span ~12) |
| EWMA alpha: HR | 0.05 (span ~20) |
| EWMA alpha: SB | 0.04 (span ~25) |
| ZIP pi (HR) | 0.85 |
| FD-DK divergence flag | >5 cents |
| Opener IP threshold | < 3.0 avg IP |
| Data | Frequency | Time (ET) | Status |
|---|---|---|---|
| Kalshi prop prices | Every 30 min | Continuous | DEPLOYED |
| FanDuel prop lines | 2x daily + pre-close | Synced with scanner | DEPLOYED |
| DraftKings props | 2x daily + pre-close | Cross-validation | DEPLOYED |
| Prop edge scanners | 4x daily | 8AM/10AM/2PM/6PM | DEPLOYED |
| Steam detection | Every 30 min | With collector | DEPLOYED |
| Pitcher game logs | Daily | 11 AM | DEPLOYED |
| Batter game logs | Daily | 11 AM | DEPLOYED |
| SP/Batter baselines | Daily | 11 AM | DEPLOYED |
| Platoon splits (team + individual) | Daily | 11 AM | DEPLOYED |
| Statcast team batting | Daily | 11 AM | DEPLOYED |
| Statcast pitcher stats | Daily | 11 AM | DEPLOYED |
| Baseball Reference | Daily | 11 AM | DEPLOYED |
| Park factors (static + dynamic) | Daily | 11 AM | DEPLOYED |
| Weather | Daily | Pre-game | DEPLOYED |
| Ump scorecards | Daily | 11 AM | DEPLOYED |
| Lineups | Game day | Pre-game | DEPLOYED |
| Schedule/Transactions | Daily | 11 AM | DEPLOYED |
| Opener detection | Daily | 11 AM | DEPLOYED |
| Player ID crosswalk | Daily | 11 AM | DEPLOYED |
| Source | Purpose | Cost |
|---|---|---|
| FanDuel (Odds API) | Sharp prop anchor (K, outs, SB) | Shared sub |
| DraftKings (Odds API) | Anchor for hits, TB, RBI, runs | Shared sub |
| Kalshi REST API | Exchange prices | Free |
| MLB Stats API | Game logs, rosters, lineups, schedule, handedness | Free |
| Baseball Savant | Statcast — team batting + pitcher stats (401 pitchers) | Free |
| Baseball Reference | Season batting/pitching stats | Free |
| UmpScorecards | Umpire K zone adjustments | Free |
| NWS API | Game-day weather | Free |
| ESPN | Schedule, park factors | Free |