Price Impact, Slippage & Spread
TL;DR
Three concepts govern every trade: Price Impact, Slippage, and Spread. They are distinct, but frequently conflated. Understanding the difference prevents execution errors, especially when taking profits in a volatile or low-liquidity market.
| TERM | WHAT IT IS | CAUSE |
|---|---|---|
| Price Impact | How much your trade moves the price | Your order consuming available liquidity |
| Slippage | Difference between expected and executed price | Market moved while your order was in transit |
| Spread | Gap between best buy price and best sell price | Market makers extracting profit for providing liquidity |
Key distinctions:
- Slippage: the market moved while you were trying to trade
- Price Impact: your trade moved the market
Practical implications:
- Small trades ($100 in a liquid market): all three costs are negligible
- Large trades relative to liquidity: price impact dominates and can cost 10%+ on shallow DEX pools
- CEXs handle large orders better than DEXs due to order book depth vs AMM curve math
- High slippage tolerance on DEXs invites MEV sandwich attacks
How to minimize costs:
- Split large orders
- Use limit orders on CEXs
- Compare venue depth before executing
- Use DEX aggregators with MEV protection
Figure 1: Execution cost breakdown from quoted to executed price.
graph LR
subgraph "Quoted"
A[Price: $1.00]
end
subgraph "Deductions"
B[Spread<br/>-$0.005]
C[Slippage<br/>-$0.01]
D[Price Impact<br/>-$0.02]
end
subgraph "Executed"
E[Price: $0.965]
end
A --> B --> C --> D --> E
style A fill:#90EE90
style B fill:#FFE4B5
style C fill:#FFB6C1
style D fill:#FF6B6B
style E fill:#87CEEB
Price Impact
Price impact is how much your own order moves the market. Unlike slippage, you cause this directly by consuming liquidity.
Figure 2: Price impact from a single large sell order.
graph LR
subgraph "Before"
B1["Price: $1.00"]
end
subgraph "Your Order"
TRADE["Sell 10,000 tokens"]
end
subgraph "After"
A1["Price: $0.95"]
end
B1 --> TRADE --> A1
NOTE["Price Impact: -5%"]
TRADE -.-> NOTE
style B1 fill:#90EE90
style TRADE fill:#FFD700
style A1 fill:#FF6B6B
style NOTE fill:#E6E6FA,stroke:#000,stroke-dasharray:5
Price impact scales with order size relative to available liquidity. A $100 trade in a $10M liquidity pool is negligible. A $100,000 trade in that same pool is significant. A $100 trade in a $50K pool causes measurable price degradation.
Slippage
Slippage occurs when price changes between order submission and execution.
Figure 3: Slippage during order execution.
sequenceDiagram
participant You
participant Exchange
participant Market
You->>Exchange: Sell order at $1.00
Note over Market: Other trades execute
Market->>Market: Price moves to $0.98
Exchange->>You: Filled at $0.98
Note over You: Slippage: -2%
Slippage can be positive (price moved in your favor) or negative (price moved against you). Negative is more common. Markets tend to move against the side with visible intent.
Causes:
- High volatility
- Network/execution latency
- Low liquidity
- Large order size relative to available depth
Most DEX interfaces expose a slippage tolerance setting:
| SETTING | TRADE-OFF |
|---|---|
| 0.1% | Trade fails if price moves at all |
| 0.5% | Standard for stable pairs |
| 1-3% | Volatile tokens |
| 5%+ | Low-liquidity tokens; exposes you to Maximal Extractable Value (MEV) extraction |
MEV Exposure
High slippage tolerance on DEXs is an invitation for Sandwich Attacks. Bots will front-run your trade, push price against you to your tolerance limit, then back-run to capture the difference. This occurs routinely on public Mempools. See jaredfromsubway.eth for a real-world example of a sandwich bot that extracted $22M+ from retail traders.
Spread
The spread is the difference between what buyers will pay (Bid) and what sellers will accept (ask).
Figure 4: Order book spread between bid and ask.
graph TB
subgraph "Order Book"
direction TB
ASK3["Sell @ $1.03 — 500 tokens"]
ASK2["Sell @ $1.02 — 300 tokens"]
ASK1["Sell @ $1.01 — 200 tokens ← Best Ask"]
SPREAD["══ SPREAD: $0.02 ══"]
BID1["Buy @ $0.99 — 150 tokens ← Best Bid"]
BID2["Buy @ $0.98 — 400 tokens"]
BID3["Buy @ $0.97 — 600 tokens"]
end
ASK3 --> ASK2 --> ASK1 --> SPREAD --> BID1 --> BID2 --> BID3
style ASK1 fill:#FF6B6B
style ASK2 fill:#FF8888
style ASK3 fill:#FFAAAA
style BID1 fill:#90EE90
style BID2 fill:#77DD77
style BID3 fill:#55CC55
style SPREAD fill:#FFD700,stroke:#000,stroke-width:2px
The depth of liquidity at each price level determines how much your order will move the market. Larger volumes at prices closer to the spread mean better execution for market orders.
On a Centralized Exchange (CEX), market makers place orders on both sides. The spread is their compensation for taking inventory risk. On a Decentralized Exchange (DEX), there is no explicit spread—it emerges from Automated Market Maker (AMM) curve mathematics. The cost is still there; it's just calculated differently.
DEX Spread is Price Impact
What looks like a spread on a DEX is actually the price impact of your trade moving along the bonding curve. The distinction matters for understanding how costs scale with trade size.
Before 2001, US stock spreads were quoted in fractions. The minimum tick was 1/8 dollar ($0.125). Decimalization compressed spreads to pennies. Crypto markets skipped that evolution entirely.
CEX vs DEX Execution
Trading Model
Figure 5: CEX trading model characteristics.
graph TB
subgraph "Centralized Exchange (CEX)"
C1["Order book model"]
C2["Discrete price levels"]
C3["Market makers provide liquidity"]
C4["Better large trade execution"]
C5["Custody risk, KYC required"]
end
C1 --> C2 --> C3 --> C4 --> C5
style C1 fill:#FFE4B5
style C2 fill:#FFE4B5
style C3 fill:#FFE4B5
style C4 fill:#FFE4B5
style C5 fill:#FFE4B5
Figure 6: DEX trading model characteristics.
graph TB
subgraph "Decentralized Exchange (DEX)"
D1["AMM model"]
D2["Continuous curve pricing"]
D3["Liquidity Providers provide liquidity"]
D4["Worse large trade execution"]
D5["Self-custody, permissionless"]
end
D1 --> D2 --> D3 --> D4 --> D5
style D1 fill:#E6E6FA
style D2 fill:#E6E6FA
style D3 fill:#E6E6FA
style D4 fill:#E6E6FA
style D5 fill:#E6E6FA
Feature Comparison
| FACTOR | CEX | DEX |
|---|---|---|
| Large trades | ☑ Better | ☒ Worse |
| Limit orders | ☑ Yes | ☒ Generally no |
| Long-tail tokens | ☒ Rarely listed | ☑ Permissionless |
| Custody | △ Exchange holds funds | ☑ Self-custody |
| Privacy | ☒ KYC required | ☑ Pseudonymous |
| Execution speed | ☑ Instant | △ Block time dependent |
Order Books (CEX)
Centralized exchanges match buyers and sellers through an Order Book—a list of all pending orders at each price level.
Figure 7: Order book depth with sell and buy sides.
graph TB
subgraph "SELL SIDE"
direction TB
S5["$1.05 — 1,000"]
S4["$1.04 — 800"]
S3["$1.03 — 500"]
S2["$1.02 — 300"]
S1["$1.01 — 200 ← Best Ask"]
end
subgraph "─────────"
MID["Mid: $1.00"]
end
subgraph "BUY SIDE"
direction TB
B1["$0.99 — 150 ← Best Bid"]
B2["$0.98 — 400"]
B3["$0.97 — 600"]
B4["$0.96 — 900"]
B5["$0.95 — 1,200"]
end
S5 --> S4 --> S3 --> S2 --> S1 --> MID --> B1 --> B2 --> B3 --> B4 --> B5
style S1 fill:#FF6B6B
style S2 fill:#FF8888
style S3 fill:#FF9999
style S4 fill:#FFAAAA
style S5 fill:#FFBBBB
style B1 fill:#90EE90
style B2 fill:#77DD77
style B3 fill:#66CC66
style B4 fill:#55BB55
style B5 fill:#44AA44
style MID fill:#FFD700,stroke:#000,stroke-width:2px
Limit vs Market Orders
- A Limit Order sits on the books until matched. You specify the price. No price impact until execution. May never fill.
- A Market Order executes immediately against the best available prices. Guaranteed fill, unknown final price. You pay the spread and cause price impact.
Walking the Book
When a market order exceeds available liquidity at the best price, it "walks" through successive price levels until filled. This is not slippage—the market didn't move. You moved it.
Figure 8: Walking the book across multiple price levels.
graph TD
START["Market Sell: 800 tokens<br/>Expecting ~$792 @ $0.99"]
LEVEL1["Level 1: $0.99<br/>Fill 150 tokens<br/>Received: $148.50<br/>Remaining: 650"]
LEVEL2["Level 2: $0.98<br/>Fill 400 tokens<br/>Received: $392.00<br/>Remaining: 250"]
LEVEL3["Level 3: $0.97<br/>Fill 250 tokens<br/>Received: $242.50<br/>Remaining: 0"]
RESULT["Total Received: $783.00<br/>Average Price: $0.97875<br/>Expected: $792.00<br/>━━━━━━━━━━━━━━━<br/>Price Impact: -$9.00 (-1.14%)"]
START --> LEVEL1
LEVEL1 --> LEVEL2
LEVEL2 --> LEVEL3
LEVEL3 --> RESULT
style START fill:#FFD700
style LEVEL1 fill:#90EE90
style LEVEL2 fill:#FFE4B5
style LEVEL3 fill:#FFB6C1
style RESULT fill:#FF6B6B
This example 800-token order consumed three price levels. The first 150 tokens got the best price ($0.99). The remaining 650 walked down the book, receiving progressively worse fills.
Order Book Depth
The deeper the book, the less each level matters. A shallow book forces your order to walk further, degrading average execution price. This is predictable and proportional to order size relative to available depth.
AMMs (DEX)
AMMs replace order books with liquidity pools governed by mathematical formulas. Instead of matching buyers and sellers, you trade directly against a pool of tokens. Most use the constant product formula:
Where x and y are token quantities in the pool, and k remains constant through trades.
Figure 9: AMM pool state and derived price.
graph LR
subgraph "Pool State"
POOL["ETH: 100<br/>USDC: 100,000<br/>k = 10,000,000"]
end
PRICE["Price: 1 ETH = 1,000 USDC"]
POOL --> PRICE
style POOL fill:#E6E6FA
style PRICE fill:#90EE90
How Swaps Work
When you trade, you add one token and remove another. The formula enforces price adjustment:
Figure 10: AMM swap execution and price impact.
graph TD
B["1. Initial State<br/>ETH: 100 | USDC: 100,000<br/>Price: 1,000 USDC/ETH<br/>k = 10,000,000"]
T["2. You Sell 10 ETH<br/>Pool receives 10 ETH<br/>Pool calculates USDC output"]
A["3. New State<br/>ETH: 110 | USDC: 90,909<br/>Price: 826 USDC/ETH<br/>k = 10,000,000"]
R["4. Result<br/>Received: 9,091 USDC<br/>Effective rate: 909 USDC/ETH<br/>Price impact: -9.1%"]
B --> T --> A --> R
style B fill:#90EE90
style T fill:#FFD700
style A fill:#FFB6C1
style R fill:#FF6B6B
The math: with 110 ETH in the pool, USDC must equal 10,000,000 ÷ 110 = 90,909. You receive the difference: 100,000 - 90,909 = 9,091 USDC.
You sold 10 ETH expecting ~10,000 USDC. You got 9,091. The 9.1% difference is price impact, a direct consequence of your trade size relative to pool depth.
The Curve
AMM price impact is non-linear. Small trades are cheap. Large trades get progressively worse.
Figure 11: Non-linear price impact curve on AMMs.
xychart-beta
title "Price Impact vs Trade Size"
x-axis "Trade Size (% of Pool)" [1, 2, 5, 10, 20, 30, 50]
y-axis "Price Impact (%)" 0 --> 35
line [0.5, 1, 2.5, 5.3, 11.1, 17.6, 33.3]
This curve is why DEX aggregators exist. Splitting a large trade across multiple pools can yield better execution than hitting one pool with the full amount.
Cascading Through the Curve
Unlike order books where your trade walks through discrete price levels, AMM trades slide continuously along the bonding curve. Each token you add pushes price further. If the pool is shallow relative to your order, this creates a cascade effect where your own trade compounds its own impact.
Consider a sell that moves price significantly:
Figure 12: Cascading price impact from sequential sells.
graph TD
INITIAL["Initial Pool State<br/>ETH: 50 | USDC: 50,000<br/>Price: $1,000/ETH<br/>k = 2,500,000"]
TRADE1["You Sell 5 ETH<br/>Pool: 55 ETH | 45,454 USDC<br/>New Price: $826/ETH<br/>You received: 4,546 USDC"]
TRADE2["Next trader sells 5 ETH<br/>Pool: 60 ETH | 41,666 USDC<br/>New Price: $694/ETH<br/>They received: 3,788 USDC"]
TRADE3["Third trader sells 5 ETH<br/>Pool: 65 ETH | 38,461 USDC<br/>New Price: $591/ETH<br/>They received: 3,205 USDC"]
IMPACT["Cascading Impact:<br/>━━━━━━━━━━━━━━━<br/>First seller: -9% impact<br/>Second seller: -17% impact<br/>Third seller: -16% impact<br/><br/>Total price drop: -41%<br/>from initial $1,000"]
INITIAL --> TRADE1
TRADE1 --> TRADE2
TRADE2 --> TRADE3
TRADE3 --> IMPACT
style INITIAL fill:#90EE90
style TRADE1 fill:#FFE4B5
style TRADE2 fill:#FFB6C1
style TRADE3 fill:#FF8888
style IMPACT fill:#FF6B6B
Each successive trade faces worse execution because the previous trades degraded the pool's price. Three independent sellers each incur their own price impact. The effect compounds.
- On a CEX, walking the book has natural break points. Once you exhaust a price level, the next level might be significantly different, but each order consumes discrete liquidity chunks.
- On a DEX, there are no break points. The curve is continuous. Your trade doesn't just walk through levels—it slides the entire pricing function. The next trader immediately inherits your impact.
This matters most in:
- Low-liquidity pools where single trades move price 5%+
- Volatile periods when multiple large orders hit the same pool sequentially
- Exit events where many holders try to sell simultaneously
If you're the third seller in a cascade, you're not just paying your own impact—you're paying the cumulative degradation of everyone before you.
Practical Comparison
Same token. Same price ($1.00). Different trade sizes. Different outcomes.
Setup:
- CEX: Moderate order book depth
- DEX: 50,000 tokens + 50,000 USDC pool (k = 2.5B)
$100 Trade
Figure 13: $100 trade execution on CEX.
graph TB
subgraph "CEX"
CEX1["Best bid: $0.995"]
CEX2["100 tokens fill at $0.995"]
CEX3["Received: $99.50"]
CEX4["Cost: 0.5%"]
end
CEX1 --> CEX2 --> CEX3 --> CEX4
style CEX3 fill:#90EE90
Figure 14: $100 trade execution on DEX.
graph TB
subgraph "DEX"
DEX1["Pool: 50K/50K"]
DEX2["Add 100 tokens"]
DEX3["Received: $99.60"]
DEX4["Cost: ~0.4% + fees"]
end
DEX1 --> DEX2 --> DEX3 --> DEX4
style DEX3 fill:#90EE90
At this size, the difference is negligible.
$1,000 Trade
Figure 15: $1,000 trade execution on CEX.
graph TB
subgraph "CEX"
CEX1["Consumes 2 price levels"]
CEX2["500 @ $0.995, 500 @ $0.99"]
CEX3["Received: $992.50"]
CEX4["Cost: 0.75%"]
end
CEX1 --> CEX2 --> CEX3 --> CEX4
style CEX3 fill:#90EE90
Figure 16: $1,000 trade execution on DEX.
graph TB
subgraph "DEX"
DEX1["2% of pool liquidity"]
DEX2["Curve pricing applies"]
DEX3["Received: ~$970"]
DEX4["Cost: ~3%"]
end
DEX1 --> DEX2 --> DEX3 --> DEX4
style DEX3 fill:#FFD700
CEX wins. Order book depth absorbs the size better than the AMM curve.
$10,000 Trade
Figure 17: $10,000 trade execution on CEX.
graph TB
subgraph "CEX"
CEX1["Walks through 6+ levels"]
CEX2["Average fill: ~$0.968"]
CEX3["Received: ~$9,680"]
CEX4["Cost: 3.2%"]
end
CEX1 --> CEX2 --> CEX3 --> CEX4
style CEX3 fill:#FFD700
Figure 18: $10,000 trade execution on DEX.
graph TB
subgraph "DEX"
DEX1["20% of pool liquidity"]
DEX2["Severe curve penalty"]
DEX3["Received: ~$8,333"]
DEX4["Cost: ~17%"]
end
DEX1 --> DEX2 --> DEX3 --> DEX4
style DEX3 fill:#FF6B6B
At $10,000, the DEX costs you over $1,600 more than the CEX. AMM curves penalize large orders in shallow pools disproportionately.
Figure 19: Value lost comparison by trade size.
xychart-beta
title "Value Lost: CEX vs DEX"
x-axis ["$100", "$1,000", "$10,000"]
y-axis "Loss ($)" 0 --> 2000
bar [0.5, 7.5, 320]
bar [0.4, 30, 1667]
Stock Market Context
These mechanics are not crypto-specific. Order books, spreads, and market impact have governed traditional markets for centuries.
Stock Market Mechanics vs Crypto
| ASPECT | STOCKS | CRYPTO CEX | CRYPTO DEX |
|---|---|---|---|
| Spread | ☑ ~$0.01 (liquid) | △ 0.01-0.1% | ☒ Curve-derived |
| Slippage | ☑ Rare | △ Moderate | ☒ Common |
| Settlement | ☒ T+2 days | ☑ Instant | ☑ Instant |
| Hours | ☒ 6.5 hrs/day | ☑ 24/7 | ☑ 24/7 |
| Custody | △ Broker | △ Exchange | ☑ Self |
Minimizing Costs
Figure 20: Strategies for reducing execution costs.
graph TD
GOAL["Reduce Execution Costs"]
GOAL --> SIZE["Order Management"]
GOAL --> VENUE["Venue Selection"]
GOAL --> TIMING["Timing"]
GOAL --> TOOLS["Tooling"]
SIZE --> SIZE1["Split large orders"]
SIZE --> SIZE2["Use limit orders"]
VENUE --> VENUE1["Compare CEX vs DEX"]
VENUE --> VENUE2["Check depth/liquidity"]
TIMING --> TIMING1["Avoid low-volume hours"]
TIMING --> TIMING2["Avoid volatility spikes"]
TOOLS --> TOOLS1["DEX aggregators"]
TOOLS --> TOOLS2["MEV protection (CoW, Flashbots)"]
style GOAL fill:#90EE90
style SIZE fill:#FFE4B5
style VENUE fill:#FFB6C1
style TIMING fill:#E6E6FA
style TOOLS fill:#87CEEB
General:
- Split large orders across time
- Use limit orders on CEXs
- Compare venues before executing
- Avoid high-volatility periods
DEX-specific:
- Use aggregators (1inch, Paraswap, CoW Swap)
- Set slippage tolerance appropriately—too high invites MEV, too low causes failures
- Check pool depth before trading
- Consider concentrated liquidity venues (Uniswap v3) for better rates on supported ranges
References
AMM & DEX Mechanics
- How Uniswap Works — Official Uniswap V2 documentation on the constant product formula
- Constant Function Market Maker — Uniswap V3 Development Book on CFMM mathematics
- Calculating the Settlement Price of an AMM Swap — RareSkills breakdown of price impact calculations
Order Books & Market Microstructure
- The Price Impact of Order Book Events — Cont, Kukanov, Stoikov (2014). Academic paper on order flow imbalance and price changes
- Market Microstructure: A Survey — Madhavan (2000). Foundational survey covering spreads, price impact, and inventory costs
- Order Flow and Price Formation — Lillo. Academic treatment of how orders affect prices
MEV & Sandwich Attacks
- Flashbots Protect — Official documentation on private transaction submission
- Defending Against Sandwich Attacks — Practical guide to MEV protection
- Modern MEV Sandwich Attacks on Ethereum Routers — Technical analysis of sandwich mechanics
DEX Aggregation
- 1inch Aggregation Protocol — Official documentation on Pathfinder routing
- What Are DEX Aggregators? — CoinMarketCap deep dive on aggregator mechanics
Traditional Market Structure
- SEC Report to Congress on Decimalization — SEC analysis of spread compression post-2001
- The Effects of Decimalization on the Securities Markets — SEC testimony on decimalization impact
- How Decimalization Changed the Industry — Traders Magazine retrospective on market structure changes
Changelog
| DATE | AUTHOR | NOTES |
|---|---|---|
| 2025-12-24 | Artificial. | Generated by robots. |
| 2026-01-04 | Denizen. | Reviewed, edited, and curated by humans. |