Entry
- Compute a fair-price estimate (e.g. mid-price or volume-weighted)
- Place buy at fair - δ/2, sell at fair + δ/2
- δ = targeted spread (plus compensation for inventory and adverse selection)
- Continuously update on new market updates
Exit
- On fill: inventory changes → shift the fair-price estimate (skew)
- Stop-loss regime when inventory exceeds its limit
- Cancel-all on extreme news events (order book withdrawal)
| Name | Typ. value | Description |
|---|---|---|
| spread_bps | 2-20 | Width of the quoted spread, depending on volatility |
| inventory_limit | 5-20% Equity | Maximum one-sided position |
| quote_size | fraction of average volume | Size per quote |
| skew_factor | linear in inventory | Quote bias as inventory builds up |
Pros
- Continuous revenue stream without directional prediction
- Exchange rebates (maker rebate) accelerate profitability
- Profitable in all market regimes when volatility is moderate
- Scalable with capital and tech investment
Cons
- Adverse selection: informed traders deliberately trade against your stale quotes
- Retail has practically no chance due to the latency disadvantage
- Requires a lot of infrastructure (co-location, low-latency network)
- Inventory risk is catastrophic in strong moves
Core idea
A market maker quotes both sides of the order book: - Bid slightly below the current mid-price - Ask slightly above the mid-price
When buyers and sellers trade against these quotes simultaneously, the MM earns the spread between bid and ask (minus fees).
The Avellaneda-Stoikov model
The academically foundational model (2008) formalizes optimal quoting positions as a function of:
- Inventory q: how much you are currently long/short
- Volatility σ: current market volatility
- Risk aversion γ: personal utility parameter
- Order arrival rate λ: how fast orders arrive
Optimal quotes:
r_a = s + q·γ·σ²·(T-t) + (1/γ)·ln(1 + γ/k) ← Ask
r_b = s + q·γ·σ²·(T-t) - (1/γ)·ln(1 + γ/k) ← Bid
Important: the skew term q·γ·σ² pushes both quotes in the direction that reduces inventory. If you have too much long inventory → both quotes move down → sells get filled more readily → inventory normalizes.
Why retail's chance against pro MMs is zero
- Latency: pro MMs co-locate directly at the exchange. They see order book updates 0.1-1 ms before retail does.
- Rebate tiers: pro MMs pay negative fees (rebates) on Binance/Hyperliquid, retail pays positive fees.
- Fill priority: the first order in the book at the same price level gets filled first — retail always comes second.
- Adverse selection: when the price is about to move, the stale retail quotes get picked before they can be updated.
Alternative for retail: passive grid
If you still want to capture spread, grid trading is the realistic equivalent for retail — less aggressive, but without latency pressure. See grid_trading.
Hyperliquid context
Hyperliquid has its own MM program (HLP vault) and institutional MMs (including Wintermute). The on-chain structure makes latency arbitrage between market takers and makers less extreme than on a CEX, but quoting far from retail's reach is still not profitable.
Relevance for Botty
Very low. Botty has neither the infrastructure nor the ambition to compete with Wintermute. A grid-like module would be the sensible 'light' way to try spread capture.