Triangular Arbitrage With Bid Ask Quotes

 Triangular Arbitrage with Bid 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. But 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 three examples.

Getting Started
You will need simultaneous bid and ask quotes. 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.

Previously in Triangular Arbitrage 101, the basics of calculating a triangular arbitrage with close prices were discussed. If you are unfamiliar with the triangular arbitrage concept for close prices, please review the linked article above. Lot sizes can be computed exactly and this is discussed in the article Triangular Arbitrage Lot Size. In part two of this article, two more examples for how to compute Triangular Arbitrage with Bid Ask Quotes are presented.

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 
(shown in the picture in white as EU/GU/EG)

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.

EURUSD - EURGBP*GBPUSD = 0 
(shown in the picture in green as EU-EG*GU)
GBPUSD - EURUSD/EURGBP = 0
EURGBP - EURUSD/GBPUSD = 0

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. Just as was shown in Triangular Arbitrage Lot Size to determine the proper lot size, a calculation must be made to the underlying currency representing each pair. 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 FX 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.

Four Bid Ask Rules
Four general rules for bid and ask prices can be stated:
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 = Bid price numerator, BD = bid price denominator)
(AN = ask price numerator, AD = ask price denominator)

EURUSD Bid prices (red) against synthetic EU ask prices (green).
Example 1: 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 Ask prices (red) vs synthetic bid prices (green).
The result of these calculations is shown in the first picture (above) 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

Also note the formula:
EURUSD = EURGBP * GBPUSD

Actual vs. Synthetic Calculation and Comparison
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 arb these transitory prices.

In the next part, more examples are explored with the three pairs in this triangular arbitrage ring. As it will become apparent, not all pairs match up as intuitively as the synthetic pairs did for EURUSD when computing synthetic bid and ask prices.

Triangular Arbitrage with Bid Ask Quotes page 1  2