BaselPhaseInArrangements.java

  1. package org.drip.sample.bcbs;

  2. import org.drip.capital.bcbs.CapitalMetricsStandard;
  3. import org.drip.capital.bcbs.LiquidityMetrics;
  4. import org.drip.numerical.common.FormatUtil;
  5. import org.drip.service.env.EnvManager;

  6. /*
  7.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  8.  */

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

  78. /**
  79.  * <i>BaselPhaseInArrangements</i> illustrates the Basel III Capital/Liquidity Phase-in Arrangement Schedule.
  80.  * The References are:
  81.  *
  82.  * <br><br>
  83.  *  <ul>
  84.  *      <li>
  85.  *          Basel Committee on Banking Supervision (2017): Basel III Leverage Ratio Framework and Disclosure
  86.  *              Requirements https://www.bis.org/publ/bcbs270.pdf
  87.  *      </li>
  88.  *      <li>
  89.  *          Central Banking (2013): Fed and FDIC agree 6% Leverage Ratio for US SIFIs
  90.  *              https://www.centralbanking.com/central-banking/news/2280726/fed-and-fdic-agree-6-leverage-ratio-for-us-sifis
  91.  *      </li>
  92.  *      <li>
  93.  *          European Banking Agency (2013): Implementing Basel III in Europe: CRD IV Package
  94.  *              https://eba.europa.eu/regulation-and-policy/implementing-basel-iii-europe
  95.  *      </li>
  96.  *      <li>
  97.  *          Federal Reserve (2013): Liquidity Coverage Ratio – Liquidity Risk Measurements, Standards, and
  98.  *              Monitoring
  99.  *              https://web.archive.org/web/20131102074614/http:/www.federalreserve.gov/FR_notice_lcr_20131024.pdf
  100.  *      </li>
  101.  *      <li>
  102.  *          Wikipedia (2018): Basel III https://en.wikipedia.org/wiki/Basel_III
  103.  *      </li>
  104.  *  </ul>
  105.  *
  106.  *  <br><br>
  107.  *  <ul>
  108.  *      <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/PortfolioCore.md">Portfolio Core Module</a></li>
  109.  *      <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/CapitalAnalyticsLibrary.md">Capital Analytics</a></li>
  110.  *      <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/sample/README.md">DROP API Construction and Usage</a></li>
  111.  *      <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/sample/bcbs/README.md">BCBS/Jurisdictional Capital/Leverage Compliance Checks</a></li>
  112.  *  </ul>
  113.  *
  114.  * @author Lakshmi Krishnamurthy
  115.  */

  116. public class BaselPhaseInArrangements
  117. {

  118.     private static final void DisplayLeverageRatio (
  119.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  120.     {
  121.         String leverageRatio =
  122.             "\t| Leverage                                                  => ";

  123.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  124.         {
  125.             leverageRatio = leverageRatio +
  126.                 FormatUtil.FormatDouble (capitalMetricsStandard.leverageRatio(), 1, 3, 100.) + "% |";
  127.         }

  128.         System.out.println (leverageRatio + "|");
  129.     }

  130.     private static final void MinimumCommonEquityCapitalRatio (
  131.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  132.     {
  133.         String minimumCommonEquityCapitalRatio =
  134.             "\t| Minimum Common Equity Capital Ratio                       => ";

  135.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  136.         {
  137.             minimumCommonEquityCapitalRatio = minimumCommonEquityCapitalRatio +
  138.                 FormatUtil.FormatDouble (capitalMetricsStandard.commonEquityRatio(), 1, 3, 100.) + "% |";
  139.         }

  140.         System.out.println (minimumCommonEquityCapitalRatio + "|");
  141.     }

  142.     private static final void CapitalConservationBufferRatio (
  143.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  144.     {
  145.         String capitalConservationBufferRatio =
  146.             "\t| Capital Conservation Ratio                                => ";

  147.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  148.         {
  149.             capitalConservationBufferRatio = capitalConservationBufferRatio +
  150.                 FormatUtil.FormatDouble (capitalMetricsStandard.conservationBufferRatio(), 1, 3, 100.) + "% |";
  151.         }

  152.         System.out.println (capitalConservationBufferRatio + "|");
  153.     }

  154.     private static final void MinimumCommonEquityPlusCapitalConservationBufferRatio (
  155.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  156.     {
  157.         String minimumCommonEquityPlusCapitalConservationBufferRatio =
  158.             "\t| Minimum Common Equity + Capital Conservation Buffer Ratio => ";

  159.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  160.         {
  161.             minimumCommonEquityPlusCapitalConservationBufferRatio =
  162.                 minimumCommonEquityPlusCapitalConservationBufferRatio + FormatUtil.FormatDouble
  163.                     (capitalMetricsStandard.commonEquityPlusConservationBufferRatio(), 1, 3, 100.) + "% |";
  164.         }

  165.         System.out.println (minimumCommonEquityPlusCapitalConservationBufferRatio + "|");
  166.     }

  167.     private static final void PhaseInOfDeductionsFromCET1 (
  168.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  169.     {
  170.         String phaseInOfDeductionsFromCET1 =
  171.             "\t| Phase-in of Deductions from CET1                          => ";

  172.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  173.         {
  174.             phaseInOfDeductionsFromCET1 = phaseInOfDeductionsFromCET1 +
  175.                 FormatUtil.FormatDouble (capitalMetricsStandard.cet1DeductionsPhaseIn(), 3, 1, 100.) + "% |";
  176.         }

  177.         System.out.println (phaseInOfDeductionsFromCET1 + "|");
  178.     }

  179.     private static final void MinimumTier1CapitalRatio (
  180.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  181.     {
  182.         String minimumTier1CapitalRatio =
  183.             "\t| Minimum Tier 1 Capital Ratio                              => ";

  184.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  185.         {
  186.             minimumTier1CapitalRatio = minimumTier1CapitalRatio +
  187.                 FormatUtil.FormatDouble (capitalMetricsStandard.tier1Ratio(), 1, 3, 100.) + "% |";
  188.         }

  189.         System.out.println (minimumTier1CapitalRatio + "|");
  190.     }

  191.     private static final void MinimumTotalCapitalRatio (
  192.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  193.     {
  194.         String minimumTotalCapitalRatio =
  195.             "\t| Minimum Total Capital Ratio                               => ";

  196.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  197.         {
  198.             minimumTotalCapitalRatio = minimumTotalCapitalRatio +
  199.                 FormatUtil.FormatDouble (capitalMetricsStandard.totalRatio(), 1, 3, 100.) + "% |";
  200.         }

  201.         System.out.println (minimumTotalCapitalRatio + "|");
  202.     }

  203.     private static final void MinimumTotalCapitalPlusConservationBufferRatio (
  204.         final CapitalMetricsStandard[] capitalMetricsStandardArray)
  205.     {
  206.         String minimumTotalCapitalPlusConservationBufferRatio =
  207.             "\t| Minimum Total Capital Plus Conservation Buffer Ratio      => ";

  208.         for (CapitalMetricsStandard capitalMetricsStandard : capitalMetricsStandardArray)
  209.         {
  210.             minimumTotalCapitalPlusConservationBufferRatio = minimumTotalCapitalPlusConservationBufferRatio +
  211.                 FormatUtil.FormatDouble (capitalMetricsStandard.totalPlusConservationBufferRatio(), 1, 3, 100.) + "% |";
  212.         }

  213.         System.out.println (minimumTotalCapitalPlusConservationBufferRatio + "|");
  214.     }

  215.     private static final void LiquidityCoverageRatioMinimumRequirement (
  216.         final LiquidityMetrics[] liquidityMetricsArray)
  217.     {
  218.         String liquidityCoverageRatioMinimumRequirement =
  219.             "\t| Liquidity Coverage Ratio - Minimum Requirement => ";

  220.         for (LiquidityMetrics liquidityMetrics : liquidityMetricsArray)
  221.         {
  222.             liquidityCoverageRatioMinimumRequirement = liquidityCoverageRatioMinimumRequirement +
  223.                 FormatUtil.FormatDouble (liquidityMetrics.liquidityCoverageRatio(), 3, 1, 100.) + "% |";
  224.         }

  225.         System.out.println (liquidityCoverageRatioMinimumRequirement + "|");
  226.     }

  227.     private static final void NetStableFundingRatio (
  228.         final LiquidityMetrics[] liquidityMetricsArray)
  229.     {
  230.         String netStableFundingRatio = "\t| Net Stable Funding Ratio                       => ";

  231.         for (LiquidityMetrics liquidityMetrics : liquidityMetricsArray)
  232.         {
  233.             netStableFundingRatio = netStableFundingRatio +
  234.                 FormatUtil.FormatDouble (liquidityMetrics.netStableFundingRatio(), 3, 1, 100.) + "% |";
  235.         }

  236.         System.out.println (netStableFundingRatio + "|");
  237.     }

  238.     public static final void main (
  239.         final String[] argumentArray)
  240.         throws Exception
  241.     {
  242.         EnvManager.InitEnv ("");

  243.         CapitalMetricsStandard[] capitalMetricsStandardArray = {
  244.             CapitalMetricsStandard.Basel_III_2013(),
  245.             CapitalMetricsStandard.Basel_III_2014(),
  246.             CapitalMetricsStandard.Basel_III_2015(),
  247.             CapitalMetricsStandard.Basel_III_2016(),
  248.             CapitalMetricsStandard.Basel_III_2017(),
  249.             CapitalMetricsStandard.Basel_III_2018(),
  250.             CapitalMetricsStandard.Basel_III_2019(),
  251.             CapitalMetricsStandard.US_SIFI(),
  252.             CapitalMetricsStandard.US_SIFI_BHC()
  253.         };

  254.         LiquidityMetrics[] liquidityMetricsArray = {
  255.             LiquidityMetrics.Basel_III_2015(),
  256.             LiquidityMetrics.Basel_III_2016(),
  257.             LiquidityMetrics.Basel_III_2017(),
  258.             LiquidityMetrics.Basel_III_2018(),
  259.             LiquidityMetrics.Basel_III_2019()
  260.         };

  261.         System.out.println
  262.             ("\t|----------------------------------------------------------------------------------------------------------------------------------------------||");

  263.         System.out.println
  264.             ("\t|                                                            BASEL III Phase-in Arrangements - Capital                                         ||");

  265.         System.out.println
  266.             ("\t|----------------------------------------------------------------------------------------------------------------------------------------------||");

  267.         System.out.println (
  268.             "\t|                           Year                            =>   2013  |  2014  |  2015  |  2016  |  2017  |  2018  |  2019  |  SIFI  |  BHC   ||"
  269.         );

  270.         System.out.println
  271.             ("\t|----------------------------------------------------------------------------------------------------------------------------------------------||");

  272.         DisplayLeverageRatio (capitalMetricsStandardArray);

  273.         MinimumCommonEquityCapitalRatio (capitalMetricsStandardArray);

  274.         CapitalConservationBufferRatio (capitalMetricsStandardArray);

  275.         MinimumCommonEquityPlusCapitalConservationBufferRatio (capitalMetricsStandardArray);

  276.         PhaseInOfDeductionsFromCET1 (capitalMetricsStandardArray);

  277.         MinimumTier1CapitalRatio (capitalMetricsStandardArray);

  278.         MinimumTotalCapitalRatio (capitalMetricsStandardArray);

  279.         MinimumTotalCapitalPlusConservationBufferRatio (capitalMetricsStandardArray);

  280.         System.out.println
  281.             ("\t|----------------------------------------------------------------------------------------------------------------------------------------------||");

  282.         System.out.println();

  283.         System.out.println
  284.             ("\t|-----------------------------------------------------------------------------------------------||");

  285.         System.out.println
  286.             ("\t|                          BASEL III Phase-in Arrangements - Liquidity                          ||");

  287.         System.out.println
  288.             ("\t|-----------------------------------------------------------------------------------------------||");

  289.         System.out.println (
  290.             "\t|                      Year                      =>   2015  |  2016  |  2017  |  2018  |  2019  ||"
  291.         );

  292.         System.out.println
  293.             ("\t|-----------------------------------------------------------------------------------------------||");

  294.         LiquidityCoverageRatioMinimumRequirement (liquidityMetricsArray);

  295.         NetStableFundingRatio (liquidityMetricsArray);

  296.         System.out.println
  297.             ("\t|-----------------------------------------------------------------------------------------------||");

  298.         System.out.println();

  299.         EnvManager.TerminateEnv();
  300.     }
  301. }