Pricing Framework Interactive
Sharp vs Square Detection
Identify sophisticated bettors vs casual users. Sharp money moves lines; square money is the profit center.
๐ฉ Who's Who?
Square (Recreational)
Casual bettors who bet for entertainment. Follow public narratives.
- โข Win rate: 45-50%
- โข Negative CLV
- โข Bet favorites, overs
- โข ~85% of bettors
Semi-Sharp
Educated bettors with some edge. Break even or small profit.
- โข Win rate: 50-53%
- โข Neutral to slight + CLV
- โข More selective
- โข ~12% of bettors
Sharp (Professional)
Professional bettors or syndicates with consistent edge.
- โข Win rate: 53%+
- โข Strong positive CLV
- โข Large, quick bets
- โข ~3% of bettors
Bettor Profile
40 60
-5 5
50 10000
0 100
๐ Classification
Semi-Sharp
Sharp Score: 62/100
๐ Closing Line Value (CLV)
CLV measures whether a bettor beats the closing line. It's the #1 indicator of sharp betting.
-3%
Square
Opened -110, closed -105
0%
Neutral
No edge either way
+3%
Sharp
Opened -110, closed -120
Bettor Win Rate Distribution
Most bettors cluster around 47%. Only ~3% consistently exceed 54%.
๐ Detection Signals
Win Rate > 52%
HighSustained winning over large sample
Positive CLV
Very HighConsistently beats closing line
Large Bet Sizes
MediumConfidence in edge justifies size
Steam Move Timing
HighBets before major line moves
Contrarian Picks
MediumFades public money regularly
Off-Peak Betting
LowBets when lines are soft
โก Response Strategies
When Sharp Money Arrives
- โ Move line to balance book
- โ Use for price discovery (they know something)
- โ Lower limits on subsequent bets
- โ Consider copying the bet elsewhere (hedge)
Managing Sharp Bettors
- โ ๏ธ Limit max bet size (but don't banโthey're useful)
- โ ๏ธ Delay accepting bets during steam moves
- โ Let them bet early for line setting
- โ Track their picks for internal modeling
R Code Equivalent
# Sharp detection model
calculate_sharp_score <- function(win_rate, clv, bet_size, steam_timing) {
score <- 0
# Win rate component
if (win_rate > 52) score <- score + (win_rate - 52) * 10
# CLV component (most important)
score <- score + clv * 15
# Bet size component
if (bet_size > 1000) score <- score + 10
if (bet_size > 5000) score <- score + 20
# Steam timing
if (steam_timing > 30) score <- score + steam_timing * 0.3
return(pmin(100, pmax(0, score)))
}
# Classify bettor
classify_bettor <- function(score) {
if (score >= 70) return("Sharp")
if (score >= 40) return("Semi-Sharp")
return("Square")
}
# Example
score <- calculate_sharp_score(54, 2, 500, 40)
cat(sprintf("Score: %.0f - %s\n", score, classify_bettor(score)))โ Key Takeaways
- โข CLV is the #1 sharp indicator (better than win rate)
- โข ~3% of bettors are truly sharp
- โข Sharps provide price discoveryโuseful, not just a cost
- โข Move lines when sharp money arrives
- โข Limit but don't banโtrack and learn from them
- โข Square money is the profit center