Market Making Profit Math: How Crypto MMs Actually Earn
Break down the real math behind crypto market making — spreads, inventory risk, and how professional market makers calculate edge and profit.
Break down the real math behind crypto market making — spreads, inventory risk, and how professional market makers calculate edge and profit.
Most traders think of market making as something only hedge funds and institutions do. But the math behind it is surprisingly accessible — and understanding it changes how you read every order book you'll ever look at. Market makers profit by sitting on both sides of the market at once, buying at the bid and selling at the ask, pocketing the difference thousands of times a day. The trick is doing it without getting crushed by price moves in between.
The spread is the gap between what buyers are willing to pay (the bid) and what sellers are asking (the ask). If BTC/USDT on Binance shows a bid of $62,450 and an ask of $62,455, the spread is $5. As a market maker, you post both sides: a buy order at $62,450 and a sell order at $62,455. When both fill, you've earned $5 per BTC — without taking any directional bet.
In percentage terms, that $5 spread on a $62,450 asset is about 0.008%. Tiny, right? But multiply that by volume. A market maker turning over 10 BTC per hour at that spread earns $50/hour before costs — $1,200/day from a single pair on a single exchange. Scale to multiple pairs across Binance, Bybit, and OKX simultaneously, and the numbers grow fast.
Key Takeaway: The spread is your gross margin per round trip. Every other calculation in market making flows from this number. Wider spread = more profit per fill, but fewer fills. Tighter spread = more competition, more volume, smaller edge per trade.
The fundamental unit of market making profit is the expected value of a completed round trip — one buy fill followed by one sell fill (or vice versa). Here's the basic formula:
# Market Making Expected Value (simplified)
spread = ask_price - bid_price # e.g. $5.00
fill_rate = 0.70 # 70% of your quotes get filled on both sides
fee_per_side = -0.0002 # Maker rebate on Binance: -0.02% (you earn)
trade_size = 1.0 # 1 BTC
# Gross profit per round trip
gross_profit = spread * trade_size
# e.g. $5.00 * 1.0 = $5.00
# Fee credit (maker orders earn rebates, not pay fees)
fee_credit = 2 * abs(fee_per_side) * bid_price * trade_size
# e.g. 2 * 0.0002 * 62450 * 1 = $24.98
# Expected profit per attempted round trip
expected_value = (gross_profit + fee_credit) * fill_rate
print(f"EV per round trip: ${expected_value:.2f}")
# Output: EV per round trip: $20.99
Notice the fee_credit line. On most major exchanges, market makers who post limit orders earn a rebate instead of paying a fee. On Binance, the standard maker fee is -0.01% to -0.02% (depending on your VIP tier) — meaning the exchange pays you for providing liquidity. This rebate often doubles or triples the profit from the spread alone. It's why professional market makers obsess over VIP tier status on Bybit, OKX, and Binance.
| Exchange | Maker Fee (standard) | Taker Fee (standard) | Rebate Available? |
|---|---|---|---|
| Binance | -0.01% | 0.10% | Yes (VIP tiers) |
| Bybit | 0.01% | 0.06% | Partial (pro tiers) |
| OKX | 0.02% | 0.05% | Yes (VIP tiers) |
| Gate.io | 0.02% | 0.06% | Limited |
| Bitget | 0.02% | 0.06% | Limited |
Here's where beginners underestimate market making. The spread gives you edge, but inventory risk can give it all back. Inventory risk is what happens when price moves sharply while you're holding a position you didn't want.
Imagine you post a buy at $62,450. It fills — you now hold 1 BTC. But before your sell at $62,455 fills, bad news hits and BTC drops to $62,300. Your sell order is now underwater by $150. That $5 spread profit just turned into a $145 loss. This is called adverse selection: the people trading against your quote often know something you don't.
The math for evaluating inventory risk uses something called the expected adverse selection cost:
# Adverse Selection Cost Estimation
volatility_per_min = 0.0005 # 0.05% per minute (moderate BTC volatility)
time_to_fill_minutes = 2.0 # average time your quote sits before filling
trade_size_usd = 62450 # dollar value of position
# Expected price move while holding inventory
expected_move = volatility_per_min * (time_to_fill_minutes ** 0.5)
# Using sqrt(time) — standard volatility scaling
adverse_cost = expected_move * trade_size_usd
print(f"Expected adverse selection cost: ${adverse_cost:.2f}")
# Output: Expected adverse selection cost: $44.16
# Minimum spread needed to break even:
min_spread_pct = expected_move * 2 # need to cover both sides
print(f"Minimum viable spread: {min_spread_pct*100:.4f}%")
# Output: Minimum viable spread: 0.1414%
Key Takeaway: Your spread must be wider than your expected adverse selection cost, or you lose money on average — even with perfect fill rates. Volatile markets require wider spreads. This is why market makers widen quotes during news events and pull them entirely during flash crashes.
Quote placement is a constant trade-off. Place your orders too close to mid-price and you get filled often but face more adverse selection. Place them far from mid and you're safe from adverse selection but almost never fill — earning nothing. The optimal placement depends on your edge vs. adverse selection ratio.
A practical starting point used by many retail market makers on Binance and Bybit: place quotes at 1x to 1.5x the current realized volatility per fill cycle. If BTC is moving 0.05% per minute and your average fill takes 3 minutes, the expected move is 0.087%. Place your spread at 0.10% to 0.15% to have a small positive edge after adverse selection costs.
Platforms like Bybit and OKX have grid trading bots built in that automate some of this placement logic. They're not full market making systems, but for understanding the mechanics and running small-scale strategies, they're a practical starting point. For more serious setups, you need real-time data — tools like VoiceOfChain give you live order flow signals that can inform when to tighten or widen your spread based on current market conditions.
Let's model a realistic day for a small-scale market maker on BTC/USDT on Binance. This isn't hypothetical — these parameters reflect what a well-run retail operation can achieve.
# Full Daily P&L Model — BTC/USDT Market Making
# Parameters
pairs = 1
hours_active = 12
round_trips_per_hour = 8 # conservative — some hours faster
trade_size_btc = 0.5
btc_price = 62450
spread_pct = 0.0012 # 0.12% spread
fill_rate = 0.65 # 65% of cycles complete both sides
adverse_selection_pct = 0.0004 # 0.04% expected adverse cost per side
maker_rebate_pct = 0.0002 # 0.02% rebate per side (Binance VIP 1)
# Calculations
trade_value = trade_size_btc * btc_price # $31,225
gross_spread_per_rt = spread_pct * trade_value # $37.47
adverse_cost_per_rt = 2 * adverse_selection_pct * trade_value # $24.98
rebate_per_rt = 2 * maker_rebate_pct * trade_value # $12.49
net_per_rt = gross_spread_per_rt - adverse_cost_per_rt + rebate_per_rt
# $37.47 - $24.98 + $12.49 = $24.98
total_round_trips = round_trips_per_hour * hours_active * fill_rate
# 8 * 12 * 0.65 = 62.4 completed round trips
daily_pnl = net_per_rt * total_round_trips
print(f"Net per round trip: ${net_per_rt:.2f}")
print(f"Completed round trips: {total_round_trips:.0f}")
print(f"Daily P&L: ${daily_pnl:.2f}")
# Net per round trip: $24.98
# Completed round trips: 62
# Daily P&L: $1,548.76
That $1,500/day figure assumes no major directional moves. A 2% BTC swing during the session can easily cut that in half — or flip it negative if your inventory management is poor. This is why professional market makers cap their gross inventory exposure and use hedging legs on futures markets. Many run their spot market making on Binance while hedging delta on Bybit perpetuals simultaneously.
Key Takeaway: Market making profit is real but fragile. Spread income is your steady earner. Adverse selection is your main cost. Maker rebates are your bonus. Inventory blowups are your existential risk. Manage all four and you have a sustainable edge.
Market making profit math comes down to four numbers: spread income, adverse selection cost, maker rebates, and inventory risk exposure. Get all four right and you have a compounding edge that works in flat markets, sideways markets, and even choppy trending ones. Ignore inventory risk and you will eventually blow up — no matter how tight your spread or high your fill rate.
The good news is that the math is learnable. Start with a single altcoin pair on Binance or Bybit using their built-in grid tools to feel how fill rates and spreads behave. Build intuition for when adverse selection is high (news events, large prints hitting the tape) versus low (quiet Asian session sideways chop). Then graduate to custom bots that actually manage inventory. The math scales — the discipline is what most people can't automate.