Triangular Arbitrage with Bid and Ask Quotes

Triangular arbitrage opportunities can be easily identified using bid and ask quotes. In this article I describe formulas for computing triangular arbitrage using bid and ask quotes. It is worth noting that the triangular arbitrage computation using bid and ask prices is a bit more complex than simply using close prices.

Once the basic triangular arbitrage concept is understood at the currency level, you should be able to compute your own triangular arbitrage inefficiencies based on bid and ask quotes. I will describe the method of computing triangular arbitrage with bid and ask quotes via simple rules and one example.

Getting started

You will need simultaneous bid and ask quote, which any broker provides on real time. To perform this exercise, I suggest taking a screen shot of your quote window because bid and ask prices are in constant flux and identifying an inefficiency requires accurate immediate and simultaneous prices.

Recall that at the heart of the triangular arbitrage formula is a conversion to the underlying currencies that make up a currency pair. Suppose we have simultaneous bid and ask quotes for three currency pairs that form a triangle or ring:

EURUSD bid 1.38705 ask 1.38710
GBPUSD bid 1.59440 ask 1.59455
EURGBP bid 0.86975 ask 0.86990

Triangular Arbitrage Equations

You can visualize the ring via cancelling fractions following the form A * B * C = 1 as either:

EURUSD * (1/GBPUSD) * (1/EURGBP) = 1

Or the same equation can be worked out via subtraction for each pair as previously stated where the first term is the pair and the second complex term is the synthetic pair, so the following list is EURUSD, GBPUSD and EURGBP subtracting their respective synthetics to equal approximately zero.

Note how in the picture, the two series are virtually identical except the first formula has a mean of one while the second formula has a mean of zero. The most appropriate method to use to calculate the triangular arbitrage formula is a matter of the objective. As can be seen from the pictures, all the formulas show approximately the same triangular arbitrage dynamic in a generalized way.

Bid and Ask Quotes

With bid and ask quotes the situation is a slightly more complex. The EURUSD currency pair is made up of the underlying currencies EUR and USD. A long position in EURUSD represents being long EUR and short USD. Likewise, a short position in EURUSD is actually a short position in EUR and a long position in USD. Because forex traders trade currency pairs and not the underlying currencies, this principle of one currency long and one currency short applies to any forex transaction with a currency pair.

Getting back to the example mentioned earlier:

EURUSD bid 1.38705 ask 1.38710
GBPUSD bid 1.59440 ask 1.59455
EURGBP bid 0.86975 ask 0.86990
When you post a bid, you are attempting to buy, and when you post an ask price, you are attempting to sell. Bid and ask prices generally represent the prices at which your market maker or counterparty is willing to transact where the counterparty wishes to buy or sell respectively. If you place a buy limit order for EURUSD at 1.38705, your price is the same as the posted bid. If price moves down your order may be filled and you will be long EURUSD. In this case, you will be long EUR and short USD. If you buy 10,000 units of EURUSD, you are long 10,000 EUR and short 13,870.5 USD (10,000 * 1.38705). Keep this in mind when you attempt to convert bid and ask prices for three pairs into a triangular arbitrage relationship in an effort to spot temporary market inefficiencies.

Rules for Bid and Ask

  • BN The numerator (EUR) of a EURUSD bid price represents a long position in EUR.
  • BD The denominator (USD) of a EURUSD bid price represents a short position in USD.
  • AN The numerator (EUR) of a EURUSD ask price represents a short position in EUR.
  • AD The denominator (USD) of a EURUSD ask price represents a long position in USD.

BN stands for Bid price numerator.
BD stands for bid price denominator.
AN stands for ask price numerator.
AD stands for ask price denominator.

Example: EURUSD synthetic bid and ask prices

For the purposes of this first example, assume the goal is to identify bid / ask price anomalies on EURUSD. The effective formula is EURUSD - EURGBP*GBPUSD = 0 or otherwise stated EURUSD = EURGBP*GBPUSD. Because the bid price of EURUSD should equal EURGBP*GBPUSD it is important to figure the actual currencies involved in the synthetic. As stated in rules BN and BD above, a posted bid to EURUSD is a willingness to buy EUR and to sell USD respectively. Through cancellation the formula for the synthetic reverts to: EURUSD = EURGBP*GBPUSD. To buy EUR with EURGBP you use the bid price because EUR is in the numerator (just as with EURUSD in rule BN). To sell USD with GBPUSD, you also use the bid price, because USD is in the denominator, just as the USD in EURUSD represents a short position according to rule BD.

Likewise in calculating ask prices for EURUSD by applying rules AN and AD to EURUSD’s synthetic EURGBP*GBPUSD, we use ask prices for EURGBP according to rule AN to create a short position in EUR. To create a long position in USD according to rule AD, ask prices for GBPUSD should be used. Thus to summarize:

Bid price of synthetic EURUSD = bid price of EURGBP * bid price of GBPUSD.

Ask price of synthetic EURUSD = ask price of EURGBP * ask price of GBPUSD.

EURUSD - EURGBP*GBPUSD = 0 (Show in green as EU-EG*GU)
The result of these calculations is shown in the picture below where the EURUSD bid is shown in red and compared against a green synthetic ask price. Note how there are a few small excursions of the synthetic ask price below the red bid line representing little opportunity for arbitrage. The magnitude of these small excursions would likely not pay for transaction costs as well as the times when price moves between identification and execution, eliminating the opportunity. Likewise, there are many times when the synthetic bid in the second picture is equal to or greater than the ask price, but just once when a single pip of profit could theoretically be captured. These pictures generally show that the markets over this 1000 bid/ask price change period are efficiently priced with not much opportunity for fleeting arbitrage opportunities of a pip or less.

It is now possible to easily compute the synthetic bid and ask prices for EURUSD using the following prices:

EURUSD bid 1.38705 ask 1.38710
GBPUSD bid 1.59440 ask 1.59455
EURGBP bid 0.86975 ask 0.86990

Actual vs Synthetic Calculation

EURUSD synthetic bid = EURGBP bid * GBPUSD bid = 0.86975 * 1.59440 = 1.3867294 which rounds to 1.38673. Compare this synthetic price to the actual bid price for EURUSD which is 3.2 pips higher indicating no opportunity from the synthetic bid. This is understandable considering the underlying spread is 1/2 pip!

EURUSD synthetic ask = EURGBP ask * GBPUSD ask = 0.86990 * 1.59455 = 1.3871 (rounded). Compared to the underlying it is clear that the synthetic and the underlying have approximately the same price and thus either could be used for a transaction at the ask price. However, double transaction costs are required for the synthetic. This equality between ask prices for the underlying EURUSD and synthetic EURUSD does not represent an apparent inefficiency that can be exploited.

In order for a real efficiency to exist, the synthetic bid (ask) price would need to be greater (less) than the actual bid (ask) price. But keep in mind the transaction costs as well as the significant execution risk that could invalidate any attempt to trade these transitory prices.


Calculating bid and ask prices for synthetic pairs is fairly straightforward. Keep in mind that an underlying pair’s bid consists of a long position in the numerator of the underlying, and a short position in the denominator of the underlying.

Then just determine which currency is long for the underlying and match up a synthetic pair’s bid or ask price to match that long position. Do the same for the short underlying currency match up either the synthetic pair’s bid or ask. The same rules apply to ask prices but in reverse. It may be useful to write out the four bid ask rules for your underlying to make this process easier.


Author: Arthur Lopez

Private investor and speculator, software engineer and founder of PZ Trading Solutions.

Leave a Reply

Your email address will not be published. Required fields are marked *