Why Do Triangular Arbitrage Opportunities Disappear Before My Trade Fills?
Triangular arbitrage opportunities disappear because the visible price gap is almost always smaller than the real execution cost. By the time a trader completes the three-pair cycle, taker fees, bid-ask spread, and order book depth can turn the imagined profit into a loss.
There is something worth stating upfront that most content on this topic skips:
Bearish market conditions do not make triangular arbitrage easier,
Instead, they raise execution risk.
When prices are falling, there are fewer active buyers and sellers (thin liquidity), spreads widen, and each leg of your arbitrage cycle reprices faster than your orders can process.
The evident profit gap grows wider on screen while the actual executable edge shrinks or vanishes entirely. This post breaks down how arbitrage works, why signals disappear at execution, and how a properly built bot should handle market conditions that make arbitrage unsafe.
Key Takeaways
- Triangular arbitrage cycles through three trading pairs, aiming to return more of the starting asset.
- The visible signal only matters if the cycle remains profitable after fees, spread, depth, and slippage are accounted for.
- Most signals vanish in milliseconds because bots and market makers compete for the same price gap.
- Bearish market conditions create more visible price dislocations and more execution risk at the same time.
- A well-built arbitrage bot should not just detect signals — it should reject weak ones and pause when conditions become unstable.
What Is Triangular Arbitrage?
Arbitrage means exploiting a price difference for the same asset across different contexts.
Example: If apples sell for $1 at Market A and $1.5 at Market B, you buy at A, carry them to B, and sell for an immediate gain. No waiting on price movement. Just a gap and the speed to move through it before it closes.
Triangular arbitrage applies that same logic across three trading pairs within a single exchange. You convert one asset through two others and return to your starting asset with more than you began.
A standard cycle example: USDT → BTC → ETH → USDT.
Working through it with clean numbers:
- Start with 10,000 USDT,
- Buy BTC at 60,000 USDT per BTC (0.1667 BTC),
- Trade that BTC for ETH on a mispriced pair where 1 ETH costs 0.048 BTC instead of the fair-value 0.050 BTC (giving you roughly 3.47 ETH),
- Then sell that ETH back at 3,000 USDT per ETH. You land with 10,416 USDT. The 0.002 BTC mismatch on the BTC/ETH pair produced the gain.

These mismatches appear because crypto markets are never perfectly synchronised. Different pairs update at different speeds. Liquidity is uneven. Volatility can push one pair temporarily out of alignment with the others. That window closes fast — every gap attracts automated systems built specifically to close it. Profitable cycles can last seconds or fractions of a second before they disappear.
How the Three-Pair Cycle Works
The structure is always the same: three legs, one loop, one net result. You move capital through three sequential trades, each with its own price, spread, and order book. The final number tells you whether the cycle was profitable.
The formula:
| Final amount = Starting capital × Leg 1 rate × Leg 2 rate × Leg 3 rate − fees − slippage |
If the final amount exceeds the starting capital after all those deductions, there is a real edge. If not, it is a losing trade regardless of what the signal showed.
The most consistent error in cycle calculation is using the last traded price instead of live bid and ask prices.
The last price tells you what someone paid in the most recent completed trade. It does not show you what you can buy or sell right now. The bid is the best available price someone will pay you. The ask is the best available price you can buy at. Any profitable cycle must be calculated against live bid/ask data, because a cycle that looks clean on the last price can be negative once you apply actual executable prices — and that is before a single fee is counted.
Why the Signal Disappears Before You Fill
The displayed edge on any arbitrage scanner is the starting point, not the tradeable profit. Here are three variables you should consider before filling an order
- Taker fees: Speed matters in triangular arbitrage.
Most bots use market orders, which trigger taker fees on every leg. Binance standard spot taker fees sit at 0.10% per trade. Three legs mean three fee events, so you need at least 0.30% gross edge before any actual profit exists.
A 2024 academic study on triangular arbitrage across Binance found that 96.93% of identified opportunities were not profitable even for the exchange’s highest VIP-tier traders once transaction costs were considered. For regular-fee users, the number is worse.
- The bid-ask spread is the second cost:
Every trading pair has a gap between what buyers will pay and what sellers want. When you cross that spread to enter a trade, you pay an implicit cost on top of the taker fee. Tight spreads on major pairs still compound meaningfully across three consecutive legs.
- Order book depth is the third variable, and it behaves differently.
Even if price and fees align, the order book may not have enough volume at the displayed price to fill your intended size. Pushing an order larger than what sits at the best price means falling into worse prices further down the book, creating slippage.
The gap you calculated at 500 USDT may not exist at all at 5,000 USDT.
Latency ties all three together. By the time your signal fires, your calculation runs, and your order reaches the exchange, the order book may have changed. The opportunity may be partially filled by a faster bot or completely gone.
In triangular arbitrage, a delay of even a few hundred milliseconds can be the difference between a profitable fill and a flat or negative result.
Bearish Markets Don’t Create Better Arbitrage — They Create More Risk
This is the part that most content on triangular arbitrage ignores.
When you see a bearish market, price gaps across pairs become more visible. The scanner shows bigger signals. It looks like more opportunities. That framing is misleading, and in practice it can be expensive.
My direct view: I would not advise running an arbitrage strategy during a genuine bearish market condition. Even a well-built bot requires active monitoring and meaningful updates when market structure deteriorates. Compare that to a strong bullish trend — like the late 2024 crypto bull run, where liquidity was deep, spreads were tight, and markets were moving with clear, sustained momentum. That is a far safer operational environment for systematic arbitrage.
Here is what actually changes in a falling market. Liquidity providers reduce their exposure. Market makers pull orders or widen their spreads to protect themselves. During the March 2020 “Black Thursday” crash, the cryptocurrency market collapsed overnight, and most arbitrage traders took significant losses because liquidity simply vanished in a matter of minutes. What worked in normal market conditions failed the moment the order books dried up.
Research on order book behaviour during market stress shows that books on major centralised exchanges can thin out rapidly as prices decline, revealing that much of the liquidity visible in normal volume data is illusory when sellers vastly outnumber buyers. As prices fall, even major pairs see spreads widen and volatility spike.
A signal that looks like a clean 0.25% arbitrage cycle may require walking three or four price levels deep into the order book on Leg 2 or Leg 3, converting apparent profit into a realised loss. The unevenness of sell pressure across pairs matters here too. Bearish momentum does not hit all three pairs simultaneously. One pair may gap down faster, creating the illusion of an opportunity while making that exact leg more expensive to execute. You could be left holding directional exposure in a falling asset because one leg filled while the next repriced against you.
| The question in a falling market should not be: “Is there an arbitrage signal?” It should be: “Can all three legs fill fast enough, at depth, after costs, without leaving me exposed to a position I never intended to hold?” |
Manual vs Automated— And How to Build a Bot That Knows When to Stop
Manual triangular arbitrage is a useful exercise for understanding the cycle and the formula. As an execution method, it does not work. The edge lives in milliseconds. A human can run the numbers correctly and still be too late before the first order is placed.
A bot can be faster. But speed alone is not the goal. Profitable fills are. Real-world builders of triangular arbitrage bots on Binance consistently reach the same conclusion: paper trading may show theoretical profits stacking up cleanly, but live trading demands proper order book depth handling, slippage protection, and robust failed-trade logic. The gap between simulation and live results can be significant.
The design flaw in most arbitrage bots is that they are built to find the largest spread, not the most executable cycle. A bot chasing signal size will get filled on bad trades, especially during bearish conditions where the widest signals carry the worst execution quality.
What a well-built arbitrage bot should contain:
- The data layer must stream live bid/ask prices and order book depth through WebSocket connections, not REST polling. Binance’s own documentation recommends WebSocket depth streams for local order book management precisely because REST responses carry too much lag for any latency-sensitive strategy. A REST snapshot shows a market that has already moved.
- The cycle scanner identifies valid three-pair routes continuously. The net edge calculator runs the full formula on every detected cycle, including all three taker fees and expected slippage based on order size versus available depth. The depth simulator is where bad trades are stopped before execution: if the intended position size cannot fill without walking too far down the book, the cycle is rejected.
- The bearish risk detector is what separates a survivable bot from one that compounds losses in bad conditions. This module monitors spread width, depth near the best bid and ask, volatility between consecutive book updates, and the bot’s own recent fill quality in real time. When spreads expand above a set threshold, when depth drops, when recent fills come back worse than the calculated expectation, or when book updates arrive stale, the bot raises its minimum required edge before allowing any entry. It demands a larger buffer to justify trading when conditions become unreliable.
Kill switch rules complete the system. The bot should pause when spread exceeds its threshold, when data exceeds the allowed lag window, when partial fills rise above a set percentage, or when the daily loss limit is hit. Without these circuit breakers, the bot continues executing through deteriorating conditions, compounding a losing run that a simple rule would have ended.
What Usually Goes Wrong
Most triangular arbitrage failures trace back to a handful of consistent errors.
Using the last price instead of the bid/ask generates signals that look profitable but cannot be executed at those rates. Missing one or more of the three fee events means the calculation is wrong from the start, since even a small omission inverts the edge. Assuming the full position size can fill at the stated price ignores how quickly thin order book depth works against larger orders.
Treating bearish markets as richer arbitrage environments without adjusting execution standards is typically the most expensive of these mistakes. The scanner shows wider spreads. The actual fills come back worse. The difference between the two is where the loss lies.
Running a bot without kill switches amplifies all of these. A bot that does not know when to stop keeps executing at the rate it was built for, against an environment it was not built for.
Pre-Trade Checklist
Before acting on any triangular arbitrage signal:
- Is the signal calculated from live bid/ask prices, not the last traded price?
- Are all three taker fees included in the net edge calculation?
- Does the net edge remain positive after fees and expected slippage?
- Is there enough order book depth for the intended position size?
- Is the order book data fresh within your allowed latency window?
- Have spreads expanded above their normal range?
- Is the market in a bearish or high-volatility state right now?
- Is there a kill switch active if one leg fails or partially fills?
- Has the setup been forward-tested with live execution data, not just candle-based backtests?
The Bottom Line
Triangular arbitrage is worth studying — not because it is easy to profit from, but because it is one of the clearest demonstrations of the gap between what a signal says and what the market will actually give you. Fees, depth, latency, and spread are not footnotes to the strategy. They are the strategy.
For beginners, the lesson is about the execution reality. For bot builders, it is a framework for learning how to design systems that know when to enter and, just as critically, when to stand down. Either way, this should be studied and tested thoroughly before any real capital is involved — and never deployed into a falling market without significant adjustments to the execution standards.
| Want to learn how to build and evaluate automated trading systems? Join the James Trading Strategies Telegram community for practical education on bots, execution risk, and risk-aware trading. |
FAQ
What is triangular arbitrage in simple terms?
Triangular arbitrage is when a trader cycles through three trading pairs and returns to the starting asset, aiming for the final amount to be higher after all conversions, fees, and costs.
Why do triangular arbitrage signals disappear so fast?
Order books update continuously, and bots and market makers compete to close every price gap. By the time a signal fires, the calculation runs, and your order reaches the exchange, the opportunity may already be partially or fully closed.
Does triangular arbitrage work better in a bearish market?
Not reliably. Bearish markets may show wider price gaps, but they also bring thinner liquidity, faster repricing, wider spreads, and a much higher probability of partial fills or failed legs. Stable or bullish conditions with deep liquidity are generally more suitable.
What should an arbitrage bot check before entering a trade?
Live bid/ask prices, taker fees on all three legs, order book depth for the intended size, data freshness, current spread width, recent fill quality, volatility levels, and active kill-switch conditions.
Is triangular arbitrage risk-free?
No. Even without holding a directional position, it carries fee risk, slippage risk, latency risk, liquidity risk, API failure risk, and partial-fill exposure. These risks can increase significantly in bearish or unstable market conditions.



