Skip to main content

XCCY

Two-currency swap. Each leg is denominated in its own currency; principal exchange at start and maturity.

Economics

FieldDefault
Frequencysemi-annual (every 6 months, Act/360)
Leg AUSD float (USD-SOFR)
Leg BEUR float (EUR-ESTR)
Notional exchangeinitial + final
scheduleDefaults:
XCCY: { frequencyMonths: 6, dayCountConvention: Act360 }

On-chain template

Created via the FpML factory — same multi-stream pattern as Basis. The Accept choice writes two notional-exchange events (start + maturity) plus the float coupons.

FX

Cross-currency NPV is reported in a single currency (the CSA's valuationCcy). Each leg's per-ccy NPV is translated through Oracle.FxSpot:

demo:
fxSpots:
EURUSD: 1.08

In production a live FX feed publishes FxSpot updates.

Oracle inputs

  • Two discount curves (one per leg currency).
  • Two projection curves (one per float index).
  • An FX spot per (domestic, foreign) pair.

Pricing gotchas

  • Curve book must be keyed by (currency, indexId) — a single XCCY trade pulls from four curves; a flat curve cache returns the wrong one.
  • Theta is filtered to the in-currency leg only — otherwise FX P&L gets double-counted.
  • Per-leg direction matters: each leg has its own Pay/Receive sign.

These were the 2026-04-21 pricing-correctness fixes.