Counterparty Discounting

Cash-flows in a given currency are discounted using the curve in the cash-flow currency that reflects the CSA conditions. In principle we should do the following:

  1. The cash-flow currency is the same as the collateral currency: discount with OIS in that common currency
  2. The cash-flow currency XXX is different from the unique collateral currency YYY: discount with the cross-currency curve XXXYYY, i.e. the cross-currency curve in currency XXX that is implied from quotes of cross-currency products in the pair XXX/YYY
  3. The cash-flow currency is XXX, and there are several eligible currencies in the CSA, AAA, BBB, CCC…: discount with the CTD curve XXXABC that is the optimum of XXXAAA, XXXBBB, and XXXCCC.
  4. When there is no CSA, i.e. the trade is uncollateralized, we should discount it at the counterparty risk-free rate and handle the counterparty risk in the XVAs.

While we think this should be the proper discounting framework, we built our application in order to have enough flexibility to work in this framework as well as more legacy situations where an institution may not have/want to use the CTD curves, or may still discount uncollateralized trades ‘at LIBOR’. This increased flexibility comes at the cost of a higher risk of configuration mistakes, as it leaves more room for human error.

This flexibility is achieved by using a CSA map that maps CSA conditions to specific curves. In this manner, the user keeps the ability to decide which curve to use in order to discount trades for each pair (cash-flow currency, CSA).

Two discounting modes are available at the counterparty level: Posted or CTD, which correspond to the 2 views above, legacy (Posted) and ideal (CTD).

In Posted mode, the user must specify whether collateral is being posted or not and if it is, in what currency. The code will then go to the CSA map for the currency of the cash-flow and look for the curve assigned to the pair (cash-flow currency, posted currency). If collateral is not being posted, the code will pick the curve specified in the CSA map for the cash-flow currency under CSA = Funding.

In CTD mode, the Posting flag and currency are ignored and the code will pick the curve in the CSA map for the cash-flow currency and the eligible collateral currencies. In particular, this mode does not have a concept of uncollateralized discounting, which is meant to be handled by the XVAs.


As with other objects, we recommend to create a counterparty from copying an existing one. A typical counterparty configuration screen is shown below. The eligible currencies should be 3 letter code for the currencies, all separated by comas (no spaces). The fields for Base Currency, Threshold and MTA are ignored for pricing.


We show below an example of CSA map, with cash-flow currency JPY selected. One can see the choices of curves for uncollateralized (Funding), JPY collateral (JPYOIS), and USD collateral (JPYUSD). As explained earlier in this page, Funding is only used in the discounted method ‘Posted’ and in case no collateral is posted.