Small Group Tutorials

Here to help students catch up, keep up, and move ahead. Book a consultation here.

How FX Cross-Rate Algorithms Enforce Triangular Consistency: Bid-Ask Spreads, Vehicle Currencies, Arbitrage Loops and Quote Validation

Quick answer: an FX cross rate is the exchange rate between two currencies derived from their rates against a third currency. If EUR/USD and USD/JPY are known, an implied EUR/JPY rate can be calculated. In a frictionless world, the direct quote and the implied cross must be consistent; otherwise a closed currency loop would create a no-arbitrage contradiction. In real markets, bid-ask spreads, fees, latency, market fragmentation and finite liquidity create a band rather than one exact equality. Banks therefore use cross-rate algorithms to derive quotes, validate feed consistency, detect stale or inverted prices, and ensure that executable bid/ask combinations do not violate basic triangular logic.

If A converts to B, B converts to C, and C converts back to A, the loop should not manufacture value merely because the quote directions were handled incorrectly.

Educational boundary: this article explains mathematical consistency and historical market structure. It does not provide live arbitrage opportunities, execution instructions or personalised trading advice.

Why this belongs in mathematics

Cross-rate construction uses multiplication, reciprocals, inequalities, graph theory and no-arbitrage reasoning. It is also a useful lesson in notation: an answer can be numerically plausible and still be wrong because the quote direction was inverted.

The FX market is enormous and decentralised. The BIS reported average OTC FX turnover of US$9.6 trillion per day in April 2025, with the US dollar on one side of 89.2% of trades. That dominance helps explain why the dollar often acts as a vehicle currency through which cross rates are derived. See the 2025 BIS Triennial FX Survey.

1. Read the quote direction before doing arithmetic

A quote EUR/USD = 1.1700 means:

1 euro = 1.1700 US dollars.

A quote USD/JPY = 150.00 means:

1 US dollar = 150 Japanese yen.

The units tell us what to do:

(USD per EUR) × (JPY per USD) = JPY per EUR.

Therefore the frictionless implied cross is:

EUR/JPY = 1.1700 × 150.00 = 175.50.

This is dimensional analysis disguised as finance. The intermediate USD unit cancels.

2. When quote directions do not align, invert first

Suppose instead we are given USD/EUR rather than EUR/USD. Then:

EUR/USD = 1 / (USD/EUR).

If USD/EUR = 0.8547, the reciprocal is approximately 1.1700 USD per EUR. Only after the units align should the cross multiplication proceed.

A robust cross-rate engine should therefore treat each quote as a directed conversion rule rather than a naked number.

3. Mid-rates are useful for explanation but not executable trading

A dealer normally quotes two prices:

  • bid — price at which the dealer buys the base currency;
  • ask — price at which the dealer sells the base currency.

The mid-rate is approximately:

mid = (bid + ask) / 2.

Mid-rates are convenient for charting and consistency checks, but a customer cannot usually execute both sides at the mid. A triangular loop must use the correct executable bid or ask on every leg.

4. Cross bid and ask when the quote directions align

Suppose:

  • EUR/USD = 1.1698 / 1.1702;
  • USD/JPY = 149.98 / 150.02.

With aligned quote directions, the implied EUR/JPY cross is approximately:

cross bid = 1.1698 × 149.98 ≈ 175.45

cross ask = 1.1702 × 150.02 ≈ 175.55.

The cross spread is wider than a frictionless point because each leg has its own spread.

5. The bid/ask rule comes from executable direction

Why multiply bid with bid and ask with ask in the aligned example? Because selling EUR through USD into JPY uses the prices at which the market buys EUR and then buys USD from the resulting flow. Reversing the direction uses the ask sides.

The safest implementation does not memorise a shortcut. It represents each leg as a conversion edge with the exact executable rate available in that direction. The cross quote then emerges from the path.

6. Triangular consistency is a closed-loop condition

In a frictionless world with currencies A, B and C:

(B/A) × (C/B) × (A/C) = 1.

If the product differs materially from 1 after using executable directions and costs, the quotes are inconsistent.

BIS research uses precisely this triangular structure to study FX liquidity. One working paper defines measures based on deviations of mid-quotes from triangular consistency and the transaction cost of a triangular round trip. See Constrained Liquidity Provision in Currency Markets.

7. Why direct and implied quotes can differ without creating free money

A direct EUR/JPY quote can differ from the simple product of two mid-rates because:

  • bid-ask spreads differ across pairs;
  • quotes arrive at slightly different times;
  • liquidity differs by venue and trade size;
  • credit and prime-brokerage relationships differ;
  • latency creates stale combinations;
  • fees and mark-ups matter;
  • available depth can vanish before all legs execute.

A consistency engine therefore compares executable bands, not one idealised mid-rate equality.

8. The US dollar’s vehicle-currency role simplifies the graph

The 2025 BIS survey found that the top ten most traded currency pairs all involved the US dollar. Dealers can therefore derive many less-liquid crosses through two liquid dollar legs.

For example, SGD/CHF can be connected through SGD/USD and USD/CHF if those markets are more liquid than the direct cross. The vehicle route can support pricing, hedging and validation even when a direct cross is also quoted.

This does not mean the direct market should equal the vehicle route tick for tick. It means the two should remain economically consistent after costs and executable depth are considered.

9. Graph representation makes the general problem clearer

Represent each currency as a node. A directed edge A→B stores the executable amount of B obtained from one unit of A.

Now cross-rate calculation becomes path multiplication:

Rate(A→C through B) = Rate(A→B) × Rate(B→C).

A loop A→B→C→A should not increase starting value after all executable spreads and costs.

Taking negative logarithms converts multiplication into addition:

w(A→B) = −ln(rate A→B).

A profitable theoretical loop would correspond to a negative-weight cycle. This creates a clean connection between foreign exchange and graph algorithms such as Bellman-Ford—useful for validation and computer-science education without relying on any live market opportunity.

10. Rounding can manufacture false inconsistencies

Quotes are displayed with finite decimal precision. Cross rates can require different pip conventions across currency pairs. If a system rounds each intermediate conversion too early, the final loop can appear inconsistent even when the underlying high-precision quotes are not.

A good engine should:

  • retain sufficient internal precision;
  • round only at defined output or settlement stages;
  • use pair-specific decimal conventions;
  • compare deviations with a tolerance that reflects spread and rounding rather than demand exact floating-point equality.

11. Reference rates are not executable dealing prices

The ECB publishes euro reference rates based on a daily central-bank concertation process and explicitly states that they are for information purposes; using them for transaction purposes is strongly discouraged. See the ECB exchange-rate methodology.

This is a useful falsifier against a common mistake: cross-rate arithmetic can be correct while the input rates are wrong for the intended task. A benchmark/reference rate, a dealer mid, and an executable bid/ask quote are different data objects.

12. Fragmentation makes timestamp alignment essential

The BIS describes modern FX as highly fragmented across many venues and liquidity pools. Execution algorithms help participants navigate this fragmentation, but fragmentation also increases the chance that an algorithm compares prices observed at slightly different times. See FX Execution Algorithms and Market Functioning.

A cross-rate validator should therefore retain:

  • quote timestamp;
  • venue/source;
  • bid and ask;
  • available size where known;
  • currency convention;
  • staleness state.

Without aligned time, a “triangular inconsistency” can simply be three snapshots of a moving market.

13. Cross-rate validation is useful even when nobody trades the loop

Banks can use triangular checks defensively to detect:

  • stale price feeds;
  • inverted currency conventions;
  • bad decimal scaling;
  • broken venue adapters;
  • one anomalous dealer quote;
  • incorrectly applied mark-ups;
  • pricing-engine failures after a market-data change.

The aim is not “find free money.” It is “make sure the bank’s own prices inhabit a coherent currency graph.”

14. Creative-work lens: Around the World in Eighty Days and route equivalence

Around the World in Eighty Days is not an FX source, but it gives a useful route idea: there can be several paths from one destination to another, and the path matters because each leg has its own cost and timing. Cross-rate algorithms ask the same structural question. What is the direct A→C quote, and what does A→B→C imply after each conversion cost?

The creative work supplies the graph intuition. Market data, bid/ask conventions and timestamps decide whether the routes are actually comparable.

15. The cross-rate algorithmic pipeline

  1. Normalise currency-pair conventions.
  2. Store bid, ask, timestamp, venue and precision.
  3. Create directed executable conversion edges.
  4. Find a valid path between base and quote currencies.
  5. Multiply directed rates along the path.
  6. Construct implied cross bid and ask.
  7. Compare with direct executable quote.
  8. Apply spread, fee, latency and rounding tolerances.
  9. Flag stale or structurally inconsistent inputs.
  10. Use graph-cycle checks across larger currency sets.
  11. Reconcile feed anomalies to source venues.
  12. Backtest false alerts during volatile markets.

16. Failure modes

  • Quote inversion. USD/EUR is treated as EUR/USD.
  • Mid-rate execution fantasy. Mid prices are used as though all legs can trade there.
  • Bid/ask direction error. Wrong side of one leg creates a fictitious profit.
  • Timestamp mismatch. Fast-moving quotes from different moments are compared.
  • Early rounding. Precision loss creates fake triangular breaks.
  • Depth blindness. Best displayed price cannot support the required size.
  • Reference-rate misuse. Informational benchmark is treated as executable market price.
  • Feed contamination. One stale source propagates errors into many derived crosses.

17. Diagnostics and falsifiers

  • Do the units cancel correctly along every path?
  • Does direct EUR/JPY lie inside the executable band implied by EUR/USD and USD/JPY after costs?
  • Are all three quotes timestamp-aligned?
  • Does the apparent inconsistency disappear when bid/ask sides are corrected?
  • Does it disappear at full precision before display rounding?
  • Which venue contributes the stale edge?
  • How does the cross behave when the vehicle-currency spread widens?
  • Can a second independent path reproduce the implied cross?

Suppose someone claims, “The direct cross differs from the product of two mid-rates, therefore there is an arbitrage.” A falsifier is an executable bid/ask calculation showing that the direct quote remains inside the no-arbitrage band after spreads and timing are accounted for. Mid-rate disagreement is not enough.

18. Verification and update triggers

  • unit-test every quote inversion;
  • validate bid/ask direction with known examples;
  • retain nanosecond/millisecond timestamps where system needs require them;
  • monitor feed staleness by venue;
  • compare direct and multiple implied paths;
  • review pair-specific decimal conventions after feed changes;
  • stress validation during high-volatility windows;
  • keep reference-rate, valuation-rate and executable-price data clearly separated.

Connections across the finance-and-banking algorithms lane

Research anchors

The deeper lesson

Cross-rate mathematics is a discipline of consistency. Currency quotes form a directed graph. Units determine which edges can multiply. Bid and ask determine which path is executable. Spreads and latency turn exact equality into a band. Triangular loops then become a powerful diagnostic: not a promise of profit, but a test that the pricing system is internally coherent and connected to the same market moment.

Educational note: This article explains public FX mathematics and market structure. It does not provide live trading signals, arbitrage recommendations or personalised financial advice.

Discover more from Bukit Timah Tutor

Subscribe now to keep reading and get access to the full archive.

Continue reading