Cross-Border FX-Adjusted Spread Methodology

How we compute live arbitrage spreads on dual-listed Canadian-US tickers

The thesis

~120 Canadian companies are listed on both TSX (in CAD) and NYSE/NASDAQ (in USD). Spreads emerge when FX moves faster than the equity re-rates, when one side has a thinner book, or when one market is closed. Most spreads close within minutes; some persist for hours.

Computation

// USD-equivalent of the Canadian quote ca_in_usd = ca_price_cad * fx_cad_to_usd // Spread vs the US quote spread_usd = us_price_usd - ca_in_usd spread_pct = (spread_usd / us_price_usd) * 100 // Volume-weighted divergence (alpha hint) vol_div = (us_volume - ca_volume) / max(us_volume, ca_volume)

Inputs

Caveats

Not actionable advice. Real arbitrage requires synchronous execution on both sides, IIROC/FINRA broker accounts in both currencies, and consideration of FX conversion costs (typically 1-2% retail). A 0.5% display spread is rarely tradeable for retail accounts. We surface spreads for analytical context, not trade execution.

Verification

The /api/v1/arb/{ca_ticker}/{us_ticker} endpoint returns the raw inputs (CAD price, USD price, FX rate, volumes) so users can verify the computation themselves.