Options
All
  • Public
  • Public/Protected
  • All
Menu

Saddle point portfolio credit default loss model.

Default Loss model implementing the Saddle point expansion integrations on several default risk metrics. Codepence is dealt through a latent model making the integrals conditional to the latent model factor. Latent variables are integrated indirectly. See: Taking to the saddle by R.Martin, K.Thompson and C.Browne; RISK JUNE 2001; p.91 The saddlepoint method and portfolio optionalities R.Martin in Risk December 2006 VAR: who contributes and how much? R.Martin, K.Thompson and C.Browne RISK AUGUST 2001 Shortfall: Who contributes and how much? R. J. Martin, Credit Suisse January 3, 2007 Don't Fall from the Saddle: the Importance of Higher Moments of Credit Loss Distributions J.Annaert, C.Garcia Joao Batista, J.Lamoot, G.Lanine February 2006, Gent University Analytical techniques for synthetic CDOs and credit default risk measures A. Antonov, S. Mechkovy, and T. Misirpashaevz; NumeriX May 23, 2005 Computation of VaR and VaR contribution in the Vasicek portfolio credit loss model: a comparative study X.Huang, C.W.Oosterlee, M.Mesters Journal of Credit Risk (75-96) Volume 3/ Number 3, Fall 2007 Higher-order saddlepoint approximations in the Vasicek portfolio credit loss model X.Huang, C.W.Oosterlee, M.Mesters Journal of Computational Finance (93-113) Volume 11/Number 1, Fall 2007 While more expensive, a high order expansion is used here; see the paper by Antonov et al for the terms retained. For a discussion of an alternative to fix the error at low loss levels (more relevant to pricing than risk metrics) see: The hybrid saddlepoint method for credit portfolios by A.Owen, A.McLeod and K.Thompson; in Risk, August 2009. This is not implemented here though (yet?...) For the more general context mathematical theory see: Saddlepoint approximations with applications by R.W. Butler, Cambridge series in statistical and probabilistic mathematics. 2007

todo

Some portfolios show instabilities in the high order expansion terms.

todo

Methods here are calling and integrating using the unconditional probabilities without inverting them first; quite a lot of calls to the copula inversion can be avoided; this should improve performance.

todo

Revise the model for stability of the saddle point calculation. The search for the point does not convege in extreme cases; e.g. very high value of all the factors; factors for each variable not ordered from high to low,...

The treatment of recovery wont work with random recoveries, they should be passed to the conditional methods in the same way as the probabilities.

TO DO: Failing when the tranche upper loss limit goes over the max attainable loss.

  • With 15 quadrature points things are OK but 25 gives me -1#IND000 errors
     (over region around the EL I think)
  • Silly bug when calling some methods on todays date (zero time).
      ProbDef = 0 there
  • VaR <- tranched?????!
  • ESF <- tranched????!!
  • VaR split
  • ESF split?

When introducing defaults; somewhere, (after an update?) there should be a check that: copula_->basketSize() EQUALS remainingBasket_.size()

Hierarchy

Index

Constructors

constructor

Properties

_basket

_basket: RelinkableHandle<Basket> = new RelinkableHandle()

_isDisposed

_isDisposed: boolean = false

_observers

_observers: Set<Observer>

Accessors

isDisposed

  • get isDisposed(): boolean

Methods

defaultCorrelation

  • defaultCorrelation(d: Date, iName: Size, jName: Size): Real

densityTrancheLoss

  • densityTrancheLoss(d: Date, lossFraction: Real): Real
  • Probability density of a given loss fraction of the basket notional.

    Parameters

    • d: Date
    • lossFraction: Real

    Returns Real

dispose

  • dispose(): void
  • Returns void

expectedRecovery

expectedShortfall

  • expectedShortfall(d: Date, percentile: Real): Real
  • Expected shortfall given a default loss percentile.

    Parameters

    • d: Date
    • percentile: Real

    Returns Real

expectedTrancheLoss

  • expectedTrancheLoss(d: Date): Real

lossDistribution

notifyObservers

  • notifyObservers(): void
  • This method should be called at the end of non-const methods or when the programmer desires to notify any changes.

    Returns void

percentile

  • percentile(d: Date, percentile: Real): Real
  • Value at Risk given a default loss percentile.

    Parameters

    • d: Date
    • percentile: Real

    Returns Real

probAtLeastNEvents

  • Returns the probaility of having a given or larger number of defaults in the basket portfolio at a given time.

    Parameters

    Returns Probability

probOverLoss

  • Probability of the tranche losing the same or more than the fractional amount given.

    The passed lossFraction is a fraction of losses over the tranche notional (not the portfolio).

    Parameters

    • d: Date
    • lossFraction: Real

    Returns Probability

probsBeingNthEvent

  • Probabilities for each of the (remaining) basket elements in the pool to have defaulted by time d and at the same time be the Nth defaulting name to default in the basket. This method is oriented to default order dependent portfolio pricing (e.g. NTDs) The the probabilities ordering in the vector coincides with the pool order.

    Parameters

    Returns Probability[]

registerObserver

resetModel

  • resetModel(): void

setBasket

  • setBasket(bskt: Basket): void

splitESFLevel

  • splitESFLevel(d: Date, loss: Real): Real[]
  • Associated ESF fraction to each counterparty.

    Parameters

    • d: Date
    • loss: Real

    Returns Real[]

splitVaRLevel

  • splitVaRLevel(d: Date, loss: Real): Real[]
  • Associated VaR fraction to each counterparty.

    Parameters

    • d: Date
    • loss: Real

    Returns Real[]

unregisterObserver