Arbitrage with no transfers between exchanges
Every other scheme runs into the same thing: the coin has to be moved somewhere, and that means time, fees and risk. The triangle avoids it — all three trades happen on one exchange. Nothing goes anywhere, no blockchain is involved, and the whole operation takes seconds.
It works like this: USDT → BTC → ETH → USDT. If the rates between those three pairs have drifted apart, you come back to the starting point with slightly more than you began with.
Why this is possible at all
An exchange does not police consistency between its own pairs. BTC/USDT has its own book, ETH/USDT another, ETH/BTC a third. Each lives its own life, and after a sharp move one of them lags by a fraction of a percent. That is enough.
The gaps are tiny and last seconds, because bots close them fast. So in triangular arbitrage the decisive factor is not finding them — it is the fee.
The arithmetic that makes fees decisive
A loop is three trades. At the usual 0.1% that is 0.3% of costs. A typical divergence between pairs is 0.1–0.3%. In other words, on an ordinary exchange the triangle is eaten by fees before you finish closing it.
Hence the conclusion: triangles work where the fee is near zero. That is why working loops today are found almost exclusively on
MEXC, where the spot maker fee is zero: three limit orders cost nothing and the whole divergence stays with you.
Step 1. Enter your own fees
Open triangular arbitrage.

At the top there is a fee field per exchange. The maker/taker switch fills in reference rates (exchanges with none, such as Gate or WhiteBIT, get 0.1 % in both modes), but any of them can be overridden with your own: what you enter is saved and does not reset when you flip the switch.
Be honest about it. If you intend to trade with market orders, use the taker rate — otherwise you will see routes you cannot have.
Step 2. Read the table

Each row shows a three-pair path and the return after three fees. Zero or negative means the loop does not pay at your rate.
Look beyond the percentage at the narrowest point of the route: a loop is only executable as far as its least liquid pair allows.
Step 3. Execute the loop
- Open all three pairs in three tabs beforehand.
- Execute the trades one after another with no pauses. Every second between them is a chance for the rate to move.
- If you are working for the zero maker fee, use limit orders at the current price. Remember a limit order may not fill, leaving you stuck mid-loop.
- Check you have returned fully to the starting coin. A remainder in an intermediate coin is an open position.
Honestly about getting stuck: this is the main risk. If the second trade did not go through, you are holding BTC instead of USDT and exposed to price. Do your first loops on small amounts.
What it pays
A typical working loop with a zero maker fee is 0.1–0.4%. On 1000 dollars that is 1–4 dollars for an operation taking under a minute. The money comes from repetition, not from the size of any single route.
Common mistakes
- Calculating with the reference fee instead of your own. The most common reason for "the route was there and the money was not".
- Using the maker rate while trading at market. A maker order is one that waits in the book.
- Pausing between trades. The loop must be closed whole and fast.
- Routing through an illiquid pair. Slippage on the third trade takes everything.
- Starting large. Until you have run the loop a few times, the risk of getting stuck outweighs the expected profit.
Frequently asked
Almost every route is negative — is the scanner broken? No, that is the truth. At 0.1% a loop almost never pays. Enter your real fee to see the honest picture.
Why are working loops mostly on one exchange? Because its maker fee is zero. That is not an advertisement, it is the arithmetic of three trades.
Do I need a bot? For regular work yes — a human cannot keep up with second-long divergences. But start by hand to understand the mechanics.
What if I get stuck mid-loop? Work out what exiting at market costs. Usually fixing a small loss beats holding an unplanned position.