How to Arbitrage Between Crypto Exchanges: A Practical Guide
Learn how to profit from price differences across crypto exchanges. This guide covers arbitrage strategies, fee management, execution speed, and risk controls used by real traders.
Table of Contents
Price discrepancies between crypto exchanges exist every single day. Sometimes they last seconds, sometimes minutes β but they're there. Arbitrage between crypto exchanges is one of the oldest trading strategies in finance, and crypto markets, with their fragmentation across hundreds of venues, make it especially viable. The concept is dead simple: buy an asset where it's cheap, sell it where it's expensive, pocket the difference. Execution, however, is where most people get wrecked.
If you've ever browsed discussions about how to arbitrage between crypto exchanges on Reddit or trading forums, you've seen the same pattern: someone discovers a 2% spread between Binance and Kraken, gets excited, then realizes fees, withdrawal times, and slippage ate their profit. This guide is about doing it right β understanding the mechanics, the math, and the infrastructure you actually need.
How Crypto Arbitrage Actually Works
At its core, crypto arbitrage exploits inefficiencies in pricing across different trading venues. Unlike stocks, which mostly trade on a handful of centralized exchanges with tight spreads, cryptocurrencies trade on hundreds of platforms worldwide. Each exchange has its own order book, its own liquidity pool, and its own user base β meaning prices diverge constantly.
There are three main types of arbitrage you'll encounter:
- **Spatial (direct) arbitrage** β Buy BTC on Exchange A at $67,400, sell on Exchange B at $67,650. The simplest form. Requires pre-funded accounts on both exchanges.
- **Triangular arbitrage** β Exploit pricing inconsistencies between three trading pairs on the same exchange. For example: BTC β ETH β USDT β BTC, ending up with more BTC than you started with.
- **Statistical arbitrage** β Use quantitative models to identify when price spreads deviate from historical norms and trade the convergence. More complex, often automated.
For most traders learning how to arbitrage between crypto exchanges, spatial arbitrage is the starting point. It's the easiest to understand, the easiest to calculate, and the easiest to automate once you know what you're doing.
Fee Structures That Make or Break Your Profits
The number one killer of arbitrage profits is fees. Not just trading fees β the full stack: maker/taker fees, withdrawal fees, deposit processing, and network gas costs. Here's how the major exchanges compare for an arbitrage trader:
| Exchange | Maker Fee | Taker Fee | BTC Withdrawal Fee | USDT (TRC-20) Withdrawal | API Rate Limit |
|---|---|---|---|---|---|
| Binance | 0.10% | 0.10% | 0.0002 BTC | 1.0 USDT | 1200 req/min |
| Coinbase Pro | 0.05% | 0.07% | Dynamic | Variable | 10 req/sec |
| Kraken | 0.02% | 0.05% | 0.00015 BTC | 2.5 USDT | 15 req/sec |
| OKX | 0.08% | 0.10% | 0.0001 BTC | 0.8 USDT | 600 req/min |
| Bybit | 0.02% | 0.055% | 0.0002 BTC | 1.0 USDT | 600 req/min |
| KuCoin | 0.10% | 0.10% | 0.0005 BTC | 10.0 USDT | 900 req/min |
The formula is straightforward: Minimum Spread = (Fee_buy + Fee_sell + Withdrawal_fee / Trade_size + Slippage_estimate). For a $10,000 trade with 0.10% fees on each side and a $5 withdrawal cost, you need at least a 0.25% spread to profit. Anything less and you're donating money to the exchanges.
Exchange Security and Feature Comparison
When you're running arbitrage, you need accounts funded on multiple exchanges simultaneously. That means your capital is exposed to the security practices of every venue you use. Here's what matters:
| Feature | Binance | Kraken | OKX | Bybit | Coinbase |
|---|---|---|---|---|---|
| Proof of Reserves | Yes | Yes | Yes | Yes | Public audit |
| 2FA Options | TOTP, SMS, YubiKey | TOTP, YubiKey | TOTP, SMS | TOTP, SMS | TOTP, YubiKey |
| Withdrawal Whitelist | Yes | Yes | Yes | Yes | Yes |
| API IP Restriction | Yes | Yes | Yes | Yes | Yes |
| Insurance Fund | SAFU ($1B+) | Limited | $700M+ | $300M+ | FDIC (USD only) |
| Instant Internal Transfer | Yes | No | Yes | Yes | No |
| Sub-accounts for API | Yes (VIP) | Yes | Yes | Yes | Limited |
Building Your Arbitrage Infrastructure
Manual arbitrage is mostly dead for small spreads. By the time you check prices, log into two exchanges, and place orders, the opportunity is gone. Serious arbitrage traders use automated systems. Here's a basic Python skeleton for monitoring spreads:
import ccxt
import time
exchanges = {
'binance': ccxt.binance({'apiKey': '...', 'secret': '...'}),
'kraken': ccxt.kraken({'apiKey': '...', 'secret': '...'}),
'okx': ccxt.okx({'apiKey': '...', 'secret': '...', 'password': '...'}),
}
def check_spread(symbol='BTC/USDT'):
prices = {}
for name, exchange in exchanges.items():
try:
ticker = exchange.fetch_ticker(symbol)
prices[name] = {
'bid': ticker['bid'],
'ask': ticker['ask'],
}
except Exception as e:
print(f'{name} error: {e}')
if len(prices) < 2:
return None
best_bid_exchange = max(prices, key=lambda x: prices[x]['bid'])
best_ask_exchange = min(prices, key=lambda x: prices[x]['ask'])
spread = prices[best_bid_exchange]['bid'] - prices[best_ask_exchange]['ask']
spread_pct = (spread / prices[best_ask_exchange]['ask']) * 100
return {
'buy_on': best_ask_exchange,
'sell_on': best_bid_exchange,
'spread_usd': round(spread, 2),
'spread_pct': round(spread_pct, 4),
}
while True:
result = check_spread()
if result and result['spread_pct'] > 0.25:
print(f"Opportunity: Buy on {result['buy_on']}, "
f"sell on {result['sell_on']} β "
f"spread: {result['spread_pct']}%")
time.sleep(1)
This is a monitoring script, not a trading bot. Actual execution requires order placement, balance management, position tracking, and error handling. The CCXT library supports 100+ exchanges with a unified API, making it the standard tool for multi-exchange arbitrage.
For real-time price feeds and signal detection, platforms like VoiceOfChain can supplement your own monitoring by providing cross-exchange price alerts and spread notifications, saving you from building every piece of infrastructure from scratch.
Liquidity and Execution: The Hidden Variables
A 0.5% spread means nothing if there's only $500 of liquidity at that price. Order book depth is everything in arbitrage. Here's typical BTC/USDT liquidity within 0.1% of mid-price on major exchanges:
| Exchange | Bid Depth | Ask Depth | Avg Daily Volume |
|---|---|---|---|
| Binance | $8-15M | $8-15M | $12B+ |
| Coinbase | $3-6M | $3-6M | $3B+ |
| Kraken | $2-4M | $2-4M | $1.5B+ |
| OKX | $5-10M | $5-10M | $6B+ |
| Bybit | $4-8M | $4-8M | $5B+ |
When people discuss how to arbitrage between crypto exchanges on Reddit, the most common mistake they describe is ignoring slippage. If you try to execute a $50,000 market order on an exchange with $3M depth, you might get filled across multiple price levels, destroying your expected spread. Always use limit orders when possible, and size your trades relative to available liquidity β a good rule of thumb is never more than 5-10% of the visible depth at your target price.
Speed matters too. The fastest arbitrage bots co-locate their servers near exchange data centers. For websocket-based price feeds, latency differences of 50-100ms can mean the difference between capturing a spread and missing it entirely.
Risk Management for Arbitrage Traders
Arbitrage is often called "risk-free" profit. It's not. Here are the real risks:
- **Transfer risk** β Moving coins between exchanges takes time. BTC confirmations can take 10-60 minutes. The spread can vanish or reverse while you wait. This is why most serious arbitrageurs pre-fund both sides.
- **Exchange risk** β Exchanges can freeze withdrawals, go offline, or (in extreme cases) become insolvent. Spreading capital across 3-5 trusted exchanges limits this exposure.
- **Execution risk** β Your order might partially fill, get rejected, or experience unexpected slippage. Always have contingency logic in your bot.
- **Regulatory risk** β Some jurisdictions have rules about moving money between platforms rapidly. Know your local regulations.
- **Inventory risk** β If you're pre-funded on both sides, you hold both crypto and stablecoins. Crypto can drop 10% while you sleep, erasing weeks of arbitrage gains.
Frequently Asked Questions
Is crypto arbitrage between exchanges legal?
Yes, arbitrage is legal in most countries. You're simply buying on one market and selling on another β it's a standard trading practice. However, you should report profits for tax purposes in your jurisdiction and comply with any local exchange regulations.
How much capital do I need to start arbitrage trading?
Realistically, $5,000-$10,000 minimum split across two exchanges. Smaller amounts get eaten by fixed withdrawal fees. Larger capital ($50K+) opens up more opportunities since you can profitably capture smaller spreads.
Can I do crypto arbitrage manually without a bot?
You can, but only for larger, slower-moving spreads β typically on smaller altcoins or during high-volatility events. For BTC and ETH on major exchanges, manual execution is too slow. Most sub-0.3% spreads close within seconds.
What are the best exchanges for crypto arbitrage?
Binance, OKX, and Bybit offer the best combination of low fees, high liquidity, and fast API access. Pair one of these with Kraken or Coinbase for geographic price divergence. Avoid exchanges with slow withdrawals or unreliable APIs.
How much profit can I realistically make from crypto arbitrage?
Expect 0.5-3% monthly returns on capital in normal markets, higher during volatility spikes. This assumes automated execution, proper fee management, and pre-funded accounts. Anyone promising 10%+ monthly from pure arbitrage is either taking hidden risks or lying.
Does arbitrage work with DeFi exchanges too?
Yes β CEX-to-DEX arbitrage is very active, especially on Ethereum and Solana. However, it adds gas cost risk and smart contract risk. MEV bots dominate on-chain arbitrage, so competing requires specialized infrastructure like Flashbots or Jito bundles.
Putting It All Together
Crypto arbitrage between exchanges remains profitable in 2026, but it's no longer the easy money it was in 2017. The edges are thinner, the competition is faster, and the infrastructure requirements are real. Start by paper-trading: monitor spreads for two weeks, calculate what your P&L would have been after all fees, and only go live when the numbers make sense.
Pre-fund accounts on 2-3 exchanges with strong APIs and low fees. Build or use a spread monitor. Set minimum profit thresholds that account for every cost. Scale up gradually. And remember: in arbitrage, consistency beats home runs. A hundred trades at 0.15% profit each is better than chasing one 5% spread that turns into a loss. Tools like VoiceOfChain can help you stay on top of cross-exchange signals so you're not flying blind. The opportunity is there β the question is whether you'll build the system to capture it.