NCAAB Desk Strategy Spec

Extracted from Sports Desk Merged Spec (2026-03-15)

Full merged reference: spec-final.md


OVERVIEW

The NCAAB desk detects mispricings between Kalshi alt line prices and Pinnacle sharp book fair value for college basketball games. Pinnacle is the anchor. When Kalshi's price diverges from Pinnacle's fair value, that gap is the edge.

NCAAB has higher variance than NBA — less talent parity, bigger upsets, wider blowouts. This means both more opportunity (larger mispricings) and more risk (model accuracy suffers on mismatches).


CORE EDGE DETECTION

How It Works

  1. Get Pinnacle's odds for an NCAAB game (moneyline, spread, total)
  2. Remove the vig to get the "fair" probability
  3. Compare that fair probability to Kalshi's price for the same market
  4. If Kalshi's price is off by more than 4 cents after fees, that's a tradeable edge

De-Vig Method

2-Way Markets (Spreads, Totals, Moneylines) — Multiplicative method:

implied_prob = abs(odds) / (abs(odds) + 100)  # for negative odds
implied_prob = 100 / (odds + 100)              # for positive odds

total_implied = implied_home + implied_away
novig_home = implied_home / total_implied
novig_away = implied_away / total_implied

NCAAB moneylines are 2-way (no draw). Multiplicative method works.

Kalshi Fee Impact

Kalshi charges 7% fee on profit.

win_amount = 100 - kalshi_price
fee_on_win = 0.07 * win_amount
expected_profit = (model_prob * (win_amount - fee_on_win)) - ((1 - model_prob) * kalshi_price)

Minimum net edge: 4 cents after fees.

Sweet spot: implied probabilities between 35% and 65%.

Position Sizing (Kelly Criterion)

Use 1/4 Kelly for all NCAAB bets:

bet_size = min(bankroll * full_kelly * 0.25, bankroll * 0.05)

If quarter Kelly < 0.5% of bankroll, skip.

Hard Caps:


NCAAB-SPECIFIC MODELS

Normal Distribution for Spreads and Totals

Like NBA, NCAAB scoring is high enough for Normal distribution. But NCAAB spreads are often much wider (20+ point favorites common) — model accuracy drops at extreme spreads.

Spread Model:

Market Priority

Market Priority Why
Totals Highest More alt lines, efficiency models predict scoring well
Spreads High Wide spreads = more alt line variety, but model less reliable at extremes
Moneyline Lowest Heavy favorites make ML edges tiny

NCAAB-SPECIFIC EDGE FACTORS

Efficiency Ratings — Primary Edge Source

NCAAB's edge comes from advanced efficiency models that casual markets (Kalshi) don't fully price in. These models measure how many points a team scores/allows per 100 possessions, adjusted for opponent strength.

Data Sources:

Source What It Provides Priority
KenPom Adjusted offensive/defensive efficiency, tempo, luck factor, SOS PRIMARY
BartTorvik / T-Rank Team rankings, efficiency ratings, game predictions PRIMARY
Massey Ratings Composite ratings (best-effort, sometimes stale) SECONDARY

KenPom and BartTorvik are the gold standard for NCAAB analytics. Their adjusted efficiency margins directly feed into spread and total predictions.

Conference Tournament / March Madness

Special considerations during tournament play:

Talent Parity Gap

NCAAB has massive talent gaps:

Injury / Eligibility

Source Priority
ESPN player status API PRIMARY
Team official Twitter/PR feeds SECONDARY
NCAA eligibility tracker Weekly check

Track suspensions and eligibility issues — NCAA has unique rules around academic eligibility, transfer portal, and discipline that don't exist in pro sports.


NCAAB DATA SOURCES

Source What It Provides Frequency Priority
Pinnacle (via Odds API) Sharp odds: ML, spread, total Real-time Critical
Kalshi Market prices (what we're betting against) Real-time API Critical
KenPom Adjusted efficiency, tempo, SOS, luck Daily Critical
BartTorvik / T-Rank Team rankings, efficiency margins Daily Critical
ESPN API Scores, game state, player status Continuous High
DRatings Win probability + spread predictions Daily Medium
Massey Ratings Composite (best-effort) Daily Medium

Rating Models

Model Source Type
KenPom / BartTorvik kenpom.com, barttorvik.com Adjusted efficiency margins
T-Rank barttorvik.com/trank.php Team rankings
Massey masseyratings.com Composite (best-effort)

Average available models. If any is NULL, exclude silently.


NCAAB STEAM DETECTION

Market Steam Threshold Action
Spread > 0.75 points/hour Immediate re-scan
Total > 0.5 points/hour Immediate re-scan

NCAAB has a higher steam threshold for spreads than NHL/NBA because college lines are more volatile (less liquidity, sharper moves are normal).

When steam is detected:

  1. Immediately scan all Kalshi markets for that game
  2. Flag edges as steam_triggered = TRUE
  3. Apply 1.25x confidence multiplier (still capped at 5%)

WHEN NOT TO BET (Hard Rules)

Condition Reason
Spread > 20 points Model unreliable for extreme mismatches
Deep tail lines (5+ rungs) Model unreliable at this distance
Kalshi market volume < $500 Illiquid — phantom edge
Net edge < 4 cents Below threshold after fees
Implied probability < 15% or > 85% Extreme tails, fee impact unfavorable
Key player eligibility unclear Too much uncertainty
Conference tournament with unknown seeding implications Motivation factor unmeasurable

NCAAB COLLECTION SCHEDULE

[11:00 PM ET prior night]
  - Fetch tomorrow's NCAAB schedule from ESPN API
  - Create game records

[9:00 AM ET — Early Snapshot]
  - Odds API: Pinnacle NCAAB lines
  - Kalshi: Pre-game alt line snapshot
  - Calculate no-vig probabilities, run edge scan

[11:00 AM ET (weekday) / 10:00 AM ET (weekend) — Model Collection]
  - BartTorvik/KenPom (11:06)
  - T-Rank (11:15)
  - DRatings (11:09)
  - Massey (11:18, best-effort)

[2:00 PM ET — Mid Snapshot]
  - Odds API: Pinnacle update
  - Kalshi: Mid-day snapshot
  - Calculate line velocity, flag steam moves

[30 min before game]
  - ESPN injury check
  - 30-minute pre-close polling

[10 min before game — Closing Snapshot]
  - Final Pinnacle closing lines
  - Kalshi closing price
  - Store CLV baseline

[Game start → WebSocket live mode]
[After game ends → Grade edges, update Brier scores]

SETTLEMENT AND LEARNING

Track every detected edge with: timestamp, game_id, market_type, kalshi_ticker, kalshi_price, model_fair_prob, raw_edge, net_edge, rung_distance, steam_flag, bet_placed, bet_size, pinnacle_line.

Post-Settlement:

Monthly Review:

  1. Brier score per market type
  2. Profit/loss per market type
  3. Edge accuracy
  4. Average edge by rung distance
  5. Performance by spread size bucket (<5, 5-10, 10-15, 15+)
  6. Conference tournament performance vs regular season
  7. Morning vs evening edges

RISK MANAGEMENT

Control Threshold Action
Max loss per trade 2% of capital Hard cap
Max exposure per day (NCAAB) 15% of capital Hard cap
Daily drawdown stop -5% of capital Halt all trading for the day
Max per single game 5% of capital Hard cap

No risk management = no live trading.


QUICK REFERENCE: KEY CONSTANTS

Parameter Value
Steam threshold (spread) 0.75 pts/hour
Steam threshold (total) 0.5 pts/hour
Min net edge 4 cents
Kalshi fee rate 7% on profit
Kelly fraction 0.25 (quarter)
Max single bet 5% bankroll
Max per game 10% bankroll
Max daily exposure 25% bankroll
Min bet size 0.5% bankroll
Implied prob range 15%-85%
Min Kalshi volume $500
De-vig agreement threshold 2 cents
Max spread to bet 20 points

TODO: Upgrade Kalshi REST to WebSocket Feed

Status: NOT BUILT — add when this desk goes live for execution

Current state: All Kalshi data (prices, order books, trades) is fetched via REST API polling on cron schedules. This is fine for edge detection and monitoring, but NOT sufficient for live trade execution.

Why WebSocket matters:

What to build when ready:

  1. Connect to Kalshi WebSocket feed (wss://trading-api.kalshi.com/trade-api/ws/v2)
  2. Subscribe to order book channels for active tickers
  3. Stream trade events for real-time freshness (replaces REST trades polling)
  4. Feed live prices into execution engine for precise entry/exit
  5. Update Fill Quality Monitoring to measure slippage vs quoted price

Note: Sports markets use RFQ (Request for Quote) so the visible order book is usually empty — but the trade feed still matters for freshness signals and the WebSocket is required for order submission. Weather markets DO have real visible order books where this upgrade is even more critical.

Added 2026-03-29 — upgrade REST to WS when desk moves to live execution

Source: ~/edgeclaw/results/spec-panel/sports-desk/ncaab-strategy.md