Quintarth AI › Methodology › Cross-Border FX-Adjusted Spread Methodology
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
Equity quotes: yfinance, real-time during regular hours, 15-min delayed pre-/after-hours
FX rate: yfinance CADUSD=X, polled every 30s
ETF arbitrage filter: dual-listed ETFs (creation/redemption) are excluded — their spreads are mostly mechanical
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.