Three exchange rates can look inconsistent and still offer no trade.
The number that matters is not the product of the prices shown on a chart. It is the amount left after buying at ask prices, selling at bid prices, and completing all three conversions.
That distinction is the basis of triangular arbitrage.
What is triangular arbitrage?
Triangular arbitrage is an attempt to profit from a temporary inconsistency among three related exchange rates.
The trader converts:
- currency A into currency B;
- currency B into currency C;
- currency C back into currency A.
If the final amount is greater than the starting amount after spreads, commissions, slippage, and other execution costs, the loop produced a profit.
The strategy does not depend on predicting whether a currency will rise or fall. It tests whether three prices available at the same moment agree with one another.
For example, EUR/USD and GBP/USD imply a value for EUR/GBP. If the executable EUR/GBP quote differs enough from that implied value, one direction around the three pairs may show an arbitrage opportunity.
The word executable matters. A rate used in the calculation must be available for the required side and quantity of each trade. A midpoint, chart price, or stale quote is not enough.
The three currency pairs in the loop
Consider these pairs:
- EUR/USD: how many US dollars one euro costs;
- EUR/GBP: how many British pounds one euro costs;
- GBP/USD: how many US dollars one pound costs.
Together, they form two possible routes:
USD → EUR → GBP → USD
or:
USD → GBP → EUR → USD
Both directions need to be checked. One may produce a positive theoretical result while the other produces a loss.
Before doing the calculation, I put every pair in a consistent base/quote format. This avoids one of the most common mistakes: multiplying a rate that should have been divided, or using the reciprocal of the required quote.
Bid and ask prices change the calculation
Suppose EUR/USD is quoted at:
1.0998 / 1.1000
The first number is the bid. The second is the ask.
- To sell EUR for USD, I receive the bid: 1.0998.
- To buy EUR with USD, I pay the ask: 1.1000.
The same rule applies to every pair:
| Action | Executable side |
|---|---|
| Buy the base currency | Ask |
| Sell the base currency | Bid |
Using only midpoint prices can create a profit that cannot actually be traded. A BIS working paper illustrates the same distinction: a currency loop that appears profitable without transaction costs can become unprofitable once bid and ask quotes are applied.
Triangular arbitrage formula
For the route USD → EUR → GBP → USD, the calculation is:
Final USD = Starting USD ÷ EUR/USD ask × EUR/GBP bid × GBP/USD bid
The route multiplier is:
EUR/GBP bid × GBP/USD bid ÷ EUR/USD ask
The route has a positive gross edge when that multiplier is greater than 1.
For the reverse route, USD → GBP → EUR → USD, the calculation is:
Final USD = Starting USD ÷ GBP/USD ask ÷ EUR/GBP ask × EUR/USD bid
Its multiplier is:
EUR/USD bid ÷ (GBP/USD ask × EUR/GBP ask)
A multiplier above 1 is only the first test. The expected gain must also cover commissions, venue fees, slippage, and any other costs not already included in the quoted spread.
Triangular arbitrage example
Assume the following illustrative quotes are available at the same time:
| Currency pair | Bid | Ask |
|---|---|---|
| EUR/USD | 1.0998 | 1.1000 |
| EUR/GBP | 0.8810 | 0.8812 |
| GBP/USD | 1.2500 | 1.2502 |
We start with $100,000 and test the route:
USD → EUR → GBP → USD
Step 1: Convert USD into EUR
We are buying euros, so we use the EUR/USD ask:
$100,000 ÷ 1.1000 = €90,909.09
Step 2: Convert EUR into GBP
We are selling euros, so we use the EUR/GBP bid:
€90,909.09 × 0.8810 = £80,090.91
Step 3: Convert GBP back into USD
We are selling pounds, so we use the GBP/USD bid:
£80,090.91 × 1.2500 = $100,113.64
The gross result is:
$100,113.64 − $100,000 = $113.64
That is a gross return of approximately 0.1136%.
How $100,000 moves through the three pairs
Each conversion uses the side of the quote available to the trade. The result below is gross, before any additional commissions, slippage, or rejected orders.
Illustrative quotes. A positive calculation is not a guaranteed fill or a guaranteed profit.
These prices are deliberately simplified to make the calculation visible. They should not be read as a typical profit available in live major-currency trading.
If commissions and other costs exceed $113.64, the net result is negative. The same is true if one leg fills at a worse price, if there is not enough quantity at the quoted level, or if a quote changes before the loop is complete.
Why the reverse route also needs to be tested
Using the same quotes, the reverse route is:
USD → GBP → EUR → USD
The calculation is:
$100,000 ÷ 1.2502 ÷ 0.8812 × 1.0998 = $99,829.69
This direction loses approximately $170.31 before any additional fees.
That result is normal. A price inconsistency does not make both directions profitable. The bid-ask spread pushes the two routes apart. A scanner must calculate each route with the correct executable side instead of assuming that one cross-rate comparison is enough.
Why a visible opportunity may not become a profit
The arithmetic is the easy part. Execution determines whether the calculated edge survives.
The quotes may not be synchronized
One feed may update before another. A scanner can combine a fresh quote from one pair with stale prices from the other two and report an opportunity that no longer exists.
Timestamps help, but they do not guarantee that all three prices remain available when the orders reach the venue.
There may not be enough liquidity
The best bid or ask applies only to the quantity offered at that price.
A $10,000 loop may fit within the top level of all three pairs. A $1 million loop may consume several levels of the order book. The average execution price can erase the edge even when the first quoted price looks profitable.
The maximum practical size is limited by the thinnest leg of the triangle.
The three trades are not guaranteed to fill together
The calculation treats the loop as one operation. Most trading systems still send three separate orders.
If the first two execute and the third is rejected or repriced, the trader is left with an open currency position. This is called leg risk. The result now depends on market movement rather than a locked price relationship.
Immediate-or-cancel and fill-or-kill instructions can reduce some execution uncertainty where supported. They do not make three orders across separate books fully atomic.
Slippage can be larger than the expected edge
An arbitrage margin can be smaller than a normal price change between quote receipt and execution. Network latency, matching-engine latency, queue position, and competing orders all affect the final prices.
This is why the bid-ask spread is only the first cost to check.
A provider may reject or reprice a stale quote
Execution rules vary among exchanges, ECNs, dealers, brokers, and liquidity pools. Some FX venues use last look, which allows a liquidity provider to accept or reject a trade after receiving the request.
The displayed rate is therefore not always a guaranteed fill.
How triangular arbitrage is executed in practice
A professional workflow normally separates detection from execution.
- Normalize the quotes. Put each pair in a known base/quote direction.
- Read current bid and ask prices. Do not substitute chart closes or midpoints.
- Calculate both routes. Test clockwise and counterclockwise conversion.
- Check executable depth. Recalculate using the expected average price for the intended size.
- Subtract all known costs. Include commissions and venue fees not already reflected in the spread.
- Apply a safety threshold. The expected edge needs room for latency and slippage.
- Send and monitor the orders. The system must handle partial fills, rejects, and unwanted residual positions.
- Reconcile the actual result. Expected profit is not realized profit until all fills are confirmed.
This process usually runs in software because manual calculation and order entry are too slow for liquid markets.
Research on spot FX found that triangular arbitrage opportunities did occur, but most were small and short-lived. The authors also concluded that sustained profit would require reaching an impractically large share of the available opportunities before competing traders. That is a more realistic picture than describing triangular arbitrage as easy or risk-free. Read the study.
Triangular arbitrage on one venue and across venues
The cleanest version uses three pairs available through the same exchange or liquidity pool. Prices, balances, fees, and execution reports then come from one system.
If the legs use different venues, more variables enter the trade:
- prices may not represent the same liquidity;
- balances must already be available in the required places;
- order and market-data latency differ;
- counterparty and settlement arrangements may differ;
- one venue may reject a trade while another fills it.
At that point, the strategy combines triangular arbitrage with cross-venue arbitrage.
The same mathematics can be applied to three crypto pairs on one centralized exchange. But the fee schedule, minimum order sizes, book depth, and matching rules still need to be included. A cryptocurrency loop is not profitable simply because three displayed last prices fail to multiply to one.
Can retail traders use triangular arbitrage?
Retail traders can understand and calculate the relationship. Reliably capturing it is much harder.
By the time a person notices a discrepancy and enters three orders, automated systems may already have traded it away. Retail platforms may also show indicative or aggregated prices rather than the exact liquidity that will execute all three legs.
The practical value for most traders is educational. The calculation teaches:
- how currency pairs relate to one another;
- why bid and ask prices matter;
- how execution costs change a theoretical return;
- why a quoted price is not the same as a completed trade.
Access to an API or automated strategy does not remove these limits. Faster order entry helps only if the data, costs, risk controls, and execution logic are also sound.
Common triangular arbitrage mistakes
Mixing quote directions
EUR/USD and USD/EUR describe reciprocal prices. Treating them as interchangeable leads to multiplication and division errors.
Using midpoints or last prices
These prices are useful for analysis but may not be available for execution. Every conversion needs the correct bid or ask.
Calling the gross edge profit
A positive multiplier is an opportunity candidate. Profit is what remains after all three trades and all costs.
Ignoring depth
The top price may cover only a small order. Each leg must support the same starting amount after conversion.
Assuming the loop is risk-free
The price relationship may be locked in mathematically. The orders are not necessarily locked in operationally.
Checking only one direction
A complete scanner evaluates both routes. It also rejects any route that falls below the required safety threshold.
The calculation is an execution test
When I check a triangular loop, I do not ask whether three chart prices produce a number above one. I ask whether the required quantities can trade now, on the correct side of each quote, with enough margin left after costs.
That is the difference between a pricing discrepancy and an executable arbitrage.
