HedgeErrorBaselProxy.java
- package org.drip.sample.xvafixfloat;
- import java.util.ArrayList;
- import java.util.List;
- import org.drip.analytics.date.*;
- import org.drip.exposure.evolver.*;
- import org.drip.exposure.holdings.*;
- import org.drip.exposure.universe.*;
- import org.drip.measure.crng.*;
- import org.drip.measure.discrete.CorrelatedPathVertexDimension;
- import org.drip.measure.dynamics.*;
- import org.drip.measure.process.*;
- import org.drip.measure.statistics.UnivariateDiscreteThin;
- import org.drip.numerical.common.FormatUtil;
- import org.drip.numerical.common.StringUtil;
- import org.drip.numerical.linearalgebra.Matrix;
- import org.drip.service.env.EnvManager;
- import org.drip.state.identifier.*;
- import org.drip.xva.dynamics.*;
- import org.drip.xva.gross.*;
- import org.drip.xva.proto.*;
- import org.drip.xva.settings.*;
- /*
- * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- */
- /*!
- * Copyright (C) 2018 Lakshmi Krishnamurthy
- *
- * This file is part of DRIP, a free-software/open-source library for buy/side financial/trading model
- * libraries targeting analysts and developers
- * https://lakshmidrip.github.io/DRIP/
- *
- * DRIP is composed of four main libraries:
- *
- * - DRIP Fixed Income - https://lakshmidrip.github.io/DRIP-Fixed-Income/
- * - DRIP Asset Allocation - https://lakshmidrip.github.io/DRIP-Asset-Allocation/
- * - DRIP Numerical Optimizer - https://lakshmidrip.github.io/DRIP-Numerical-Optimizer/
- * - DRIP Statistical Learning - https://lakshmidrip.github.io/DRIP-Statistical-Learning/
- *
- * - DRIP Fixed Income: Library for Instrument/Trading Conventions, Treasury Futures/Options,
- * Funding/Forward/Overnight Curves, Multi-Curve Construction/Valuation, Collateral Valuation and XVA
- * Metric Generation, Calibration and Hedge Attributions, Statistical Curve Construction, Bond RV
- * Metrics, Stochastic Evolution and Option Pricing, Interest Rate Dynamics and Option Pricing, LMM
- * Extensions/Calibrations/Greeks, Algorithmic Differentiation, and Asset Backed Models and Analytics.
- *
- * - DRIP Asset Allocation: Library for model libraries for MPT framework, Black Litterman Strategy
- * Incorporator, Holdings Constraint, and Transaction Costs.
- *
- * - DRIP Numerical Optimizer: Library for Numerical Optimization and Spline Functionality.
- *
- * - DRIP Statistical Learning: Library for Statistical Evaluation and Machine Learning.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- *
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- /**
- * HedgeErrorBaselProxy simulates for various Latent States and Exposures for an Fix Float Swap and computes
- * the XVA Metrics using the Basel Proxy-Style Exposure Generator using Burgard Kjaer Dual Bond Hedge Error
- * Vertexes. The References are:
- *
- * - Burgard, C., and M. Kjaer (2014): PDE Representations of Derivatives with Bilateral Counter-party Risk
- * and Funding Costs, Journal of Credit Risk, 7 (3) 1-19.
- *
- * - Burgard, C., and M. Kjaer (2014): In the Balance, Risk, 24 (11) 72-75.
- *
- * - Albanese, C., and L. Andersen (2014): Accounting for OTC Derivatives: Funding Adjustments and the
- * Re-Hypothecation Option, eSSRN, https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2482955.
- *
- * - Albanese, C., L. Andersen, and, S. Iabichino (2015): The FVA Puzzle: Accounting, Risk Management, and
- * Collateral Trading <b>https://papers.ssrn.com/sol3/paper.cfm?abstract_id_2517301</b><br><br>
- *
- * - Burgard, C., and M. Kjaer (2017): Derivatives Funding, Netting, and Accounting, eSSRN,
- * https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2534011.
- *
- * @author Lakshmi Krishnamurthy
- */
- public class HedgeErrorBaselProxy
- {
- private static final PrimarySecurity OvernightReplicator (
- final String currency,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double overnightReplicatorDrift = 0.0025;
- double overnightReplicatorVolatility = 0.001;
- double overnightReplicatorRepo = 0.0;
- LatentStateLabel overnightLabel = OvernightLabel.Create (currency);
- latentStateLabelList.add (overnightLabel);
- return new PrimarySecurity (
- currency + "_OVERNIGHT",
- overnightLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- overnightReplicatorDrift,
- overnightReplicatorVolatility
- )
- ),
- overnightReplicatorRepo
- );
- }
- private static final PrimarySecurity CSAReplicator (
- final String currency,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double csaReplicatorDrift = 0.01;
- double csaReplicatorVolatility = 0.002;
- double csaReplicatorRepo = 0.005;
- LatentStateLabel csaLabel = CSALabel.ISDA (currency);
- latentStateLabelList.add (csaLabel);
- return new PrimarySecurity (
- currency + "_CSA",
- csaLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- csaReplicatorDrift,
- csaReplicatorVolatility
- )
- ),
- csaReplicatorRepo
- );
- }
- private static final PrimarySecurity DealerSeniorFundingReplicator (
- final String currency,
- final String dealer,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double dealerSeniorFundingReplicatorDrift = 0.03;
- double dealerSeniorFundingReplicatorVolatility = 0.002;
- double dealerSeniorFundingReplicatorRepo = 0.028;
- LatentStateLabel dealerSeniorFundingLabel = EntityFundingLabel.Senior (
- dealer,
- currency
- );
- latentStateLabelList.add (dealerSeniorFundingLabel);
- return new PrimarySecurity (
- dealer + "_" + currency + "_SENIOR_ZERO",
- dealerSeniorFundingLabel,
- new JumpDiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- dealerSeniorFundingReplicatorDrift,
- dealerSeniorFundingReplicatorVolatility
- ),
- HazardJumpEvaluator.Standard (
- 0.3,
- 0.45
- )
- ),
- dealerSeniorFundingReplicatorRepo
- );
- }
- private static final PrimarySecurity DealerSubordinateFundingReplicator (
- final String currency,
- final String dealer,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double dealerSubordinateFundingReplicatorDrift = 0.045;
- double dealerSubordinateFundingReplicatorVolatility = 0.002;
- double dealerSubordinateFundingReplicatorRepo = 0.028;
- LatentStateLabel dealerSubordinateFundingLabel = EntityFundingLabel.Subordinate (
- dealer,
- currency
- );
- latentStateLabelList.add (dealerSubordinateFundingLabel);
- return new PrimarySecurity (
- dealer + "_" + currency + "_SUBORDINATE_ZERO",
- dealerSubordinateFundingLabel,
- new JumpDiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- dealerSubordinateFundingReplicatorDrift,
- dealerSubordinateFundingReplicatorVolatility
- ),
- HazardJumpEvaluator.Standard (
- 0.3,
- 0.25
- )
- ),
- dealerSubordinateFundingReplicatorRepo
- );
- }
- private static final PrimarySecurity ClientFundingReplicator (
- final String currency,
- final String client,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double clientFundingReplicatorDrift = 0.03;
- double clientFundingReplicatorVolatility = 0.003;
- double clientFundingReplicatorRepo = 0.028;
- LatentStateLabel clientFundingLabel = EntityFundingLabel.Senior (
- client,
- currency
- );
- latentStateLabelList.add (clientFundingLabel);
- return new PrimarySecurity (
- client + "_" + currency + "_SENIOR_ZERO",
- clientFundingLabel,
- new JumpDiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- clientFundingReplicatorDrift,
- clientFundingReplicatorVolatility
- ),
- HazardJumpEvaluator.Standard (
- 0.5,
- 0.30
- )
- ),
- clientFundingReplicatorRepo
- );
- }
- private static final TerminalLatentState DealerHazard (
- final String currency,
- final String dealer,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double dealerHazardDrift = 0.0002;
- double dealerHazardVolatility = 0.02;
- LatentStateLabel dealerHazardLabel = EntityHazardLabel.Standard (
- dealer,
- currency
- );
- latentStateLabelList.add (dealerHazardLabel);
- return new TerminalLatentState (
- dealerHazardLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- dealerHazardDrift,
- dealerHazardVolatility
- )
- )
- );
- }
- private static final TerminalLatentState DealerSeniorRecovery (
- final String currency,
- final String dealer,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double dealerSeniorRecoveryDrift = 0.0002;
- double dealerSeniorRecoveryVolatility = 0.02;
- LatentStateLabel dealerSeniorRecoveryLabel = EntityRecoveryLabel.Senior (
- dealer,
- currency
- );
- latentStateLabelList.add (dealerSeniorRecoveryLabel);
- return new TerminalLatentState (
- dealerSeniorRecoveryLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- dealerSeniorRecoveryDrift,
- dealerSeniorRecoveryVolatility
- )
- )
- );
- }
- private static final TerminalLatentState DealerSubordinateRecovery (
- final String currency,
- final String dealer,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double dealerSubordinateRecoveryDrift = 0.0002;
- double dealerSubordinateRecoveryVolatility = 0.02;
- LatentStateLabel dealerSubordinateRecoveryLabel = EntityRecoveryLabel.Subordinate (
- dealer,
- currency
- );
- latentStateLabelList.add (dealerSubordinateRecoveryLabel);
- return new TerminalLatentState (
- dealerSubordinateRecoveryLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- dealerSubordinateRecoveryDrift,
- dealerSubordinateRecoveryVolatility
- )
- )
- );
- }
- private static final TerminalLatentState ClientHazard (
- final String currency,
- final String client,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double clientHazardDrift = 0.0002;
- double clientHazardVolatility = 0.02;
- LatentStateLabel clientHazardLabel = EntityHazardLabel.Standard (
- client,
- currency
- );
- latentStateLabelList.add (clientHazardLabel);
- return new TerminalLatentState (
- clientHazardLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- clientHazardDrift,
- clientHazardVolatility
- )
- )
- );
- }
- private static final TerminalLatentState ClientRecovery (
- final String currency,
- final String client,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double clientRecoveryDrift = 0.0002;
- double clientRecoveryVolatility = 0.02;
- LatentStateLabel clientRecoveryLabel = EntityRecoveryLabel.Senior (
- client,
- currency
- );
- latentStateLabelList.add (clientRecoveryLabel);
- return new TerminalLatentState (
- clientRecoveryLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLogarithmic.Standard (
- clientRecoveryDrift,
- clientRecoveryVolatility
- )
- )
- );
- }
- private static final EntityDynamicsContainer EntityEvolver (
- final String currency,
- final String dealer,
- final String client,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- return new EntityDynamicsContainer (
- DealerHazard (
- currency,
- dealer,
- latentStateLabelList
- ),
- DealerSeniorRecovery (
- currency,
- dealer,
- latentStateLabelList
- ),
- DealerSubordinateRecovery (
- currency,
- dealer,
- latentStateLabelList
- ),
- ClientHazard (
- currency,
- client,
- latentStateLabelList
- ),
- ClientRecovery (
- currency,
- client,
- latentStateLabelList
- )
- );
- }
- private static final PrimarySecurityDynamicsContainer PrimarySecurityEvolver (
- final String currency,
- final String dealer,
- final String client,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- return new PrimarySecurityDynamicsContainer (
- null,
- OvernightReplicator (
- currency,
- latentStateLabelList
- ),
- CSAReplicator (
- currency,
- latentStateLabelList
- ),
- DealerSeniorFundingReplicator (
- currency,
- dealer,
- latentStateLabelList
- ),
- DealerSubordinateFundingReplicator (
- currency,
- dealer,
- latentStateLabelList
- ),
- ClientFundingReplicator (
- currency,
- client,
- latentStateLabelList
- )
- );
- }
- private static final LatentStateDynamicsContainer LatentStateEvolver (
- final OTCFixFloatLabel otcFixFloatLabel,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- double otcFixFloatNumeraireDrift = 0.0;
- double otcFixFloatNumeraireVolatility = 0.25;
- latentStateLabelList.add (otcFixFloatLabel);
- LatentStateDynamicsContainer latentStateDynamicsContainer = new LatentStateDynamicsContainer();
- latentStateDynamicsContainer.addOTCFixFloat (
- new TerminalLatentState (
- otcFixFloatLabel,
- new DiffusionEvolver (
- DiffusionEvaluatorLinear.Standard (
- otcFixFloatNumeraireDrift,
- otcFixFloatNumeraireVolatility
- )
- )
- )
- );
- return latentStateDynamicsContainer;
- }
- private static final MarketVertexGenerator ConstructMarketVertexGenerator (
- final JulianDate spotDate,
- final String exposureSamplingTenor,
- final int exposureSamplingNodeCount,
- final String currency,
- final String dealer,
- final String client,
- final OTCFixFloatLabel otcFixFloatLabel,
- final List<LatentStateLabel> latentStateLabelList)
- throws Exception
- {
- JulianDate terminationDate = spotDate;
- int[] eventVertexArray = new int[exposureSamplingNodeCount];
- for (int i = 0; i < exposureSamplingNodeCount; ++i)
- {
- terminationDate = terminationDate.addTenor (exposureSamplingTenor);
- eventVertexArray[i] = terminationDate.julian();
- }
- return new MarketVertexGenerator (
- spotDate.julian(),
- eventVertexArray,
- EntityEvolver (
- currency,
- dealer,
- client,
- latentStateLabelList
- ),
- PrimarySecurityEvolver (
- currency,
- dealer,
- client,
- latentStateLabelList
- ),
- LatentStateEvolver (
- otcFixFloatLabel,
- latentStateLabelList
- )
- );
- }
- private static final void ThinStatistics (
- final String header,
- final JulianDate[] vertexDateArray,
- final UnivariateDiscreteThin[] thinStatisticsArray)
- throws Exception
- {
- System.out.println ("\t|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|");
- System.out.println (header);
- System.out.println ("\t|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|");
- String statisticsDump = "\t| DATE =>" ;
- for (int i = 0; i < vertexDateArray.length; ++i)
- {
- statisticsDump = statisticsDump + " " + vertexDateArray[i] + " |";
- }
- System.out.println (statisticsDump);
- System.out.println ("\t|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|");
- statisticsDump = "\t| AVERAGE =>";
- for (int j = 0; j < thinStatisticsArray.length; ++j)
- {
- statisticsDump = statisticsDump + " " + FormatUtil.FormatDouble (thinStatisticsArray[j].average(), 2, 4, 1.) + " |";
- }
- System.out.println (statisticsDump);
- statisticsDump = "\t| MAXIMUM =>";
- for (int j = 0; j < thinStatisticsArray.length; ++j)
- {
- statisticsDump = statisticsDump + " " + FormatUtil.FormatDouble (thinStatisticsArray[j].maximum(), 2, 4, 1.) + " |";
- }
- System.out.println (statisticsDump);
- statisticsDump = "\t| MINIMUM =>";
- for (int j = 0; j < thinStatisticsArray.length; ++j)
- {
- statisticsDump = statisticsDump + " " + FormatUtil.FormatDouble (thinStatisticsArray[j].minimum(), 2, 4, 1.) + " |";
- }
- System.out.println (statisticsDump);
- statisticsDump = "\t| ERROR =>";
- for (int j = 0; j < thinStatisticsArray.length; ++j)
- {
- statisticsDump = statisticsDump + " " + FormatUtil.FormatDouble (thinStatisticsArray[j].error(), 2, 4, 1.) + " |";
- }
- System.out.println (statisticsDump);
- System.out.println ("\t|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|");
- }
- private static final void ThinStatistics (
- final String header,
- final UnivariateDiscreteThin thinStatistics)
- throws Exception
- {
- System.out.println (
- header +
- FormatUtil.FormatDouble (thinStatistics.average(), 3, 2, 100.) + "% | " +
- FormatUtil.FormatDouble (thinStatistics.maximum(), 3, 2, 100.) + "% | " +
- FormatUtil.FormatDouble (thinStatistics.minimum(), 3, 2, 100.) + "% | " +
- FormatUtil.FormatDouble (thinStatistics.error(), 3, 2, 100.) + "% ||"
- );
- }
- public static final void main (
- final String[] argumentArray)
- throws Exception
- {
- EnvManager.InitEnv (
- "",
- true
- );
- String dealer = "CITI";
- String client = "AIG";
- String currency = "USD";
- double dealerVMThreshold = -0.1;
- double clientVMThreshold = 0.1;
- /*
- * Evolution Control
- */
- int pathCount = 60000;
- int exposureSamplingNodeCount = 10;
- String exposureSamplingTenor = "6M";
- double[][] correlationMatrix = new double[][] {
- {1.00, 0.00, 0.00, 0.20, 0.15, 0.05, 0.00, 0.00, 0.00, 0.00, 0.00}, // #0 DEALER HAZARD
- {0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}, // #1 DEALER SENIOR RECOVERY
- {0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}, // #2 DEALER SUBORDINATE RECOVERY
- {0.20, 0.00, 0.00, 1.00, 0.13, 0.25, 0.00, 0.00, 0.00, 0.00, 0.00}, // #3 CLIENT HAZARD
- {0.15, 0.00, 0.00, 0.13, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}, // #4 CLIENT RECOVERY
- {0.05, 0.00, 0.25, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00}, // #5 OVERNIGHT REPLICATOR
- {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00}, // #6 CSA REPLICATOR
- {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00}, // #7 DEALER SENIOR FUNDING REPLICATOR
- {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00}, // #8 DEALER SUBORDINATE FUNDING REPLICATOR
- {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00}, // #9 CLIENT FUNDING REPLICATOR
- {0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00}, // #10 OTC FIX FLOAT REPLICATOR
- };
- JulianDate spotDate = DateUtil.Today();
- OTCFixFloatLabel otcFixFloatLabel = OTCFixFloatLabel.Standard (currency + "-3M-10Y");
- JulianDate terminationDate = spotDate;
- PathExposureAdjustment[] pathExposureAdjustmentArray = new PathExposureAdjustment[pathCount];
- for (int i = 0; i < exposureSamplingNodeCount; ++i)
- {
- terminationDate = terminationDate.addTenor (exposureSamplingTenor);
- }
- final int maturityDate = terminationDate.julian();
- List<LatentStateLabel> latentStateLabelList = new ArrayList<LatentStateLabel>();
- PathSimulator fixFloatPathSimulator = new PathSimulator (
- pathCount,
- ConstructMarketVertexGenerator (
- spotDate,
- exposureSamplingTenor,
- exposureSamplingNodeCount,
- currency,
- dealer,
- client,
- otcFixFloatLabel,
- latentStateLabelList
- ),
- AdjustmentDigestScheme.ALBANESE_ANDERSEN_METRICS_POINTER,
- PositionGroupContainer.Solo (
- new PositionGroup (
- new PositionSchemaSpecification (
- "POSGRPSPEC1",
- "POSGRPSPEC1",
- PositionGroupSpecification.FixedThreshold (
- "FIXEDTHRESHOLD",
- clientVMThreshold,
- dealerVMThreshold,
- PositionReplicationScheme.BURGARD_KJAER_HEDGE_ERROR_DUAL_BOND_VERTEX,
- BrokenDateScheme.SQUARE_ROOT_OF_TIME,
- 0.,
- CloseOutScheme.BILATERAL
- ),
- new CollateralGroupSpecification (
- StringUtil.GUID(),
- "FIXEDTHRESHOLD",
- OvernightLabel.Create (currency),
- CSALabel.ISDA (currency)
- ),
- new CreditDebtGroupSpecification (
- "NETGRPSPEC1",
- "NETGRPSPEC1",
- EntityHazardLabel.Standard (
- dealer,
- currency
- ),
- EntityHazardLabel.Standard (
- client,
- currency
- ),
- EntityRecoveryLabel.Senior (
- dealer,
- currency
- ),
- EntityRecoveryLabel.Senior (
- client,
- currency
- ),
- EntityRecoveryLabel.Subordinate (
- dealer,
- currency
- ),
- true,
- true
- ),
- new FundingGroupSpecification (
- "FUNDGRPSPEC1",
- "FUNDGRPSPEC1",
- EntityFundingLabel.Senior (
- dealer,
- currency
- ),
- EntityFundingLabel.Senior (
- client,
- currency
- ),
- EntityFundingLabel.Subordinate (
- dealer,
- currency
- )
- )
- ),
- new FixFloatBaselPositionEstimator (
- maturityDate,
- otcFixFloatLabel
- )
- )
- )
- );
- LatentStateVertexContainer latentStateVertexContainer = new LatentStateVertexContainer();
- latentStateVertexContainer.add (
- otcFixFloatLabel,
- 0.
- );
- MarketVertex initialMarketVertex = MarketVertex.Epochal (
- spotDate,
- 1.000, // dblOvernightNumeraireInitial
- 1.000, // dblCSANumeraire
- 0.015, // dblBankHazardRate
- 0.400, // dblBankRecoveryRate
- 0.015 / (1 - 0.40), // dblBankFundingSpread
- 0.250, // dblBankRecoveryRate
- 0.015 / (1 - 0.25), // dblBankFundingSpread
- 0.030, // dblCounterPartyHazardRate
- 0.300, // dblCounterPartyRecoveryRate
- 0.030 / (1 - 0.30), // dblCounterPartyFundingSpread
- latentStateVertexContainer
- );
- CorrelatedPathVertexDimension correlatedPathVertexDimension = new CorrelatedPathVertexDimension (
- new RandomNumberGenerator(),
- correlationMatrix,
- exposureSamplingNodeCount,
- 1,
- true,
- null
- );
- for (int i = 0; i < pathCount; ++i)
- {
- pathExposureAdjustmentArray[i] = fixFloatPathSimulator.singleTrajectory (
- initialMarketVertex,
- LatentStateWeiner.FromUnitRandom (
- latentStateLabelList,
- Matrix.Transpose (correlatedPathVertexDimension.straightPathVertexRd().flatform())
- )
- );
- }
- ExposureAdjustmentAggregator exposureAdjustmentAggregator = new ExposureAdjustmentAggregator
- (pathExposureAdjustmentArray);
- ExposureAdjustmentDigest exposureAdjustmentDigest = exposureAdjustmentAggregator.digest();
- System.out.println();
- ThinStatistics (
- "\t| COLLATERALIZED EXPOSURE |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.collateralizedExposure()
- );
- ThinStatistics (
- "\t| UNCOLLATERALIZED EXPOSURE |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.uncollateralizedExposure()
- );
- ThinStatistics (
- "\t| COLLATERALIZED EXPOSURE PV |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.collateralizedExposurePV()
- );
- ThinStatistics (
- "\t| UNCOLLATERALIZED EXPOSURE PV |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.uncollateralizedExposurePV()
- );
- ThinStatistics (
- "\t| COLLATERALIZED POSITIVE EXPOSURE PV |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.collateralizedPositiveExposurePV()
- );
- ThinStatistics (
- "\t| UNCOLLATERALIZED POSITIVE EXPOSURE PV |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.uncollateralizedPositiveExposurePV()
- );
- ThinStatistics (
- "\t| COLLATERALIZED NEGATIVE EXPOSURE PV |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.collateralizedNegativeExposurePV()
- );
- ThinStatistics (
- "\t| UNCOLLATERALIZED NEGATIVE EXPOSURE PV |",
- exposureAdjustmentAggregator.vertexDates(),
- exposureAdjustmentDigest.uncollateralizedNegativeExposurePV()
- );
- System.out.println();
- System.out.println ("\t||-----------------------------------------------------||");
- System.out.println ("\t|| UCVA CVA FTDCVA DVA FCA UNIVARIATE THIN STATISTICS ||");
- System.out.println ("\t||-----------------------------------------------------||");
- System.out.println ("\t|| L -> R: ||");
- System.out.println ("\t|| - Path Average ||");
- System.out.println ("\t|| - Path Maximum ||");
- System.out.println ("\t|| - Path Minimum ||");
- System.out.println ("\t|| - Monte Carlo Error ||");
- System.out.println ("\t||-----------------------------------------------------||");
- ThinStatistics (
- "\t|| UCVA => ",
- exposureAdjustmentDigest.ucva()
- );
- ThinStatistics (
- "\t|| FTDCVA => ",
- exposureAdjustmentDigest.ftdcva()
- );
- ThinStatistics (
- "\t|| CVA => ",
- exposureAdjustmentDigest.cva()
- );
- ThinStatistics (
- "\t|| CVACL => ",
- exposureAdjustmentDigest.cvacl()
- );
- ThinStatistics (
- "\t|| DVA => ",
- exposureAdjustmentDigest.dva()
- );
- ThinStatistics (
- "\t|| FVA => ",
- exposureAdjustmentDigest.fva()
- );
- ThinStatistics (
- "\t|| FDA => ",
- exposureAdjustmentDigest.fda()
- );
- ThinStatistics (
- "\t|| FCA => ",
- exposureAdjustmentDigest.fca()
- );
- ThinStatistics (
- "\t|| FBA => ",
- exposureAdjustmentDigest.fba()
- );
- ThinStatistics (
- "\t|| SFVA => ",
- exposureAdjustmentDigest.sfva()
- );
- System.out.println ("\t||-----------------------------------------------------||");
- ThinStatistics (
- "\t|| Total => ",
- exposureAdjustmentDigest.totalVA()
- );
- System.out.println ("\t||-----------------------------------------------------||");
- EnvManager.TerminateEnv();
- }
- }