If you've ever pulled ticker data from two crypto exchanges at once, you've probably seen it: the same coin quoted at slightly different prices. Buy low here, sell high there, pocket the difference. That's crypto arbitrage, and on paper it looks like the one trade that doesn't care which way the market moves.
As developers, we're good at spotting a gap in two JSON responses. We're less good, at first, at counting everything that sits between that gap and an actual profit. This post walks through why prices drift apart, the main flavors of arbitrage, and a small Python check that shows how quickly a "spread" disappears once you model real costs.
For the non-code version with tax notes for the US and Canada, see this plain-English guide to crypto arbitrage.
Why the same coin has different prices
There's no single official bitcoin price. Every centralized exchange runs its own order book, so prices drift because of:
- Local demand: a buying burst on one venue pushes its price up for a while.
- Liquidity: thin order books move more per trade.
- Capital rules: South Korea's well-known "kimchi premium" survived for years partly because moving money in and out is hard.
- Transfer friction: deposits and withdrawals take time and cost fees, which is exactly what keeps gaps alive.
That last point matters: the friction that creates the gap is the same friction that eats your profit.
The main types
- Cross-exchange: buy on A, sell on B. Serious traders pre-fund both sides so they never wait on a transfer.
- Triangular: loop through three pairs on one exchange (USD to BTC to ETH to USD). Gaps last seconds; this is bot territory.
- Funding-rate (cash-and-carry): hold spot, short an equal perpetual future, collect funding while the rate is positive. The rate can flip, and the short can get liquidated.
- DEX arbitrage: buy and sell across liquidity pools in one atomic transaction. It's the most competitive form of MEV, and searchers often hand most of the profit to block builders to win ordering.
Modeling the real spread
Here's a deliberately simple check. It takes the two quoted prices and subtracts taker fees, a withdrawal fee, and an allowance for slippage and price movement during the transfer.
def net_arbitrage(buy_price, sell_price, amount,
taker_fee=0.001, # 0.1% per side
withdrawal_fee_coin=0.0002,
slippage=0.0005, # 0.05% per side
drift=0.002): # price move while transferring
cost = buy_price * amount * (1 + taker_fee + slippage)
coins_arriving = amount - withdrawal_fee_coin
effective_sell = sell_price * (1 - drift)
proceeds = effective_sell * coins_arriving * (1 - taker_fee - slippage)
return proceeds - cost
gross_gap = 60_300 - 60_000
print("Gross gap per BTC:", gross_gap)
print("Net result for 0.1 BTC:", round(net_arbitrage(60_000, 60_300, 0.1), 2))
A 0.5% gap looks attractive. With the example assumptions above, the result for 0.1 BTC comes out negative. Swap in your own numbers: the point isn't these exact values, it's that every term is a percentage that stacks, and the gross gap has to beat all of them and still exist when both legs finish.
Things the toy model leaves out, which make it harder in real life:
- Order book depth (the quoted price only covers the first slice of size).
- Withdrawal queues, network congestion, and exchange maintenance windows.
- Counterparty risk: your pre-funded balance sits on someone else's platform.
- Taxes: every leg can be a taxable disposal.
The security angle: arbitrage bot scams
"Guaranteed arbitrage bot" offers are a classic scam pattern. Red flags worth treating like a failing test:
- Fixed daily returns or "risk-free" promises.
- You must deposit to their platform or wallet to "activate" the bot.
- Withdrawals require an extra "fee" or "tax" first.
- Pressure to recruit friends for bonuses.
If the code really printed money reliably, nobody would sell it to you for a subscription.
Takeaways
- Price gaps between exchanges are real but usually small and short-lived.
- Fees, slippage, transfer time, and drift often turn a gross gap into a net loss.
- Most practical arbitrage is automated, pre-funded, and highly competitive.
- Treat any "guaranteed" arbitrage product as a likely scam.
- Model costs before you trust a spread you saw in an API response.
The full breakdown, including a worked example, scam warning signs, and how arbitrage is taxed in the US and Canada, is in Crypto Arbitrage Explained on NutshellCrypto.
Read the full guide on NutshellCrypto
This is educational content, not financial advice.
This post was written with AI assistance.
Top comments (0)