BurgardKjaerEdgeAttribution.java

  1. package org.drip.xva.pde;

  2. /*
  3.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  4.  */

  5. /*!
  6.  * Copyright (C) 2020 Lakshmi Krishnamurthy
  7.  * Copyright (C) 2019 Lakshmi Krishnamurthy
  8.  * Copyright (C) 2018 Lakshmi Krishnamurthy
  9.  * Copyright (C) 2017 Lakshmi Krishnamurthy
  10.  *
  11.  *  This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics,
  12.  *      asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment
  13.  *      analytics, and portfolio construction analytics within and across fixed income, credit, commodity,
  14.  *      equity, FX, and structured products. It also includes auxiliary libraries for algorithm support,
  15.  *      numerical analysis, numerical optimization, spline builder, model validation, statistical learning,
  16.  *      and computational support.
  17.  *  
  18.  *      https://lakshmidrip.github.io/DROP/
  19.  *  
  20.  *  DROP is composed of three modules:
  21.  *  
  22.  *  - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/
  23.  *  - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
  24.  *  - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/
  25.  *
  26.  *  DROP Product Core implements libraries for the following:
  27.  *  - Fixed Income Analytics
  28.  *  - Loan Analytics
  29.  *  - Transaction Cost Analytics
  30.  *
  31.  *  DROP Portfolio Core implements libraries for the following:
  32.  *  - Asset Allocation Analytics
  33.  *  - Asset Liability Management Analytics
  34.  *  - Capital Estimation Analytics
  35.  *  - Exposure Analytics
  36.  *  - Margin Analytics
  37.  *  - XVA Analytics
  38.  *
  39.  *  DROP Computational Core implements libraries for the following:
  40.  *  - Algorithm Support
  41.  *  - Computation Support
  42.  *  - Function Analysis
  43.  *  - Model Validation
  44.  *  - Numerical Analysis
  45.  *  - Numerical Optimizer
  46.  *  - Spline Builder
  47.  *  - Statistical Learning
  48.  *
  49.  *  Documentation for DROP is Spread Over:
  50.  *
  51.  *  - Main                     => https://lakshmidrip.github.io/DROP/
  52.  *  - Wiki                     => https://github.com/lakshmiDRIP/DROP/wiki
  53.  *  - GitHub                   => https://github.com/lakshmiDRIP/DROP
  54.  *  - Repo Layout Taxonomy     => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
  55.  *  - Javadoc                  => https://lakshmidrip.github.io/DROP/Javadoc/index.html
  56.  *  - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
  57.  *  - Release Versions         => https://lakshmidrip.github.io/DROP/version.html
  58.  *  - Community Credits        => https://lakshmidrip.github.io/DROP/credits.html
  59.  *  - Issues Catalog           => https://github.com/lakshmiDRIP/DROP/issues
  60.  *  - JUnit                    => https://lakshmidrip.github.io/DROP/junit/index.html
  61.  *  - Jacoco                   => https://lakshmidrip.github.io/DROP/jacoco/index.html
  62.  *
  63.  *  Licensed under the Apache License, Version 2.0 (the "License");
  64.  *      you may not use this file except in compliance with the License.
  65.  *  
  66.  *  You may obtain a copy of the License at
  67.  *      http://www.apache.org/licenses/LICENSE-2.0
  68.  *  
  69.  *  Unless required by applicable law or agreed to in writing, software
  70.  *      distributed under the License is distributed on an "AS IS" BASIS,
  71.  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  72.  *  
  73.  *  See the License for the specific language governing permissions and
  74.  *      limitations under the License.
  75.  */

  76. /**
  77.  * <i>BurgardKjaerEdgeAttribution</i> collects the Attribution Components of the Burgard Kjaer PDE based on
  78.  * the Risk-Neutral Ito Evolution of the Derivative, as laid out in Burgard and Kjaer (2014). The References
  79.  * are:
  80.  *
  81.  *  <br><br>
  82.  *  <ul>
  83.  *      <li>
  84.  *          Burgard, C., and M. Kjaer (2014): PDE Representations of Derivatives with Bilateral Counter-party
  85.  *              Risk and Funding Costs <i>Journal of Credit Risk</i> <b>7 (3)</b> 1-19
  86.  *      </li>
  87.  *      <li>
  88.  *          Cesari, G., J. Aquilina, N. Charpillon, X. Filipovic, G. Lee, and L. Manda (2009): <i>Modeling,
  89.  *              Pricing, and Hedging Counter-party Credit Exposure - A Technical Guide</i> <b>Springer
  90.  *              Finance</b> New York
  91.  *      </li>
  92.  *      <li>
  93.  *          Gregory, J. (2009): Being Two-faced over Counter-party Credit Risk <i>Risk</i> <b>20 (2)</b>
  94.  *              86-90
  95.  *      </li>
  96.  *      <li>
  97.  *          Li, B., and Y. Tang (2007): <i>Quantitative Analysis, Derivatives Modeling, and Trading
  98.  *              Strategies in the Presence of Counter-party Credit Risk for the Fixed Income Market</i>
  99.  *              <b>World Scientific Publishing</b> Singapore
  100.  *      </li>
  101.  *      <li>
  102.  *          Piterbarg, V. (2010): Funding Beyond Discounting: Collateral Agreements and Derivatives Pricing
  103.  *              <i>Risk</i> <b>21 (2)</b> 97-102
  104.  *      </li>
  105.  *  </ul>
  106.  *
  107.  *  <br><br>
  108.  *  <ul>
  109.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  110.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/XVAAnalyticsLibrary.md">XVA Analytics Library</a></li>
  111.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/xva/README.md">Valuation Adjustments that account for Collateral, CC Credit/Debt and Funding Overhead</a></li>
  112.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/xva/pde/README.md">Burgard Kjaer PDE Evolution Scheme</a></li>
  113.  *  </ul>
  114.  * <br><br>
  115.  *
  116.  * @author Lakshmi Krishnamurthy
  117.  */

  118. public class BurgardKjaerEdgeAttribution extends org.drip.xva.pde.BurgardKjaerEdge
  119. {
  120.     private double _derivativeXVAFundingGrowth = java.lang.Double.NaN;
  121.     private double _derivativeXVAClientDefaultGrowth = java.lang.Double.NaN;
  122.     private double _derivativeXVADealerDefaultGrowth = java.lang.Double.NaN;
  123.     private double _derivativeXVAEarlyTerminationGrowth = java.lang.Double.NaN;

  124.     /**
  125.      * BurgardKjaerEdgeAttribution Constructor
  126.      *
  127.      * @param positionValueBump The Bump in the Position Value
  128.      * @param derivativeXVAStochasticGrowthDown The Stochastic Down Component of the Derivative XVA Value
  129.      *      Growth
  130.      * @param derivativeXVAStochasticGrowth The Stochastic Component of the Derivative XVA Value Growth
  131.      * @param derivativeXVAStochasticGrowthUp The Stochastic Up Component of the Derivative XVA Value
  132.      *      Growth
  133.      * @param derivativeXVACollateralGrowth The Collateral Component of the Derivative XVA Value Growth
  134.      * @param derivativeXVAEarlyTerminationGrowth The Early Termination Component of the Derivative XVA
  135.      *      Value Growth
  136.      * @param derivativeXVAFundingGrowth The Funding Component of the Derivative XVA Value Growth
  137.      * @param derivativeXVADealerDefaultGrowth The Dealer Default Component of the Derivative Value XVA
  138.      *      Growth
  139.      * @param derivativeXVAClientDefaultGrowth The Client Default Component of the Derivative XVA Value
  140.      *      Growth
  141.      *
  142.      * @throws java.lang.Exception Thrown if the Inputs are Invalid
  143.      */

  144.     public BurgardKjaerEdgeAttribution (
  145.         final double positionValueBump,
  146.         final double derivativeXVAStochasticGrowthDown,
  147.         final double derivativeXVAStochasticGrowth,
  148.         final double derivativeXVAStochasticGrowthUp,
  149.         final double derivativeXVACollateralGrowth,
  150.         final double derivativeXVAEarlyTerminationGrowth,
  151.         final double derivativeXVAFundingGrowth,
  152.         final double derivativeXVADealerDefaultGrowth,
  153.         final double derivativeXVAClientDefaultGrowth)
  154.         throws java.lang.Exception
  155.     {
  156.         super (
  157.             positionValueBump,
  158.             derivativeXVAStochasticGrowthDown,
  159.             derivativeXVAStochasticGrowth,
  160.             derivativeXVAStochasticGrowthUp,
  161.             derivativeXVACollateralGrowth
  162.         );

  163.         if (!org.drip.numerical.common.NumberUtil.IsValid (_derivativeXVAEarlyTerminationGrowth =
  164.                 derivativeXVAEarlyTerminationGrowth) ||
  165.             !org.drip.numerical.common.NumberUtil.IsValid (_derivativeXVAFundingGrowth =
  166.                 derivativeXVAFundingGrowth) ||
  167.             !org.drip.numerical.common.NumberUtil.IsValid (_derivativeXVADealerDefaultGrowth =
  168.                 derivativeXVADealerDefaultGrowth) ||
  169.             !org.drip.numerical.common.NumberUtil.IsValid (_derivativeXVAClientDefaultGrowth =
  170.                 derivativeXVAClientDefaultGrowth))
  171.         {
  172.             throw new java.lang.Exception ("BurgardKjaerEdgeAttribution Constructor => Invalid Inputs");
  173.         }
  174.     }

  175.     /**
  176.      * Retrieve the Early Termination Component of the Derivative XVA Value Growth
  177.      *
  178.      * @return The Early Termination Component of the Derivative XVA Value Growth
  179.      */

  180.     public double derivativeXVAEarlyTerminationGrowth()
  181.     {
  182.         return _derivativeXVAEarlyTerminationGrowth;
  183.     }

  184.     /**
  185.      * Retrieve the Funding Component of the Derivative XVA Value Growth
  186.      *
  187.      * @return The Funding Component of the Derivative XVA Value Growth
  188.      */

  189.     public double derivativeXVAFundingGrowth()
  190.     {
  191.         return _derivativeXVAFundingGrowth;
  192.     }

  193.     /**
  194.      * Retrieve the Dealer Default Component of the Derivative XVA Value Growth
  195.      *
  196.      * @return The Dealer Default Component of the Derivative XVA Value Growth
  197.      */

  198.     public double derivativeXVADealerDefaultGrowth()
  199.     {
  200.         return _derivativeXVADealerDefaultGrowth;
  201.     }

  202.     /**
  203.      * Retrieve the Client Default Component of the Derivative XVA Value Growth
  204.      *
  205.      * @return The Client Default Component of the Derivative XVA Value Growth
  206.      */

  207.     public double derivativeXVAClientDefaultGrowth()
  208.     {
  209.         return _derivativeXVAClientDefaultGrowth;
  210.     }

  211.     @Override public double thetaPositionValueDown()
  212.     {
  213.         return super.derivativeXVAStochasticGrowthDown() + super.derivativeXVACollateralGrowth() +
  214.             _derivativeXVAEarlyTerminationGrowth + _derivativeXVAFundingGrowth +
  215.                 _derivativeXVADealerDefaultGrowth + _derivativeXVAClientDefaultGrowth;
  216.     }

  217.     @Override public double theta()
  218.     {
  219.         return super.derivativeXVAStochasticGrowth() + super.derivativeXVACollateralGrowth() +
  220.             _derivativeXVAEarlyTerminationGrowth + _derivativeXVAFundingGrowth +
  221.                 _derivativeXVADealerDefaultGrowth + _derivativeXVAClientDefaultGrowth;
  222.     }

  223.     @Override public double thetaPositionValueUp()
  224.     {
  225.         return super.derivativeXVAStochasticGrowthUp() + super.derivativeXVACollateralGrowth() +
  226.             _derivativeXVAEarlyTerminationGrowth + _derivativeXVAFundingGrowth +
  227.                 _derivativeXVADealerDefaultGrowth + _derivativeXVAClientDefaultGrowth;
  228.     }
  229. }