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

## 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 EUR~~GBP~~*~~GBP~~USD 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 = EUR`

. To buy ~~GBP~~*~~GBP~~USD**EUR** with **EUR**GBP you use the bid price because **EUR** is in the numerator (just as with **EUR**USD in rule BN). To sell **USD** with GBP**USD**, you also use the bid price, because **USD** is in the denominator, just as the **USD** in EUR**USD** 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) GBPUSD - EURUSD/EURGBP = 0 EURGBP - EURUSD/GBPUSD = 0

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.

## Conclusion

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.