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
210 240
210 240
0.1 1
Bet Flow (# of bets)
0 100
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