When pricing a portfolio of trades, you need a curve group comprising curves that are needed to determine expected future cashflows (projection) and their present value (discounting).
To calibrate such curves against prevailing market data, you need to define:
- a curve configuration that holds the data provider mapping to the curve group
- a market data environment
- the applicable valuation settings
For illustration purposes, a generic curve calibration can be performed on a standalone basis at the curve configuration level, against a hypothetical portfolio of IRS, inflation and FX trades relevant to each curve in the curve group.
On this page, we will discuss how to:
We will also provide a detailed description of the curve calibration algorithm applied to minimise potential valuation errors.
We will also discuss the application of CSA discounting.
You can use the pre-configured ‘XPLAIN DEFAULT’, ‘LONDON’ curve configurations or the ‘NEW CURVE CONFIGURATION’ example that you may have defined.
Running a Generic Curve Calibration
Under
The curve calibration algorithm applied when performing a portfolio valuation will minimise the potential number of failed curve calibrations to ensure that the maximum number of trades can be valued.
Once you have run a curve calibration, you can export the calibration results.
Field Name | Description | Permissible Values |
---|---|---|
Market Data Group | The market data group that contains the raw market data | See Market Data |
Market Data Source | Data type (raw, preliminary cleansed or overlay) + Data provider (primary or secondary) |
RAW | PRELIMINARY | OVERLAY PRIMARY | SECONDARY See using MD exception management results |
Stripping Type | Dual stripping (for the projection and discount curves) or Single curve stripping See here. |
OIS (DUAL) | SINGLE |
Discount Ccy | Applicable single currency for discounting purposes or If Discount Ccy = 'Local Ccy', the discount currency will be a function of the trade type and user parameterisation (see here) |
Any permissible discount currency Local Ccy |
Curve Date | The market data's historical curve date (default = system date) | YYYY-MM-DD (ISO 8601) |
Valuation Date | The valuation date (default = Curve Date) | YYYY-MM-DD (ISO 8601) |
Triangulation Ccy | The triangulation currency used first when no direct base vs counter curve can be found for foreign cashflow discounting | Any permissible discount currency |
Bid/Mid/Ask | Market data side for projection and discounting curves, FX rates, ATM swaption and FX volatilities, and Swaption and FX volatility skews | Bid | Mid | Ask |
Curves/Curve Configurations/NEW CURVE CONFIGURATION

In this example, you will calibrate the ‘NEW CURVE CONFIGURATION’ with the following parameters:
- valuation date and curve date set to 30th November 2022
- market data from the existing ‘12PM LONDON‘ market data group
- raw market data from the primary provider (meaning market data that have not been processed for anomaly detection)
- dual stripping type (OIS discounting)
- USD discount currency
- mid market data
Once the calibration has been performed, you can see which interest rate and inflation curves have been succesfully calibrated and which curve will be used as the discount curve for a given currency.

You can also export all calibration results at the curve configuration level.
At the interest rate (inflation) curve level, you can view and export the calibrated zero coupon rates (price indices) and discount factors for discount curves.


At the credit curve level, you can view and export the calibrated survival probabilities.


Export Calibration Results
At the curve configuration level (or at the curve level for a single curve), once you have run a curve calibration, you can export calibration results for all curves which have been successfully calibrated, by clicking on (export) and select the required report in the dropdown menu:
- select
Price Indices/ZC/FWD Rates + Implied Discount Factors for data actual curve nodes and monthly interpolated data from the valuation date - select the
[...] (Month End) option for interpolated month end data
The .csv export file will contain the outputs set out in the table below.
Field Name | |
---|---|
Curve Name | The name of the calibrated curve |
Date | A curve node end date or a date from a monthly schedule starting on the valuation date (associated to an interpolated / implied calibration result). |
Zero Rate | The (interpolated) calibrated zero coupon rate observed on the Date |
Price Index | The (interpolated) calibrated inlfation index observed on the Date |
Forward Rate | The (interpolated) calibrated forward observed on the Date |
Discount Factor | The implied discount factor derived from the zero coupon rate |
Market Rate | The (implied) zero coupon inflation market rate corresponding to the price index |
Curve Calibration Algorithm
A curve group may comprise curves that are not all relevant for pricing a given portfolio of trades. Some of the irrelevant curves may be linked to corrupted or missing market data, which in turn could cause the calibration of the whole curve group to fail.
As we want to minimise potential valuation failures, we split the portfolio into sub-portfolios based on various factors such as the trade’s discount currency (*) (**) and each trade leg’s currency (i.e. same or different from the discount currency) to create a non-FX portfolio and an FX portfolio.
We then create a set of sub-curve groups (one per underlying index for the non-FX portfolio and one per foreign currency for the FX portfolio) with the relevant curves for valuation (projection and discount). These sub-curve groups will be merged in the final calibration curve groups (one for the non-FX portfolio and one for the FX portfolio) only if they are successfully calibrated against the prevailing market data.
(*) Where Discount Ccy is set to “Local Ccy” instead of a deterministic single currency (e.g USD), user-defined discount currency definition rules will be applied for FX and XCCY trades.
(**) In the absence of an OIS curve in the discount currency in the curve group, the portfolio is first split per explicit underlying index, or per mapped underlying index where applicable, as per user-defined index mapping rules.
Such workflow can be run for illustration purposes at the curve configuration level. As discussed above, it comprises five main steps:
- Portfolio split per discount currency
- Further portfolio split per discount curve
- Further Portfolio split into non-FX vs. FX category
- Sub-curve groups calibration validation
- Sub-curve groups merge and portfolio valuation
We will now discuss each of these steps in detail, and illustrate them with a worked example.
Step 1 - Portfolio split per discount currency

If Discount Ccy is set to a specified single base currency (e.g. USD), no calibration (and thus no valuation) will be performed if there is no OIS cuvre for such currency in the curve group. The permissible values for a single Discount Ccy are USD, EUR, GBP, AUD, CAD, CHF, JPY, NZD and SGD.
If Discount Ccy is set to “Local Ccy”, the portfolio will be split into sub-portfolios of trades with the same base currency. For single currency trades (e.g. IRS), the base currency will the currency in which both legs are denominated. For FX trades and XCCY trades, this will be determined according to the user-defined discount currency definition rules.
Step 2 - Further portfolio split per discount curve

For a given base currency and corresponding sub-portfolio, the curve used to discount cashflows denominated in that base currency will be the associated OIS curve.
If there is no such OIS curve in the curve group, the sub-portfolio will be further split according to the trade’s underlying index, which will be the index linked to the trade (e.g. an IRS trade linked to 3M PLN WIBOR), or in the absence of an explicit underlying index (e.g. in the case of a CDS trade, an inflation trade or an FX trade), the mapped index as per the user-defined index mapping rules. Such index curve will then be used for both discounting and projection (where applicable).
Step 3 - Further portfolio into non-FX vs. FX category

To minimise potential calibration failures, we further split the sub-portfolios into two categories of trades:
- non-FX trades, where both trade legs are denominated in the same currency as the discount currency
- FX trades, where at least one trade leg is denominated in a currency different from the discount currency
We then create two sets of sub-curve groups:
- the first set for the non-FX portfolio containing a sub-curve group per underlying index
- the second set for the FX portfolio containing a sub-curve group per foreign currency
Each sub-curve group will have the relevant curves for valuation (projection and discount) for all trades in the corresponding hypothetical sub-portfolio.
Steps 4 and 5 - Sub-curve groups calibration validation prior to merge and portfolio valuation

If and only if these sub-curve groups are successfully calibrated against the prevailing market data, they will be merged in the final calibration curve groups usedfor portfolio valuation, one for the non-FX portfolio and one for the FX portfolio respectively.
Worked Example
Let’s take the example of a portfolio with three IRS (FIX vs. PLN 3M WIBOR, FIX vs. PLN 6M WIBOR and FIX vs. EUR 6M EURIBOR), to be priced with a curve group which comprises four index curves (PLN 3M WIBOR, PLN 6M WIBOR, EUR 6M EURIBOR and EUR ESTR) and a EUR/PLN XCCY curve.
Case 1: Discount Ccy = “EUR” (single base currency)
The portfolio will be valued using the relevant OIS curve (i.e. EUR ESTR) and associated XCCY curves as discount curves (for cashflows in EUR and foreign cashflows respectively). Note that an error will be thrown if no OIS curve exists for the selected discount currency in the curve group.
In our example, the applied discount curves will be as follows:
EUR ESTR curve → for cashflows in EUR
EUR/PLN CCY curve → for cashflows in PLN
The applied projection curves will be as follows:
EUR 6M EURIBOR curve → FIX vs. EUR 6M EURIBOR trade
PLN 3M WIBOR curve → FIX vs. PLN 3M WIBOR trade
PLN 6M WIBOR curve → FIX vs. PLN 6M WIBOR trade
Case 2: Discount Ccy = “Local Ccy” (multiple base currencies)
In our example (where there is no OIS curve for PLN in the curve group), the applied discount curves will be as follows:
EUR ESTR curve → FIX vs. EUR 6M EURIBOR trade
EUR/PLN CCY curve → FIX vs. EUR/PLN CCY trade
PLN 3M WIBOR curve → FIX vs. PLN 3M WIBOR trade
PLN 6M WIBOR curve → FIX vs. PLN 6M WIBOR trade
EUR/PLN CCY curve → FIX vs. EUR/PLN CCY trade
The applied projection curves will be as follows:
EUR 6M EURIBOR curve → FIX vs. EUR 6M EURIBOR trade
EUR/PLN CCY curve → FIX vs. EUR/PLN CCY trade
PLN 3M WIBOR curve → FIX vs. PLN 3M WIBOR trade
EUR/PLN CCY curve → FIX vs. EUR/PLN CCY trade
PLN 6M WIBOR curve → FIX vs. PLN 6M WIBOR trade
EUR/PLN CCY curve → FIX vs. EUR/PLN CCY trade
CSA Discounting
If CSA Discounting is set to TRUE (see valuation parameters), where a CSA Ccy has been defined at trade level, the portfolio will be split in sub-portfolios of trades with the same CSA Ccy.
Currently, the permissible CSA Ccy values are the same as the permissible values for single Discount Ccy. See permissible discount currency list.
For each CSA Ccy, the corresponding sub-portfolio will be valued using Case 1 above (with Discount Ccy = CSA Ccy).