CapitalUnitSystemicStressProcessor.java

  1. package org.drip.sample.feed;

  2. import java.util.Map;

  3. import org.drip.capital.entity.CapitalUnitEventContainer;
  4. import org.drip.capital.feed.CapitalUnitStressScenarioLoader;
  5. import org.drip.capital.stress.Event;
  6. import org.drip.capital.stress.SystemicEventContainer;
  7. import org.drip.capital.stress.IdiosyncraticEventContainer;
  8. import org.drip.capital.stress.PnLSeries;
  9. import org.drip.numerical.common.FormatUtil;
  10. import org.drip.service.env.EnvManager;

  11. /*
  12.  * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  13.  */

  14. /*!
  15.  * Copyright (C) 2019 Quantitative Risk Analytics
  16.  */

  17. /**
  18.  * <i>CapitalUnitSystemicStressProcessor</i> zeds the Loading of the Capital Unit Systemic Stress Scenarios
  19.  *  from the specified Set of Input Files. The References are:
  20.  *
  21.  * <br><br>
  22.  *  <ul>
  23.  *      <li>
  24.  *          Bank for International Supervision(2005): Stress Testing at Major Financial Institutions: Survey
  25.  *              Results and Practice https://www.bis.org/publ/cgfs24.htm
  26.  *      </li>
  27.  *      <li>
  28.  *          Glasserman, P. (2004): <i>Monte Carlo Methods in Financial Engineering</i> <b>Springer</b>
  29.  *      </li>
  30.  *      <li>
  31.  *          Kupiec, P. H. (2000): Stress Tests and Risk Capital <i>Risk</i> <b>2 (4)</b> 27-39
  32.  *      </li>
  33.  *  </ul>
  34.  *
  35.  * @author Lakshmi Krishnamurthy
  36.  */

  37. public class CapitalUnitSystemicStressProcessor
  38. {

  39.     public static final void main (
  40.         final String[] argumentArray)
  41.         throws Exception
  42.     {
  43.         EnvManager.InitEnv ("");

  44.         boolean skipHeader = true;
  45.         String capitalUnitGSSTInputFile =
  46.             "I:\\CapitalUnitRuns\\GSST_Production_Citigroup_201903_PAA Buckets.csv";
  47.         String capitalUnitCBSSTInputFile = "I:\\CapitalUnitRuns\\CBSST_Input_Sample.csv";
  48.         String capitalUnitIBSSTInputFile = "I:\\CapitalUnitRuns\\IBSST_Input_Sample.csv";

  49.         Map<String, CapitalUnitEventContainer> capitalUnitEventContainerMap =
  50.             CapitalUnitStressScenarioLoader.LoadStressScenario (
  51.                 capitalUnitCBSSTInputFile,
  52.                 capitalUnitIBSSTInputFile,
  53.                 capitalUnitGSSTInputFile,
  54.                 skipHeader
  55.             ).capitalUnitEventMap();

  56.         int count = 0;

  57.         for (Map.Entry<String, CapitalUnitEventContainer> capitalUnitEventContainerMapEntry :
  58.             capitalUnitEventContainerMap.entrySet())
  59.         {
  60.             String capitalUnitCoordinateFQN = capitalUnitEventContainerMapEntry.getKey();

  61.             CapitalUnitEventContainer capitalUnitEventContainer =
  62.                 capitalUnitEventContainerMapEntry.getValue();

  63.             System.out.println (
  64.                 "\t| " + FormatUtil.FormatDouble (++count, 3, 0, 1.) + " => " + capitalUnitCoordinateFQN
  65.             );

  66.             IdiosyncraticEventContainer iBSSTEventContainer = capitalUnitEventContainer.idiosyncraticEventContainer();

  67.             if (null != iBSSTEventContainer)
  68.             {
  69.                 for (Map.Entry<String, Event> iBSSTEventMapEntry : iBSSTEventContainer.eventMap().entrySet())
  70.                 {
  71.                     System.out.println (
  72.                         "\t\tiBSST -> " + iBSSTEventMapEntry.getKey() +
  73.                         " {" + iBSSTEventMapEntry.getValue().aggregatePnLSeries().composite() + " | " +
  74.                         iBSSTEventMapEntry.getValue().specification().probability() + "}"
  75.                     );
  76.                 }
  77.             }

  78.             SystemicEventContainer gsstEventContainer = capitalUnitEventContainerMap.get (
  79.                 capitalUnitCoordinateFQN
  80.             ).systemicEventContainer();

  81.             Map<String, Event> gsstEventMap = gsstEventContainer.eventMap();

  82.             for (Map.Entry<String, Event> gsstEventMapEntry : gsstEventMap.entrySet())
  83.             {
  84.                 System.out.println (
  85.                     "\t\tGSST -> " + gsstEventMapEntry.getKey() +
  86.                     " {" + gsstEventMapEntry.getValue().aggregatePnLSeries().composite() + " | " +
  87.                     gsstEventMapEntry.getValue().specification().probability() + " | " +
  88.                     gsstEventMapEntry.getValue().pnlSeriesDecompositionMap() + "}"
  89.                 );

  90.                 Map<String, PnLSeries> attachedStressEventPnLMap =
  91.                     gsstEventMapEntry.getValue().attachedEventPnLSeries();

  92.                 if (null != attachedStressEventPnLMap)
  93.                 {
  94.                     System.out.println ("\t\t\tCBSST -> " + attachedStressEventPnLMap.keySet());

  95.                     for (Map.Entry<String, PnLSeries> attachedStressEventPnLEntry :
  96.                         attachedStressEventPnLMap.entrySet())
  97.                     {
  98.                         System.out.println (
  99.                             "\t\t\tcBSST -> " + attachedStressEventPnLEntry.getKey() +
  100.                             " {" + attachedStressEventPnLEntry.getValue().composite() + "}"
  101.                         );
  102.                     }
  103.                 }
  104.             }
  105.         }

  106.         EnvManager.TerminateEnv();
  107.     }
  108. }