0/70 completed
Pricing Framework Interactive

Market Making

Balance the book by adjusting prices based on order flow. The goal is to profit from the spread while minimizing directional exposure.

โš–๏ธ The Market Maker's Role

๐Ÿ“ฅ

Take Both Sides

Offer odds on OVER and UNDER. Collect bets from both sides of the market.

โš–๏ธ

Balance Exposure

Move lines to attract bets on the lighter side. Goal: equal $ on both sides.

๐Ÿ’ฐ

Profit from Spread

With balanced book, keep the vig regardless of outcome. Minimize risk.

Market Settings

Opening Line 225.5
210 240
True Total (hidden) 224
210 240
Line Sensitivity 0.5
0.1 1

Bet Flow (# of bets)

OVER Bets 60
0 100
UNDER Bets 40
0 100
Net Flow +20 OVER

๐Ÿ“Š Line Movement

Opening Line 225.5
Current Line 226.5
Movement +1.0

Book Exposure

OVER Liability
$11,400
60 bets ร— $190 payout
UNDER Liability
$7,600
40 bets ร— $190 payout
Net Exposure
$3,800
Balance: 67%
60% / 40%

P&L Scenarios

If OVER Wins
+$7,400
If UNDER Wins
+$1,600
Balanced Book P&L
+$450
4.5% hold

Simulated Bet Flow & Line Movement

๐Ÿ”— DeFi Parallel: AMMs

Traditional Market Making

  • โ€ข Human/algo adjusts bid-ask based on flow
  • โ€ข Move line to attract counter-bets
  • โ€ข Goal: balanced book, profit from spread
  • โ€ข Risk: directional exposure if unbalanced

Automated Market Maker (AMM)

  • โ€ข Algorithm adjusts prices via bonding curve
  • โ€ข x * y = k (constant product formula)
  • โ€ข Goal: provide liquidity, earn fees
  • โ€ข Risk: impermanent loss if prices diverge

Your hook: "I built AMM mechanics at Flipsideโ€”the same principles apply to sports market making."

R Code Equivalent

# Market making simulation
simulate_market <- function(opening_line, true_value, sensitivity = 0.5, n_periods = 20) { 
  current_line <- opening_line
  over_bets <- 0
  under_bets <- 0
  lines <- c(current_line)
  
  for (t in 1:n_periods) { 
    # Sharps bet toward true value
    over_flow <- rpois(1, lambda = 5 + ifelse(current_line > true_value, -1, 1))
    under_flow <- rpois(1, lambda = 5 + ifelse(current_line < true_value, -1, 1))
    
    over_bets <- over_bets + over_flow
    under_bets <- under_bets + under_flow
    
    # Adjust line based on imbalance
    imbalance <- over_bets - under_bets
    current_line <- opening_line + imbalance * sensitivity * 0.05
    lines <- c(lines, current_line)
  }
  
  return(list(lines = lines, over = over_bets, under = under_bets))
}

# Run simulation
result <- simulate_market(225.5, 224, 0.5)
cat(sprintf("Final line: %.1f\n", tail(result$lines, 1)))

โœ… Key Takeaways

  • โ€ข Goal: balanced book = riskless profit from vig
  • โ€ข Move lines to attract bets on light side
  • โ€ข Sharp money provides price discovery
  • โ€ข Line movement reveals market sentiment
  • โ€ข Similar to DeFi AMM mechanics
  • โ€ข Sensitivity controls reactivity to flow

Pricing Models & Frameworks Tutorial

Built for mastery ยท Interactive learning