Skip to content
All library documents

Reconstructing Collateral-Specific Curves Without Direct Quotes

Article Quant Q&A · Author: DaniTec316

Summary

The document asks how to adjust discounting and projected forward rates when valuing collateralized derivatives under a CSA currency with no directly quoted swap or OIS curves. Its response says that FX forwards, local-currency rates, and collateral discount curves against another currency can provide enough information to infer the missing discount factors. It illustrates this with a rates library example that derives a proxy MXN curve under EUR collateral and compares it with MXN and USD collateral curves.

The example uses fictional curve data and is illustrative, not empirical evidence or a complete calibration recipe. The response does not spell out how to infer or recalibrate the forecast curve, quantify uncertainty, or prescribe a universal treatment when markets are illiquid. Its core practical point is that the FX forward market and supporting discount curves are needed to construct collateral-consistent proxies; the document leaves broader modeling choices open.

Key ideas

  • FX forwards and discount curves can be used to infer collateral discount factors when direct quotes are unavailable.
  • Local-currency rates and collateral curves against another currency are needed inputs to this reconstruction.
  • A proxy curve can represent a currency discounted under a different CSA currency.
  • The example is illustrative and does not establish a universal forecast-curve recalibration method.

Tags

Full text
# Forward rates and discount factors adjustment under different CSA currencies without direct market quotes


# Forward rates and discount factors adjustment under different CSA currencies without direct market quotes












In a multicurve framework for collateralized derivatives pricing, forward rates are derived using discount factors consistent with the CSA (Credit Support Annex) currency using xccy basis spreads for calibration. When changing the CSA currency (e.g., from USD-collateralized to EUR-collateralized), it’s clear that the discount curve should switch to reflect the collateral currency.

However, if there are no directly quoted IRS or OIS curves for that collateral currency pair (e.g., no EUR-collateralized MXN IRS quotes), how should forward rates be recalibrated?

Should I adjust only the discount factors (DFs) to reflect the new CSA, keeping the projected forward rates from the original forecast curve intact?

Or should I also recalibrate the forward rates (forecast curve) entirely to reflect the change in collateral currency, even in the absence of direct market instruments?

If recalibration is recommended, what methodology can be used to reconstruct forward curves under a different CSA when no direct swaps or basis quotes are available? Triangulation via FX forwards or cross-currency basis spreads?

Is there a recognized approach (e.g., convexity adjustments or proxy curves) for handling this in markets with incomplete CSA-specific liquidity?

Any practical insight or academic references would be greatly appreciated.

## Answer by Attack68 (score 3)

https://quant.stackexchange.com/a/83690

Rateslib for Python and its accompaniment "Coding Interest Rates: FX, Swaps and Bonds" (Darbyshire) cover this. Cross currency swaps are also covered in general and these processes generally explained in "Pricing and Trading Interest Rate Derivatives: A Practical Guide to Swaps" (Darbyshire). These are my publications - you can find independent reviews elsewhere.

Essentially, you need enough information to define the FX forwards market and all discount factors can be inferred from that. So you do need local currency rates, and some collateral rates against some (other) currency (usually usd).

```
from rateslib import *  # rateslib 2.0.1, python 3.12

fxf = FXForwards(
    fx_rates=FXRates({"eurusd": 1.15, "usdmxn": 19.0}, settlement=dt(2025, 1, 1)),
    fx_curves={
        "usdusd": Curve({dt(2025, 1, 1): 1.0, dt(2026, 1, 1): 0.95, dt(2027, 1, 1): 0.91}, interpolation="spline"),
        "mxnmxn": Curve({dt(2025, 1, 1): 1.0, dt(2026, 1, 1): 0.91, dt(2027, 1, 1): 0.87}, interpolation="spline"),
        "eureur": Curve({dt(2025, 1, 1): 1.0, dt(2026, 1, 1): 0.97, dt(2027, 1, 1): 0.96}, interpolation="spline"),
        "mxnusd": Curve({dt(2025, 1, 1): 1.0, dt(2026, 1, 1): 0.907, dt(2027, 1, 1): 0.866}, interpolation="spline"),
        "eurusd": Curve({dt(2025, 1, 1): 1.0, dt(2026, 1, 1): 0.969, dt(2027, 1, 1): 0.959}, interpolation="spline"),
    }
)

mxneur = fxf.curve("mxn", "eur")
type(mxneur) # ProxyCurve

mxneur.plot("1b", comparators=[fxf.curve("mxn", "mxn"), fxf.curve("mxn", "usd")], labels=["eur", "mxn", "usd"])
```

Graph of collateral curves for MXN with fictional data.

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.