EntityComponentCapitalAssignment.java

  1. package org.drip.capital.allocation;

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

  74. /**
  75.  * <i>EntityComponentCapitalAssignment</i> contains the Capital Assignment for each Entity and its Component.
  76.  *  The References are:
  77.  *
  78.  * <br><br>
  79.  *  <ul>
  80.  *      <li>
  81.  *          Bank for International Supervision(2005): Stress Testing at Major Financial Institutions: Survey
  82.  *              Results and Practice https://www.bis.org/publ/cgfs24.htm
  83.  *      </li>
  84.  *      <li>
  85.  *          Glasserman, P. (2004): <i>Monte Carlo Methods in Financial Engineering</i> <b>Springer</b>
  86.  *      </li>
  87.  *      <li>
  88.  *          Kupiec, P. H. (2000): Stress Tests and Risk Capital <i>Risk</i> <b>2 (4)</b> 27-39
  89.  *      </li>
  90.  *  </ul>
  91.  *
  92.  *  <br><br>
  93.  *  <ul>
  94.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  95.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/CapitalAnalyticsLibrary.md">Capital Analytics</a></li>
  96.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/capital/README.md">Basel Market Risk and Operational Capital</a></li>
  97.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/capital/allocation/README.md">Economic Risk Capital Entity Allocation</a></li>
  98.  *  </ul>
  99.  *
  100.  * @author Lakshmi Krishnamurthy
  101.  */

  102. public class EntityComponentCapitalAssignment
  103. {
  104.     private double _unitFloatBeta = java.lang.Double.NaN;
  105.     private double _allocatedBetaCapital = java.lang.Double.NaN;
  106.     private double _allocatedProRataCapital = java.lang.Double.NaN;
  107.     private org.drip.capital.allocation.EntityElasticityAttribution _elasticityAttribution = null;
  108.     private java.util.Map<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  109.         _entityComponentCapitalMap = null;

  110.     /**
  111.      * EntityComponentCapitalAssignment Constructor
  112.      *
  113.      * @param elasticityAttribution Entity Elasticity Attribution
  114.      * @param entityComponentCapitalMap Entity Component Capital Assignment Map
  115.      * @param unitFloatBeta Unit Float Beta
  116.      * @param allocatedBetaCapital Allocated Beta Capital
  117.      * @param allocatedProRataCapital Allocated Pro-Rata Capital
  118.      *
  119.      * @throws java.lang.Exception Thrown if the Inputs are invalid
  120.      */

  121.     public EntityComponentCapitalAssignment (
  122.         final org.drip.capital.allocation.EntityElasticityAttribution elasticityAttribution,
  123.         final java.util.Map<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  124.             entityComponentCapitalMap,
  125.         final double unitFloatBeta,
  126.         final double allocatedBetaCapital,
  127.         final double allocatedProRataCapital)
  128.         throws java.lang.Exception
  129.     {
  130.         if (null == (_elasticityAttribution = elasticityAttribution) ||
  131.             null == (_entityComponentCapitalMap = entityComponentCapitalMap) ||
  132.                 0 == _entityComponentCapitalMap.size() ||
  133.             !org.drip.numerical.common.NumberUtil.IsValid (
  134.                 _unitFloatBeta = unitFloatBeta
  135.             ) || !org.drip.numerical.common.NumberUtil.IsValid (
  136.                 _allocatedBetaCapital = allocatedBetaCapital
  137.             ) || !org.drip.numerical.common.NumberUtil.IsValid (
  138.                 _allocatedProRataCapital = allocatedProRataCapital
  139.             )
  140.         )
  141.         {
  142.             throw new java.lang.Exception (
  143.                 "EntityComponentCapitalAssignment Constructor => Invalid Inputs"
  144.             );
  145.         }
  146.     }

  147.     /**
  148.      * Retrieve the Entity Elasticity Attribution
  149.      *
  150.      * @return The Entity Elasticity Attribution
  151.      */

  152.     public org.drip.capital.allocation.EntityElasticityAttribution elasticityAttribution()
  153.     {
  154.         return _elasticityAttribution;
  155.     }

  156.     /**
  157.      * Retrieve the Entity Component Capital Assignment Map
  158.      *
  159.      * @return The Entity Component Capital Assignment Map
  160.      */

  161.     public java.util.Map<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  162.         entityComponentCapitalMap()
  163.     {
  164.         return _entityComponentCapitalMap;
  165.     }

  166.     /**
  167.      * Retrieve the Unit Float Beta
  168.      *
  169.      * @return The Unit Float Beta
  170.      */

  171.     public double unitFloatBeta()
  172.     {
  173.         return _unitFloatBeta;
  174.     }

  175.     /**
  176.      * Retrieve the Allocated Beta Capital
  177.      *
  178.      * @return The Allocated Beta Capital
  179.      */

  180.     public double allocatedBetaCapital()
  181.     {
  182.         return _allocatedBetaCapital;
  183.     }

  184.     /**
  185.      * Retrieve the Allocated Pro-Rata Capital
  186.      *
  187.      * @return The Allocated Pro-Rata Capital
  188.      */

  189.     public double allocatedProRataCapital()
  190.     {
  191.         return _allocatedProRataCapital;
  192.     }

  193.     /**
  194.      * Retrieve the Allocated Total Capital
  195.      *
  196.      * @return The Allocated Total Capital
  197.      */

  198.     public double allocatedTotalCapital()
  199.     {
  200.         return _allocatedBetaCapital + _allocatedProRataCapital;
  201.     }

  202.     /**
  203.      * Retrieve the Total Systemic Entity Capital
  204.      *
  205.      * @return Total Systemic Entity Capital
  206.      */

  207.     public org.drip.capital.allocation.EntityCapital systemic()
  208.     {
  209.         double systemic = 0.;

  210.         for (java.util.Map.Entry<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  211.             entityComponentCapitalEntry : _entityComponentCapitalMap.entrySet())
  212.         {
  213.             systemic = systemic + entityComponentCapitalEntry.getValue().systemic().absolute();
  214.         }

  215.         try
  216.         {
  217.             return new org.drip.capital.allocation.EntityCapital (
  218.                 systemic,
  219.                 systemic / (_allocatedBetaCapital + _allocatedProRataCapital)
  220.             );
  221.         }
  222.         catch (java.lang.Exception e)
  223.         {
  224.             e.printStackTrace();
  225.         }

  226.         return null;
  227.     }

  228.     /**
  229.      * Retrieve the Total Correlated Entity Capital
  230.      *
  231.      * @return Total Correlated Entity Capital
  232.      */

  233.     public org.drip.capital.allocation.EntityCapital correlated()
  234.     {
  235.         double correlated = 0.;

  236.         for (java.util.Map.Entry<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  237.             entityComponentCapitalEntry : _entityComponentCapitalMap.entrySet())
  238.         {
  239.             correlated = correlated + entityComponentCapitalEntry.getValue().correlated().absolute();
  240.         }

  241.         try
  242.         {
  243.             return new org.drip.capital.allocation.EntityCapital (
  244.                 correlated,
  245.                 correlated / (_allocatedBetaCapital + _allocatedProRataCapital)
  246.             );
  247.         }
  248.         catch (java.lang.Exception e)
  249.         {
  250.             e.printStackTrace();
  251.         }

  252.         return null;
  253.     }

  254.     /**
  255.      * Retrieve the Total Idiosyncratic Entity Capital
  256.      *
  257.      * @return Total Idiosyncratic Entity Capital
  258.      */

  259.     public org.drip.capital.allocation.EntityCapital idiosyncratic()
  260.     {
  261.         double idiosyncratic = 0.;

  262.         for (java.util.Map.Entry<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  263.             entityComponentCapitalEntry : _entityComponentCapitalMap.entrySet())
  264.         {
  265.             idiosyncratic = idiosyncratic + entityComponentCapitalEntry.getValue().idiosyncratic().absolute();
  266.         }

  267.         try
  268.         {
  269.             return new org.drip.capital.allocation.EntityCapital (
  270.                 idiosyncratic,
  271.                 idiosyncratic / (_allocatedBetaCapital + _allocatedProRataCapital)
  272.             );
  273.         }
  274.         catch (java.lang.Exception e)
  275.         {
  276.             e.printStackTrace();
  277.         }

  278.         return null;
  279.     }

  280.     /**
  281.      * Retrieve the Total No Stress Entity Capital
  282.      *
  283.      * @return Total No Stress Entity Capital
  284.      */

  285.     public org.drip.capital.allocation.EntityCapital noStress()
  286.     {
  287.         double noStress = 0.;

  288.         for (java.util.Map.Entry<java.lang.String, org.drip.capital.allocation.EntityComponentCapital>
  289.             entityComponentCapitalEntry : _entityComponentCapitalMap.entrySet())
  290.         {
  291.             noStress = noStress + entityComponentCapitalEntry.getValue().noStress().absolute();
  292.         }

  293.         try
  294.         {
  295.             return new org.drip.capital.allocation.EntityCapital (
  296.                 noStress,
  297.                 noStress / (_allocatedBetaCapital + _allocatedProRataCapital)
  298.             );
  299.         }
  300.         catch (java.lang.Exception e)
  301.         {
  302.             e.printStackTrace();
  303.         }

  304.         return null;
  305.     }

  306.     /**
  307.      * Retrieve the Total Fixed Elasticity Capital
  308.      *
  309.      * @return Total Fixed Elasticity Capital
  310.      */

  311.     public org.drip.capital.allocation.EntityCapital fixed()
  312.     {
  313.         double fixed = _elasticityAttribution.fixed();

  314.         try
  315.         {
  316.             return new org.drip.capital.allocation.EntityCapital (
  317.                 fixed,
  318.                 fixed / (_allocatedBetaCapital + _allocatedProRataCapital)
  319.             );
  320.         }
  321.         catch (java.lang.Exception e)
  322.         {
  323.             e.printStackTrace();
  324.         }

  325.         return null;
  326.     }

  327.     /**
  328.      * Retrieve the Total Floating Elasticity Capital
  329.      *
  330.      * @return Total Floating Elasticity Capital
  331.      */

  332.     public org.drip.capital.allocation.EntityCapital floating()
  333.     {
  334.         double floating = _elasticityAttribution.floating();

  335.         try
  336.         {
  337.             return new org.drip.capital.allocation.EntityCapital (
  338.                 floating,
  339.                 floating / (_allocatedBetaCapital + _allocatedProRataCapital)
  340.             );
  341.         }
  342.         catch (java.lang.Exception e)
  343.         {
  344.             e.printStackTrace();
  345.         }

  346.         return null;
  347.     }
  348. }