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:
Triangular Arbitrage Equations
You can visualize the ring via cancelling fractions following the form
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. 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:
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:
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
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.
It is now possible to easily compute the synthetic bid and ask prices for EURUSD using the following prices:
Also note the formula:
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.