Pricing Fixed-Fixed Cross-Currency Swaps with Limited Curve Data
Summary
The document describes a preliminary Python and QuantLib approach to pricing fixed-fixed GBP-USD and EUR-USD cross-currency swaps with limited market inputs. It builds GBP SONIA and USD SOFR curves, applies a quoted cross-currency basis as a flat shift to the GBP curve, discounts each fixed leg, converts cash flows at spot, and solves for a par rate on one leg.
The author reports a 10–20 basis point difference from Bloomberg and considers possible causes: basis quotes tied to LIBOR conventions, legacy LIBOR fallback treatment, and approximating the basis as a flat curve shift rather than bootstrapping a basis curve. The document offers no tested adjustment or pricing results beyond that discrepancy. It frames a practical modeling problem, but leaves open key details such as market conventions, payment schedules, collateral discounting, basis quote calibration, and currency-specific curve construction, so the proposed setup is not established as a route to the requested accuracy.
Key ideas
- A flat shift of a SONIA curve by a quoted cross-currency basis is a simplifying approximation.
- Basis quotes tied to LIBOR conventions may not transfer directly to a SONIA-based curve.
- LIBOR fallback conventions may contribute to differences between an internal price and a vendor price.
- A single basis quote does not provide the full term structure needed to bootstrap a basis curve.
Tags
Full text
# Improving Fixed-Fixed Cross-Currency Swap Pricing in Python with Limited Data and Quantlib # Improving Fixed-Fixed Cross-Currency Swap Pricing in Python with Limited Data and Quantlib I am working on creating a fixed-fixed cross-currency swap pricer in Python for EUR-USD and GBP-USD pairs. Here's my current approach: - Bootstrap a GBP SONIA curve. - Bootstrap a SOFR curve. - Obtain the GBPUSD xccy basis (GBP LIBOR vs USD LIBOR), e.g., y bp for 10 years. - Compute an adjusted GBP SONIA curve by summing the GBP SONIA Curve and Xccy basis (e.g., the 10-year GBPUSD xccy basis). This is a flat shift in the SONIA curve by the xccy basis. - Discount the USD fixed leg using the SOFR curve. - Discount the GBP fixed leg using the adjusted SONIA curve. - Convert all cashflows to GBP using GBPUSD spot. - Solving for the fixed rate on one of the legs to get a 0 NPV structure When comparing our pricing with Bloomberg, there is a 10-20 bp difference, which I assume is mostly driven by: - Xccy basis referencing LIBOR, but we are applying the shift to the SONIA curve. - LIBOR fallback used on one/both legs. - No bootstrapping happening on xccy basis; just applying a pure shift of the SONIA curve. Challenges: - We have limited data (only SONIA swaps, SOFR swaps, GBPUSD spot and xccy basis). - We aim to get as close as possible to Bloomberg's fixed-fixed xccy rates (within 5 bps). - We are using Quantlib and prefer not to do our bootstrapping. Any suggestions or insights on how to improve our pricing model while working with these constraints would be greatly appreciated!
Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.