Lesson 03 · 5 min

FX: Delivering Currency

One SettlementPayout covers spot, forward, and NDF. The difference is a settlement field, not a new type.

The deal on the desk

Pershing Square needs EUR 10,000,000 next June to settle a European purchase. Goldman Sachs sells it forward today at 1.15 dollars per euro. No rates engine, no periods, no resets: one delivery, one date. The CDM models this with the simplest leg in the module, SettlementPayout, and its own documentation is explicit: both FX spot and FX forward use this component. Spot versus forward is a question of when, not a different type.

Key ideas
  • The underlier is the thing delivered

    underlier is required and here it is simply cash: EUR as an asset. An FX forward is the forward delivery of one currency, priced in another.

  • The price is an exchange rate

    The shared priceQuantity slot carries the quantity (EUR 10,000,000) and a price with priceType: ExchangeRate, 1.15 USD per 1 EUR. Quantity and rate pin down both sides of the exchange.

  • Settlement is where FX products fork

    settlementTerms lives on the base type, and its settlementType decides everything: Physical delivers both currencies, Cash pays a difference. Same payout, one field flipped.

Physical: the forwardPershing SquareGoldman SachsEUR 10,000,000USD 11,500,000settlementType: Physicalboth currencies actually moveat 1.15 USD per EURCash: the NDFPershing SquareGoldman SachsEUR: never movesUSD difference onlysettlementType: CashsettlementCurrency: "USD"same payout shape, one field flipped

The forward, on the wire

{} settlementPayout, FX forward, trimmed
{  "payerReceiver": {    "payer": "Party1",    "receiver": "Party2"  },  "underlier": {    "observable": {      "asset": {        "cash": {          "identifier": [            {              "identifier": "EUR",              "identifierType": "CurrencyCode"            }          ]        }      }    }  },  "settlementTerms": {    "settlementType": "Physical"  },  "priceQuantity": {    "quantitySchedule": {      "value": 10000000,      "unit": {        "currency": "EUR"      }    },    "priceSchedule": {      "value": 1.15,      "priceType": "ExchangeRate",      "unit": {        "currency": "USD"      },      "perUnitOf": {        "currency": "EUR"      }    }  }}
Read the price like a fraction: unit over perUnitOf, dollars per euro. The same pattern priced the swap's fixed rate and will price every strike and spread in this module.

The NDF twist

Now suppose the currency cannot be freely delivered, or the parties simply prefer not to move it. A non-deliverable forward keeps the exact same payout shape and flips the settlement: settlementType: Cash plus a settlementCurrency of USD. The EUR amount becomes a reference for computing the difference; only dollars move. One field is the entire distance between two products with different names, different regulatory treatments, and the same schema.

One qualifier per settlement style

Qualify_ForeignExchange_Spot_Forward matches a lone settlement payout delivering currency. Qualify_ForeignExchange_NDF looks for the cash settlement variant. And an FX swap, the near-and-far-date package, is two settlement payouts in one product: composition again, no new types needed.

Try itOpen Qualify_ForeignExchange_Spot_Forward in the Playground, run the example, then change settlementType to Cash and add a settlement currency. Watch which qualifier claims the product now.
◆ Checkpoint

01In the CDM, what distinguishes an FX forward from an NDF?

1 / 3