Market Making Strategies — Providing Liquidity with Smart Money Insights

Market makers profit from bid-ask spreads by providing both sides of liquidity. In crypto, this is low-risk if done correctly: you can hold minimal inventory by hedging on another exchange, pocketing the spread differential. Smart Money API helps market makers adjust spreads dynamically based on whale activity and funding rate anomalies.

Key insight: Professional market makers widen spreads when large orders are expected (based on whale position changes). They tighten spreads when momentum is stalling. Smart Money signals let you front-run these changes.

Market Making Fundamentals

The Spread

You buy at bid price, sell at ask price. Your profit is the difference:

Profit per round-trip = Ask - Bid

On BTC/USDT at $42,000:

Inventory Risk

If you buy 1 BTC at $42,000 but price crashes to $41,000 before you sell, you're underwater $1,000. Sophisticated market makers hedge this:

Python — Inventory hedging
# Buy on Bybit at bid, immediately short on Binance at ask
buy_bybit(symbol="BTCUSDT", size=1, side="buy", limit_price=41978.95)
sell_binance(symbol="BTCUSDT", size=1, side="sell", limit_price=42050)
# Profit = 42050 - 41978.95 = 71.05 USDT, regardless of price move
# Risk is only execution: what if your sell order doesn't fill?

Dynamic Spread Strategies

1. Fixed Spread Market Making

Simplest: Always quote 1bp on both sides.

Python — Fixed spread MM
def fixed_spread_mm(mid_price, spread_bps=1.0):
spread = mid_price * (spread_bps / 10000)
bid = mid_price - (spread / 2)
ask = mid_price + (spread / 2)
return {"bid": bid, "ask": ask}

2. Volatility-Adjusted Spread

Widen spreads during high volatility, tighten during calm markets:

Python — Volatility-adjusted MM
def volatility_adjusted_mm(mid_price, returns_1h, confidence_score):
# Calculate 1-hour volatility (std dev of returns)
vol = np.std(returns_1h)
# Base spread: 1bp
base_spread_bps = 1.0
# Multiply by volatility (scale 0-10x)
vol_multiplier = 1 + (vol * 50) # high vol = wider spread
# Multiply by confidence (if Smart Money is HIGH, tighten a bit)
if confidence_score > 0.65:
confidence_mult = 0.8 # tighten by 20%
else:
confidence_mult = 1.0
final_spread_bps = base_spread_bps * vol_multiplier * confidence_mult
spread = mid_price * (final_spread_bps / 10000)
return {
"bid": mid_price - (spread / 2),
"ask": mid_price + (spread / 2),
"spread_bps": final_spread_bps
}

3. Smart Money Reactive Spreads

Adjust spreads based on whale activity signals:

Python — Whale-reactive MM
def smart_money_adjusted_spreads(symbol, mid_price):
# Get Smart Money confirmation
sm = get_smart_money_signal(symbol)
# HIGH confidence + bullish = market moving up soon
# Widen ask (hope to sell at better price)
# Tighten bid (faster execution on buy side)
if sm["confidence"] == "HIGH" and sm["direction"] == "long":
bid_spread = 0.8 # 0.8bp on bid (competitive)
ask_spread = 1.4 # 1.4bp on ask (push for fill)
elif sm["confidence"] == "VETO":
bid_spread = 2.0 # wide on both sides (uncertainty)
ask_spread = 2.0
else:
bid_spread = 1.0 # normal symmetric
ask_spread = 1.0
return {
"bid": mid_price - (mid_price * bid_spread / 10000),
"ask": mid_price + (mid_price * ask_spread / 10000)
}

Inventory Management

Target Inventory

Set a neutral inventory target (e.g., 0 BTC). If you accumulate too much, increase bid (push to sell). If you're too short, increase ask (push to buy):

Python — Inventory skew
def get_inventory_skew(current_inventory, target_inventory=0):
skew = current_inventory - target_inventory
# If holding too much (+1 BTC), push bid wider to sell
if skew > 0:
bid_adjustment = min(skew * 0.5, 2.0) # add up to 2bp
ask_adjustment = -min(skew * 0.5, 1.0) # tighten by up to 1bp
# If short, push ask wider to buy
elif skew < 0:
ask_adjustment = min(abs(skew) * 0.5, 2.0)
bid_adjustment = -min(abs(skew) * 0.5, 1.0)
else:
bid_adjustment = 0
ask_adjustment = 0
return bid_adjustment, ask_adjustment

Production Market Maker

Python — Full MM system
class CryptoMarketMaker:
def __init__(self, symbol, inventory_target=0):
self.symbol = symbol
self.inventory = 0
self.inventory_target = inventory_target
def update_quotes(self, mid_price):
# 1. Get Smart Money signal
sm = get_smart_money_signal(self.symbol)
# 2. Volatility adjustment
vol = calculate_volatility_1h(self.symbol)
# 3. Inventory adjustment
inv_bid, inv_ask = get_inventory_skew(self.inventory)
# 4. Combine all factors
base_bid, base_ask = fixed_spread_mm(mid_price, 1.0)
vol_bid, vol_ask = volatility_adjusted_mm(mid_price, [vol], sm["composite"])
sm_bid, sm_ask = smart_money_adjusted_spreads(self.symbol, mid_price)
# Average the adjusted prices
final_bid = np.mean([base_bid, vol_bid, sm_bid]) + inv_bid
final_ask = np.mean([base_ask, vol_ask, sm_ask]) + inv_ask
# Submit orders
submit_order(side="bid", price=final_bid, size=1)
submit_order(side="ask", price=final_ask, size=1)

Optimize your market making with Smart Money signals

Market makers who adjust spreads based on whale activity and Smart Money confidence see 15-25% better execution prices and reduced inventory risk.

Get Algo Access →