Golf Strategy Spec v5.0
Updated: 2026-04-03 | Status: DEPLOYED — Full Pipeline Active (Council Calibration v2)
Overview
The Golf desk monitors Kalshi prediction market prices across 15+ categories covering PGA Tour, LPGA, LIV Golf, DP World Tour, Majors, and special events. Edge detection uses Strokes Gained data from the PGA Tour GraphQL API.
Current State
| Metric |
Value |
| Kalshi snapshots |
40,826+ across 15 market categories |
| SG players |
167 (PGA Tour GraphQL API) |
| ESPN results |
1,145 (10 tournaments, 253 player form entries) |
| OWGR rankings |
500 (top 500 world rankings) |
| Course DNA |
10 PGA Tour courses with SG-weighted vectors |
| Edge scanners |
5 active (H2H, Make Cut, Top 5/10/20) |
| Edges found |
13 on first scan (4 H2H, 2 Cut, 3 each Top N) |
Market Categories (15 Active)
| Category |
Ticker Prefixes |
Status |
| Tournament Winner |
KXPGATOUR, KXMASTERS, KXPGA, KXLPGATOUR |
Active |
| Top 5 / 10 / 20 |
KXPGATOP5, KXPGATOP10, KXPGATOP20 |
Active + Scanner |
| Make the Cut |
KXPGAMAKECUT, KXMASTERSCUT |
Active + Scanner |
| H2H Matchups |
KXPGAH2H, KXGOLFH2H |
Active + Scanner |
| 3-Ball Groupings |
KXPGA3BALL |
Active (no scanner) |
| Round Leaders |
KXPGAR1-3LEAD |
Active (no scanner) |
| Round Top 5/10 |
KXPGAR1TOP5/10 |
Active (no scanner) |
| Hole in One |
KXPGAHOLEINONE |
Seasonal |
| Win Margin/Scores |
KXPGAWINMARGIN, etc. |
Seasonal |
| Playoff |
KXPGAPLAYOFF |
Seasonal |
| Futures/Majors |
KXPGAMAJORWIN, KXGOLFMAJORS |
Active |
| Ryder Cup |
KXRYDERCUP, KXPGARYDER |
Off-season |
| Specials |
KXPGATIGER, KXTGLMATCH |
Active |
Edge Detection Models
H2H Scanner
- Model: SG differential → P(A beats B) via normal CDF
- Sigma: ROUND_SIGMA=2.8, TOURNAMENT_SIGMA=5.6, H2H_SIGMA=7.9
- Min edge: 4 cents net | Max spread: 25 cents
- Kelly: 1/4
Make the Cut Scanner
- Model: Logistic —
P(cut) = 1 / (1 + exp(-(0.6 + 1.5 * SG:Total)))
- Base rate: ~65% (top 65 + ties from 156-player field)
- Min edge: 4 cents net | Max spread: 25 cents
- Kelly: 1/4
Top 5/10/20 Scanners
- Model: 50,000-iteration Monte Carlo simulation
- Input: SG:Total for top 80 players in field
- Sigma: TOURNAMENT_SIGMA=5.6 per player per tournament
- Min edge: 4 cents net | Max spread: 25 cents
- Kelly: Top 20=1/5, Top 10=1/6, Top 5=1/8
Risk Controls
- Max tournament exposure: 10% bankroll
- Max 3 correlated positions per wave
- Max 5 positions per market type per tournament
- Kalshi fee rate: 7% on profit
Data Sources
| Source |
Table |
Rows |
Schedule |
Status |
| Kalshi API |
sports_odds_snapshots |
40,826 |
Every 30min |
DEPLOYED |
| Pinnacle (Odds API) |
sports_odds_snapshots |
— |
Adaptive |
DEPLOYED |
| SBR Multi-Book |
sbr_book_odds |
— |
4x daily |
DEPLOYED |
| Pregame.com |
pregame_consensus |
19 |
3x daily |
DEPLOYED |
| PGA Tour SG (GraphQL) |
golf_player_sg |
167 |
Daily 11AM |
DEPLOYED |
| ESPN Golf |
golf_tournament_results, golf_player_form |
1,145 / 253 |
Daily 11AM |
DEPLOYED |
| OWGR Rankings |
golf_owgr |
500 |
Weekly (daily run) |
DEPLOYED |
| Course DNA |
golf_course_data |
10 |
Static |
DEPLOYED |
Collection Schedule (all ET)
| Time |
What |
| 11:00 AM |
SG stats, ESPN results, OWGR rankings, course data |
| 8AM, 10AM, 2PM, 6PM |
Edge scanner (H2H, Cut, Top 5/10/20) |
| Every 30min |
Kalshi price snapshots |
Cron & Freshness
| Key |
Type |
Threshold |
| kalshi-golf |
api |
45min |
| scrape-golf-sg |
scraper |
1455min (24h15m) |
| scrape-golf-espn |
scraper |
1455min (24h15m) |
| scrape-owgr |
scraper |
10095min (~7d) |
| golf-course-data |
scraper |
43215min (~30d) |
| edge-scanner-golf-* (6 keys) |
scanner |
375min (6h15m) |
Key Constants
| Constant |
Value |
Source |
| ROUND_SIGMA |
2.8 |
PGA Tour empirical |
| INTER_ROUND_RHO |
0.18 |
Council ruling 2026-04-03 |
| TOURNAMENT_SIGMA |
6.95 |
ROUND_SIGMA × √(4+4×3×rho) — correlated rounds |
| H2H_SIGMA |
7.5 |
Reduced from 7.9 per council |
| KALSHI_FEE_RATE |
0.07 |
Platform fee |
| MIN_NET_EDGE |
0.04 |
Minimum to flag |
| MAX_SPREAD_CENTS |
25 |
Golf markets wider |
| FIELD_SIZE |
156 |
Standard PGA field |
| MC_SIMULATIONS |
50,000 |
With antithetic variates (100K effective) |
| CUT_BETA0 |
0.20 |
Logistic intercept (SG=0 → 55%) |
| CUT_BETA1 |
1.35 |
SG:Total coefficient (was 1.5) |
| SIGMA_CREDIBILITY_K |
20 |
Rounds for 50% player-sigma weight |
| Field zero-sum |
Yes |
SG mean-centered before MC |
Course DNA Vectors
| Course |
Tournament |
Type |
OTT |
APP |
ARG |
PUTT |
| Augusta National |
Masters |
putting |
0.7 |
0.8 |
0.9 |
0.9 |
| Pinehurst No. 2 |
U.S. Open |
precision |
0.6 |
0.9 |
0.9 |
0.7 |
| Royal Troon |
Open Championship |
links |
0.8 |
0.7 |
0.8 |
0.6 |
| Quail Hollow |
PGA Championship |
bomber |
0.8 |
0.8 |
0.7 |
0.7 |
| TPC San Antonio |
Valero Texas Open |
balanced |
0.7 |
0.7 |
0.6 |
0.7 |
| Harbour Town |
RBC Heritage |
precision |
0.4 |
0.9 |
0.8 |
0.7 |
Future / TODO
- EWMA half-life model — Per-round SG tracking with 8/24/100-round decay windows
- Course DNA regression — Replace manual vectors with regression-derived weights
- Weather wave model — NWS API, AM/PM differential for round leader edges
- Outright scanner — Full 150-way Shin de-vig + Monte Carlo
- Round Leader scanner — Requires weather wave model
- 3-Ball scanner — Requires tee time data
- Hole in One scanner — Pure probability model (par-3 count from course data)
- LIV-specific model — 54-hole, no-cut, 48-player fields
- Grass-type putting adjustment — Bermuda/Bentgrass/Poa splits (data exists in course_data)
- Backtesting framework — Validate model calibration
- DataGolf subscription — Pending boss approval ($100-250/mo) for deeper SG data
Source: ~/edgeclaw/results/spec-panel/sports-desk/golf-strategy.md