BondReplicator.java
- package org.drip.service.scenario;
- /*
- * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- */
- /*!
- * Copyright (C) 2020 Lakshmi Krishnamurthy
- * Copyright (C) 2019 Lakshmi Krishnamurthy
- * Copyright (C) 2018 Lakshmi Krishnamurthy
- * Copyright (C) 2017 Lakshmi Krishnamurthy
- *
- * This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics,
- * asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment
- * analytics, and portfolio construction analytics within and across fixed income, credit, commodity,
- * equity, FX, and structured products. It also includes auxiliary libraries for algorithm support,
- * numerical analysis, numerical optimization, spline builder, model validation, statistical learning,
- * and computational support.
- *
- * https://lakshmidrip.github.io/DROP/
- *
- * DROP is composed of three modules:
- *
- * - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/
- * - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/
- * - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/
- *
- * DROP Product Core implements libraries for the following:
- * - Fixed Income Analytics
- * - Loan Analytics
- * - Transaction Cost Analytics
- *
- * DROP Portfolio Core implements libraries for the following:
- * - Asset Allocation Analytics
- * - Asset Liability Management Analytics
- * - Capital Estimation Analytics
- * - Exposure Analytics
- * - Margin Analytics
- * - XVA Analytics
- *
- * DROP Computational Core implements libraries for the following:
- * - Algorithm Support
- * - Computation Support
- * - Function Analysis
- * - Model Validation
- * - Numerical Analysis
- * - Numerical Optimizer
- * - Spline Builder
- * - Statistical Learning
- *
- * Documentation for DROP is Spread Over:
- *
- * - Main => https://lakshmidrip.github.io/DROP/
- * - Wiki => https://github.com/lakshmiDRIP/DROP/wiki
- * - GitHub => https://github.com/lakshmiDRIP/DROP
- * - Repo Layout Taxonomy => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md
- * - Javadoc => https://lakshmidrip.github.io/DROP/Javadoc/index.html
- * - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal
- * - Release Versions => https://lakshmidrip.github.io/DROP/version.html
- * - Community Credits => https://lakshmidrip.github.io/DROP/credits.html
- * - Issues Catalog => https://github.com/lakshmiDRIP/DROP/issues
- * - JUnit => https://lakshmidrip.github.io/DROP/junit/index.html
- * - Jacoco => https://lakshmidrip.github.io/DROP/jacoco/index.html
- *
- * 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.
- */
- /**
- * <i>BondReplicator</i> generates a Target Set of Sensitivity and Relative Value Runs.
- *
- * <br><br>
- * <ul>
- * <li><b>Module </b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationalCore.md">Computational Core Module</a></li>
- * <li><b>Library</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/ComputationSupportLibrary.md">Computation Support</a></li>
- * <li><b>Project</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/service/README.md">Environment, Product/Definition Containers, and Scenario/State Manipulation APIs</a></li>
- * <li><b>Package</b> = <a href = "https://github.com/lakshmiDRIP/DROP/tree/master/src/main/java/org/drip/service/scenario/README.md">Custom Scenario Service Metric Generator</a></li>
- * </ul>
- * <br><br>
- *
- * @author Lakshmi Krishnamurthy
- */
- public class BondReplicator
- {
- /**
- * Subordinate Corporate Recovery Rate
- */
- public static final double CORPORATE_SUBORDINATE_RECOVERY_RATE = 0.20;
- /**
- * Senior Corporate Recovery Rate
- */
- public static final double CORPORATE_SENIOR_RECOVERY_RATE = 0.40;
- /**
- * Loan Corporate Recovery Rate
- */
- public static final double CORPORATE_LOAN_RECOVERY_RATE = 0.70;
- private int _iSettleLag = -1;
- private double[] _adblGovvieQuote = null;
- private double[] _adblCreditQuote = null;
- private double[] _adblDepositQuote = null;
- private double[] _adblFuturesQuote = null;
- private double[] _adblFixFloatQuote = null;
- private double _dblFX = java.lang.Double.NaN;
- private java.lang.String _strGovvieCode = "";
- private boolean _bMarketPriceCreditMetrics = false;
- private java.lang.String[] _astrCreditTenor = null;
- private java.lang.String[] _astrGovvieTenor = null;
- private double _dblTenorBump = java.lang.Double.NaN;
- private java.lang.String[] _astrDepositTenor = null;
- private java.lang.String[] _astrFixFloatTenor = null;
- private double _dblIssuePrice = java.lang.Double.NaN;
- private double _dblIssueAmount = java.lang.Double.NaN;
- private double _dblZSpreadBump = java.lang.Double.NaN;
- private double _dblCurrentPrice = java.lang.Double.NaN;
- private double _dblRecoveryRate = java.lang.Double.NaN;
- private double _dblCustomYieldBump = java.lang.Double.NaN;
- private org.drip.analytics.date.JulianDate _dtValue = null;
- private org.drip.product.credit.BondComponent _bond = null;
- private double _dblCustomCreditBasisBump = java.lang.Double.NaN;
- private double _dblSpreadDurationMultiplier = java.lang.Double.NaN;
- private double _dblLogNormalVolatility = 0.1;
- private double _dblResetRate = java.lang.Double.NaN;
- private int _iResetDate = java.lang.Integer.MIN_VALUE;
- private org.drip.analytics.date.JulianDate _dtSettle = null;
- private org.drip.param.valuation.ValuationParams _valParams = null;
- private org.drip.service.scenario.EOSMetricsReplicator _emr = null;
- private org.drip.param.market.CurveSurfaceQuoteContainer _csqcCreditBase = null;
- private org.drip.param.market.CurveSurfaceQuoteContainer _csqcCredit01Up = null;
- private org.drip.param.market.CurveSurfaceQuoteContainer _csqcFundingBase = null;
- private org.drip.param.market.CurveSurfaceQuoteContainer _csqcFunding01Up = null;
- private org.drip.param.market.CurveSurfaceQuoteContainer _csqcFundingEuroDollar = null;
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCCredit = null;
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCGovvieUp = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCGovvieDown = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCFundingUp = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCFundingDown = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCForwardFundingUp = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- private java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- _mapCSQCForwardFundingDown = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- /**
- * Generate a Standard Subordinate Corporate BondReplicator Instance
- *
- * @param dblCurrentPrice Current Price
- * @param dblIssuePrice Issue Price
- * @param dblIssueAmount Issue Amount
- * @param dtSpot Spot Date
- * @param astrDepositTenor Array of Deposit Tenors
- * @param adblDepositQuote Array of Deposit Quotes
- * @param adblFuturesQuote Array of Futures Quotes
- * @param astrFixFloatTenor Array of Fix-Float Tenors
- * @param adblFixFloatQuote Array of Fix-Float Quotes
- * @param dblSpreadBump Yield/Spread Bump
- * @param dblSpreadDurationMultiplier Spread Duration Multiplier
- * @param strGovvieCode Govvie Code
- * @param astrGovvieTenor Array of Govvie Tenor
- * @param adblGovvieQuote Array of Govvie Quotes
- * @param astrCreditTenor Array of Credit Tenors
- * @param adblCreditQuote Array of Credit Quotes
- * @param dblFX FX Rate Applicable
- * @param dblResetRate Reset Rate Applicable
- * @param iSettleLag Settlement Lag
- * @param bond Bond Component Instance
- *
- * @return The Standard Subordinate BondReplicator Instance
- */
- public static final BondReplicator CorporateSubordinate (
- final double dblCurrentPrice,
- final double dblIssuePrice,
- final double dblIssueAmount,
- final org.drip.analytics.date.JulianDate dtSpot,
- final java.lang.String[] astrDepositTenor,
- final double[] adblDepositQuote,
- final double[] adblFuturesQuote,
- final java.lang.String[] astrFixFloatTenor,
- final double[] adblFixFloatQuote,
- final double dblSpreadBump,
- final double dblSpreadDurationMultiplier,
- final java.lang.String strGovvieCode,
- final java.lang.String[] astrGovvieTenor,
- final double[] adblGovvieQuote,
- final java.lang.String[] astrCreditTenor,
- final double[] adblCreditQuote,
- final double dblFX,
- final double dblResetRate,
- final int iSettleLag,
- final org.drip.product.credit.BondComponent bond)
- {
- try {
- return new BondReplicator (
- dblCurrentPrice,
- dblIssuePrice,
- dblIssueAmount,
- dtSpot,
- astrDepositTenor,
- adblDepositQuote,
- adblFuturesQuote,
- astrFixFloatTenor,
- adblFixFloatQuote,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadDurationMultiplier,
- strGovvieCode,
- astrGovvieTenor,
- adblGovvieQuote,
- true,
- astrCreditTenor,
- adblCreditQuote,
- dblFX,
- dblResetRate,
- iSettleLag,
- CORPORATE_SUBORDINATE_RECOVERY_RATE,
- bond
- );
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * Generate a Standard Senior Corporate BondReplicator Instance
- *
- * @param dblCurrentPrice Current Price
- * @param dblIssuePrice Issue Price
- * @param dblIssueAmount Issue Amount
- * @param dtSpot Spot Date
- * @param astrDepositTenor Array of Deposit Tenors
- * @param adblDepositQuote Array of Deposit Quotes
- * @param adblFuturesQuote Array of Futures Quotes
- * @param astrFixFloatTenor Array of Fix-Float Tenors
- * @param adblFixFloatQuote Array of Fix-Float Quotes
- * @param dblSpreadBump Yield/Spread Bump
- * @param dblSpreadDurationMultiplier Spread Duration Multiplier
- * @param strGovvieCode Govvie Code
- * @param astrGovvieTenor Array of Govvie Tenor
- * @param adblGovvieQuote Array of Govvie Quotes
- * @param astrCreditTenor Array of Credit Tenors
- * @param adblCreditQuote Array of Credit Quotes
- * @param dblFX FX Rate Applicable
- * @param dblResetRate Reset Rate Applicable
- * @param iSettleLag Settlement Lag
- * @param bond Bond Component Instance
- *
- * @return The Standard Senior BondReplicator Instance
- */
- public static final BondReplicator CorporateSenior (
- final double dblCurrentPrice,
- final double dblIssuePrice,
- final double dblIssueAmount,
- final org.drip.analytics.date.JulianDate dtSpot,
- final java.lang.String[] astrDepositTenor,
- final double[] adblDepositQuote,
- final double[] adblFuturesQuote,
- final java.lang.String[] astrFixFloatTenor,
- final double[] adblFixFloatQuote,
- final double dblSpreadBump,
- final double dblSpreadDurationMultiplier,
- final java.lang.String strGovvieCode,
- final java.lang.String[] astrGovvieTenor,
- final double[] adblGovvieQuote,
- final java.lang.String[] astrCreditTenor,
- final double[] adblCreditQuote,
- final double dblFX,
- final double dblResetRate,
- final int iSettleLag,
- final org.drip.product.credit.BondComponent bond)
- {
- try {
- return new BondReplicator (
- dblCurrentPrice,
- dblIssuePrice,
- dblIssueAmount,
- dtSpot,
- astrDepositTenor,
- adblDepositQuote,
- adblFuturesQuote,
- astrFixFloatTenor,
- adblFixFloatQuote,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadDurationMultiplier,
- strGovvieCode,
- astrGovvieTenor,
- adblGovvieQuote,
- true,
- astrCreditTenor,
- adblCreditQuote,
- dblFX,
- dblResetRate,
- iSettleLag,
- CORPORATE_SENIOR_RECOVERY_RATE,
- bond
- );
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * Generate a Standard Corporate Loan BondReplicator Instance
- *
- * @param dblCurrentPrice Current Price
- * @param dblIssuePrice Issue Price
- * @param dblIssueAmount Issue Amount
- * @param dtSpot Spot Date
- * @param astrDepositTenor Array of Deposit Tenors
- * @param adblDepositQuote Array of Deposit Quotes
- * @param adblFuturesQuote Array of Futures Quotes
- * @param astrFixFloatTenor Array of Fix-Float Tenors
- * @param adblFixFloatQuote Array of Fix-Float Quotes
- * @param dblSpreadBump Yield/Spread Bump
- * @param dblSpreadDurationMultiplier Spread Duration Multiplier
- * @param strGovvieCode Govvie Code
- * @param astrGovvieTenor Array of Govvie Tenor
- * @param adblGovvieQuote Array of Govvie Quotes
- * @param astrCreditTenor Array of Credit Tenors
- * @param adblCreditQuote Array of Credit Quotes
- * @param dblFX FX Rate Applicable
- * @param dblResetRate Reset Rate Applicable
- * @param iSettleLag Settlement Lag
- * @param bond Bond Component Instance
- *
- * @return The Standard Senior BondReplicator Instance
- */
- public static final BondReplicator CorporateLoan (
- final double dblCurrentPrice,
- final double dblIssuePrice,
- final double dblIssueAmount,
- final org.drip.analytics.date.JulianDate dtSpot,
- final java.lang.String[] astrDepositTenor,
- final double[] adblDepositQuote,
- final double[] adblFuturesQuote,
- final java.lang.String[] astrFixFloatTenor,
- final double[] adblFixFloatQuote,
- final double dblSpreadBump,
- final double dblSpreadDurationMultiplier,
- final java.lang.String strGovvieCode,
- final java.lang.String[] astrGovvieTenor,
- final double[] adblGovvieQuote,
- final java.lang.String[] astrCreditTenor,
- final double[] adblCreditQuote,
- final double dblFX,
- final double dblResetRate,
- final int iSettleLag,
- final org.drip.product.credit.BondComponent bond)
- {
- try {
- return new BondReplicator (
- dblCurrentPrice,
- dblIssuePrice,
- dblIssueAmount,
- dtSpot,
- astrDepositTenor,
- adblDepositQuote,
- adblFuturesQuote,
- astrFixFloatTenor,
- adblFixFloatQuote,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadBump,
- dblSpreadDurationMultiplier,
- strGovvieCode,
- astrGovvieTenor,
- adblGovvieQuote,
- true,
- astrCreditTenor,
- adblCreditQuote,
- dblFX,
- dblResetRate,
- iSettleLag,
- CORPORATE_LOAN_RECOVERY_RATE,
- bond
- );
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * BondReplicator Constructor
- *
- * @param dblCurrentPrice Current Price
- * @param dblIssuePrice Issue Price
- * @param dblIssueAmount Issue Amount
- * @param dtValue Value Date
- * @param astrDepositTenor Array of Deposit Tenors
- * @param adblDepositQuote Array of Deposit Quotes
- * @param adblFuturesQuote Array of Futures Quotes
- * @param astrFixFloatTenor Array of Fix-Float Tenors
- * @param adblFixFloatQuote Array of Fix-Float Quotes
- * @param dblCustomYieldBump Custom Yield Bump
- * @param dblCustomCreditBasisBump Custom Credit Basis Bump
- * @param dblZSpreadBump Z Spread Bump
- * @param dblTenorBump Tenor Bump
- * @param dblSpreadDurationMultiplier Spread Duration Multiplier
- * @param strGovvieCode Govvie Code
- * @param astrGovvieTenor Array of Govvie Tenor
- * @param adblGovvieQuote Array of Govvie Quotes
- * @param bMarketPriceCreditMetrics Generate the Credit Metrics from the Market Price
- * @param astrCreditTenor Array of Credit Tenors
- * @param adblCreditQuote Array of Credit Quotes
- * @param dblFX FX Rate Applicable
- * @param dblResetRate Reset Rate Applicable
- * @param iSettleLag Settlement Lag
- * @param dblRecoveryRate Recovery Rate
- * @param bond Bond Component Instance
- *
- * @throws java.lang.Exception Thrown if the Inputs are Invalid
- */
- public BondReplicator (
- final double dblCurrentPrice,
- final double dblIssuePrice,
- final double dblIssueAmount,
- final org.drip.analytics.date.JulianDate dtValue,
- final java.lang.String[] astrDepositTenor,
- final double[] adblDepositQuote,
- final double[] adblFuturesQuote,
- final java.lang.String[] astrFixFloatTenor,
- final double[] adblFixFloatQuote,
- final double dblCustomYieldBump,
- final double dblCustomCreditBasisBump,
- final double dblZSpreadBump,
- final double dblTenorBump,
- final double dblSpreadDurationMultiplier,
- final java.lang.String strGovvieCode,
- final java.lang.String[] astrGovvieTenor,
- final double[] adblGovvieQuote,
- final boolean bMarketPriceCreditMetrics,
- final java.lang.String[] astrCreditTenor,
- final double[] adblCreditQuote,
- final double dblFX,
- final double dblResetRate,
- final int iSettleLag,
- final double dblRecoveryRate,
- final org.drip.product.credit.BondComponent bond)
- throws java.lang.Exception
- {
- if (!org.drip.numerical.common.NumberUtil.IsValid (_dblCurrentPrice = dblCurrentPrice) ||
- !org.drip.numerical.common.NumberUtil.IsValid (_dblIssuePrice = dblIssuePrice) ||
- !org.drip.numerical.common.NumberUtil.IsValid (_dblIssueAmount = dblIssueAmount) || null ==
- (_dtValue = dtValue) || !org.drip.numerical.common.NumberUtil.IsValid (_dblFX = dblFX) || 0.
- >= _dblFX || 0 > (_iSettleLag = iSettleLag) ||
- !org.drip.numerical.common.NumberUtil.IsValid (_dblRecoveryRate = dblRecoveryRate) ||
- 0. >= _dblRecoveryRate || null == (_bond = bond))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- _dblResetRate = dblResetRate;
- _dblTenorBump = dblTenorBump;
- _strGovvieCode = strGovvieCode;
- _dblZSpreadBump = dblZSpreadBump;
- _adblCreditQuote = adblCreditQuote;
- _astrCreditTenor = astrCreditTenor;
- _adblGovvieQuote = adblGovvieQuote;
- _astrGovvieTenor = astrGovvieTenor;
- _adblDepositQuote = adblDepositQuote;
- _astrDepositTenor = astrDepositTenor;
- _adblFuturesQuote = adblFuturesQuote;
- _adblFixFloatQuote = adblFixFloatQuote;
- _astrFixFloatTenor = astrFixFloatTenor;
- _dblCustomYieldBump = dblCustomYieldBump;
- _dblCustomCreditBasisBump = dblCustomCreditBasisBump;
- _bMarketPriceCreditMetrics = bMarketPriceCreditMetrics;
- _dblSpreadDurationMultiplier = dblSpreadDurationMultiplier;
- java.lang.String strCurrency = _bond.currency();
- if (null == (_dtSettle = _dtValue.addBusDays (_iSettleLag, strCurrency)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- _valParams = new org.drip.param.valuation.ValuationParams (_dtValue, _dtSettle, strCurrency);
- org.drip.analytics.date.JulianDate dtSpot = dtValue;
- org.drip.state.discount.MergedDiscountForwardCurve mdfc =
- org.drip.service.template.LatentMarketStateBuilder.SmoothFundingCurve (dtSpot,
- strCurrency, _astrDepositTenor, _adblDepositQuote, "ForwardRate", _adblFuturesQuote,
- "ForwardRate", _astrFixFloatTenor, _adblFixFloatQuote, "SwapRate");
- if (null == mdfc) throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- org.drip.analytics.date.JulianDate[] adtSpot = org.drip.analytics.support.Helper.SpotDateArray
- (dtSpot, null == _astrGovvieTenor ? 0 : _astrGovvieTenor.length);
- org.drip.analytics.date.JulianDate[] adtMaturity = org.drip.analytics.support.Helper.FromTenor
- (dtSpot, _astrGovvieTenor);
- org.drip.state.govvie.GovvieCurve gc = org.drip.service.template.LatentMarketStateBuilder.GovvieCurve
- (_strGovvieCode, dtSpot, adtSpot, adtMaturity, _adblGovvieQuote, _adblGovvieQuote, "Yield",
- org.drip.service.template.LatentMarketStateBuilder.SHAPE_PRESERVING);
- if (null == gc) throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (_bond.isFloater()) {
- org.drip.analytics.cashflow.CompositePeriod cp = _bond.stream().containingPeriod
- (dtSpot.julian());
- if (null != cp && cp instanceof org.drip.analytics.cashflow.CompositeFloatingPeriod) {
- org.drip.analytics.cashflow.CompositeFloatingPeriod cfp =
- (org.drip.analytics.cashflow.CompositeFloatingPeriod) cp;
- _iResetDate = ((org.drip.analytics.cashflow.ComposableUnitFloatingPeriod) (cfp.periods().get
- (0))).referenceIndexPeriod().fixingDate();
- }
- }
- if (null == (_csqcFundingBase = org.drip.param.creator.MarketParamsBuilder.Create (mdfc, gc, null,
- null, null, null, null)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- org.drip.state.identifier.FloaterLabel fl = _bond.isFloater() ? _bond.floaterSetting().fri() : null;
- if (_bond.isFloater() && java.lang.Integer.MIN_VALUE != _iResetDate) {
- if (fl instanceof org.drip.state.identifier.ForwardLabel) {
- if (!_csqcFundingBase.setFixing (_iResetDate, (org.drip.state.identifier.ForwardLabel) fl,
- _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- } else if (fl instanceof org.drip.state.identifier.OTCFixFloatLabel) {
- if (!_csqcFundingBase.setFixing (_iResetDate, (org.drip.state.identifier.OTCFixFloatLabel) fl,
- _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- }
- if (null == (_csqcFunding01Up = org.drip.param.creator.MarketParamsBuilder.Create
- (org.drip.service.template.LatentMarketStateBuilder.SmoothFundingCurve (dtSpot,
- strCurrency, _astrDepositTenor, org.drip.analytics.support.Helper.ParallelNodeBump
- (_adblDepositQuote, 0.0001), "ForwardRate",
- org.drip.analytics.support.Helper.ParallelNodeBump (_adblFuturesQuote, 0.0001),
- "ForwardRate", _astrFixFloatTenor,
- org.drip.analytics.support.Helper.ParallelNodeBump (_adblFixFloatQuote,
- 0.0001), "SwapRate"), gc, null, null, null, null, null)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (_bond.isFloater() && java.lang.Integer.MIN_VALUE != _iResetDate) {
- if (fl instanceof org.drip.state.identifier.ForwardLabel) {
- if (!_csqcFunding01Up.setFixing (_iResetDate, (org.drip.state.identifier.ForwardLabel) fl,
- _dblResetRate /* + 0.0001 */))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- } else if (fl instanceof org.drip.state.identifier.OTCFixFloatLabel) {
- if (!_csqcFunding01Up.setFixing (_iResetDate, (org.drip.state.identifier.OTCFixFloatLabel) fl,
- _dblResetRate /* + 0.0001 */))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- }
- if (null == (_csqcFundingEuroDollar = org.drip.param.creator.MarketParamsBuilder.Create
- (org.drip.service.template.LatentMarketStateBuilder.SmoothFundingCurve (dtSpot,
- strCurrency, _astrDepositTenor, _adblDepositQuote, "ForwardRate", _adblFuturesQuote,
- "ForwardRate", null, null, "SwapRate"), gc, null, null, null, null, null)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (_bond.isFloater() && java.lang.Integer.MIN_VALUE != _iResetDate) {
- if (fl instanceof org.drip.state.identifier.ForwardLabel) {
- if (!_csqcFundingEuroDollar.setFixing (_iResetDate, (org.drip.state.identifier.ForwardLabel) fl,
- _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- } else if (fl instanceof org.drip.state.identifier.OTCFixFloatLabel) {
- if (!_csqcFundingEuroDollar.setFixing (_iResetDate, (org.drip.state.identifier.OTCFixFloatLabel) fl,
- _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- }
- java.util.Map<java.lang.String, org.drip.state.discount.MergedDiscountForwardCurve>
- mapTenorForwardFundingUp =
- org.drip.service.template.LatentMarketStateBuilder.BumpedForwardFundingCurve (dtSpot,
- strCurrency, _astrDepositTenor, _adblDepositQuote, "ForwardRate", _adblFuturesQuote,
- "ForwardRate", _astrFixFloatTenor, _adblFixFloatQuote, "SwapRate",
- org.drip.service.template.LatentMarketStateBuilder.SHAPE_PRESERVING, 0.0001 *
- _dblTenorBump, false);
- java.util.Map<java.lang.String, org.drip.state.discount.MergedDiscountForwardCurve>
- mapTenorForwardFundingDown =
- org.drip.service.template.LatentMarketStateBuilder.BumpedForwardFundingCurve (dtSpot,
- strCurrency, _astrDepositTenor, _adblDepositQuote, "ForwardRate", _adblFuturesQuote,
- "ForwardRate", _astrFixFloatTenor, _adblFixFloatQuote, "SwapRate",
- org.drip.service.template.LatentMarketStateBuilder.SHAPE_PRESERVING, -0.0001 *
- _dblTenorBump, false);
- if (null == mapTenorForwardFundingUp || null == mapTenorForwardFundingDown)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- for (java.util.Map.Entry<java.lang.String, org.drip.state.discount.MergedDiscountForwardCurve>
- meTenorForwardFundingUp : mapTenorForwardFundingUp.entrySet()) {
- java.lang.String strKey = meTenorForwardFundingUp.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcForwardFundingTenorUp =
- org.drip.param.creator.MarketParamsBuilder.Create (meTenorForwardFundingUp.getValue(), gc,
- null, null, null, null, null);
- org.drip.param.market.CurveSurfaceQuoteContainer csqcForwardFundingTenorDown =
- org.drip.param.creator.MarketParamsBuilder.Create (mapTenorForwardFundingDown.get (strKey),
- gc, null, null, null, null, null);
- if (null == csqcForwardFundingTenorUp || null == csqcForwardFundingTenorDown)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- _mapCSQCForwardFundingUp.put (strKey, csqcForwardFundingTenorUp);
- _mapCSQCForwardFundingDown.put (strKey, csqcForwardFundingTenorDown);
- }
- java.util.Map<java.lang.String, org.drip.state.discount.MergedDiscountForwardCurve>
- mapTenorFundingUp = org.drip.service.template.LatentMarketStateBuilder.BumpedFundingCurve
- (dtSpot, strCurrency, _astrDepositTenor, _adblDepositQuote, "ForwardRate",
- _adblFuturesQuote, "ForwardRate", _astrFixFloatTenor, _adblFixFloatQuote, "SwapRate",
- org.drip.service.template.LatentMarketStateBuilder.SMOOTH, 0.0001 *
- _dblTenorBump, false);
- java.util.Map<java.lang.String, org.drip.state.discount.MergedDiscountForwardCurve>
- mapTenorFundingDown = org.drip.service.template.LatentMarketStateBuilder.BumpedFundingCurve
- (dtSpot, strCurrency, _astrDepositTenor, _adblDepositQuote, "ForwardRate",
- _adblFuturesQuote, "ForwardRate", _astrFixFloatTenor, _adblFixFloatQuote, "SwapRate",
- org.drip.service.template.LatentMarketStateBuilder.SMOOTH, -0.0001 *
- _dblTenorBump, false);
- if (null == mapTenorFundingUp || null == mapTenorFundingDown)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- for (java.util.Map.Entry<java.lang.String, org.drip.state.discount.MergedDiscountForwardCurve>
- meTenorFundingUp : mapTenorFundingUp.entrySet()) {
- java.lang.String strKey = meTenorFundingUp.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcFundingTenorUp =
- org.drip.param.creator.MarketParamsBuilder.Create (meTenorFundingUp.getValue(), gc, null,
- null, null, null, null);
- org.drip.param.market.CurveSurfaceQuoteContainer csqcFundingTenorDown =
- org.drip.param.creator.MarketParamsBuilder.Create (mapTenorFundingDown.get (strKey), gc,
- null, null, null, null, null);
- if (null == csqcFundingTenorUp || null == csqcFundingTenorDown)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (_bond.isFloater() && java.lang.Integer.MIN_VALUE != _iResetDate) {
- if (fl instanceof org.drip.state.identifier.ForwardLabel) {
- if (!csqcFundingTenorUp.setFixing (_iResetDate, (org.drip.state.identifier.ForwardLabel)
- fl, _dblResetRate /* + 0.0001 * _dblTenorBump */))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (!csqcFundingTenorDown.setFixing (_iResetDate, (org.drip.state.identifier.ForwardLabel)
- fl, _dblResetRate /* - 0.0001 * _dblTenorBump */))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- } else if (fl instanceof org.drip.state.identifier.OTCFixFloatLabel) {
- if (!csqcFundingTenorUp.setFixing (_iResetDate,
- (org.drip.state.identifier.OTCFixFloatLabel) fl, _dblResetRate + 0.0001 *
- _dblTenorBump))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (!csqcFundingTenorDown.setFixing (_iResetDate,
- (org.drip.state.identifier.OTCFixFloatLabel) fl, _dblResetRate - 0.0001 *
- _dblTenorBump))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- }
- _mapCSQCFundingUp.put (strKey, csqcFundingTenorUp);
- _mapCSQCFundingDown.put (strKey, csqcFundingTenorDown);
- }
- java.util.Map<java.lang.String, org.drip.state.govvie.GovvieCurve> mapTenorGovvieUp =
- org.drip.service.template.LatentMarketStateBuilder.BumpedGovvieCurve (_strGovvieCode, dtSpot,
- adtSpot, adtMaturity,_adblGovvieQuote, _adblGovvieQuote, "Yield",
- org.drip.service.template.LatentMarketStateBuilder.SHAPE_PRESERVING, 0.0001 *
- _dblTenorBump, false);
- java.util.Map<java.lang.String, org.drip.state.govvie.GovvieCurve> mapTenorGovvieDown =
- org.drip.service.template.LatentMarketStateBuilder.BumpedGovvieCurve (_strGovvieCode, dtSpot,
- adtSpot, adtMaturity,_adblGovvieQuote, _adblGovvieQuote, "Yield",
- org.drip.service.template.LatentMarketStateBuilder.SHAPE_PRESERVING, -0.0001 *
- _dblTenorBump, false);
- if (null == mapTenorGovvieUp || null == mapTenorGovvieDown)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- for (java.util.Map.Entry<java.lang.String, org.drip.state.govvie.GovvieCurve> meTenorGovvieUp :
- mapTenorGovvieUp.entrySet()) {
- java.lang.String strKey = meTenorGovvieUp.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcGovvieTenorUp =
- org.drip.param.creator.MarketParamsBuilder.Create (mdfc, meTenorGovvieUp.getValue(), null,
- null, null, null, null);
- org.drip.param.market.CurveSurfaceQuoteContainer csqcGovvieTenorDown =
- org.drip.param.creator.MarketParamsBuilder.Create (mdfc, mapTenorGovvieDown.get (strKey),
- null, null, null, null, null);
- if (null == csqcGovvieTenorUp || null == csqcGovvieTenorDown)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- _mapCSQCGovvieUp.put (strKey, csqcGovvieTenorUp);
- _mapCSQCGovvieDown.put (strKey, csqcGovvieTenorDown);
- if ((_bond.isFloater() && java.lang.Integer.MIN_VALUE != _iResetDate) &&
- (!csqcGovvieTenorUp.setFixing (_iResetDate, fl, _dblResetRate) ||
- !csqcGovvieTenorDown.setFixing (_iResetDate, fl, _dblResetRate)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- org.drip.state.identifier.EntityCDSLabel cl = _bond.creditLabel();
- java.lang.String strReferenceEntity = null != cl ? cl.referenceEntity() : null;
- if (null == strReferenceEntity) return;
- if (!_bMarketPriceCreditMetrics) {
- if (null == (_csqcCreditBase = org.drip.param.creator.MarketParamsBuilder.Create (mdfc, gc,
- org.drip.service.template.LatentMarketStateBuilder.CreditCurve (dtSpot, strReferenceEntity,
- _astrCreditTenor, _adblCreditQuote, _adblCreditQuote, "FairPremium", mdfc), null, null,
- null, null)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (_bond.isFloater() && !_csqcCreditBase.setFixing (_iResetDate,
- (org.drip.state.identifier.ForwardLabel) fl, _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (null == (_csqcCredit01Up = org.drip.param.creator.MarketParamsBuilder.Create (mdfc, gc,
- org.drip.service.template.LatentMarketStateBuilder.CreditCurve (dtSpot, strReferenceEntity,
- _astrCreditTenor, _adblCreditQuote, org.drip.analytics.support.Helper.ParallelNodeBump
- (_adblCreditQuote, _dblTenorBump), "FairPremium", mdfc), null, null, null, null)))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- if (_bond.isFloater() && !_csqcCredit01Up.setFixing (_iResetDate, fl, _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- java.util.Map<java.lang.String, org.drip.state.credit.CreditCurve> mapTenorCredit =
- org.drip.service.template.LatentMarketStateBuilder.BumpedCreditCurve (dtSpot,
- strReferenceEntity, _astrCreditTenor, _adblCreditQuote, _adblCreditQuote, "FairPremium",
- mdfc, _dblTenorBump, false);
- if (null == mapTenorCredit)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- _mapCSQCCredit = new
- org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.param.market.CurveSurfaceQuoteContainer>();
- for (java.util.Map.Entry<java.lang.String, org.drip.state.credit.CreditCurve> meTenorCredit :
- mapTenorCredit.entrySet()) {
- org.drip.param.market.CurveSurfaceQuoteContainer csqcCreditTenor =
- org.drip.param.creator.MarketParamsBuilder.Create (mdfc, gc, meTenorCredit.getValue(),
- null, null, null, null);
- if (null == csqcCreditTenor)
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- _mapCSQCCredit.put (meTenorCredit.getKey(), csqcCreditTenor);
- if (_bond.isFloater() && !csqcCreditTenor.setFixing (_iResetDate, fl, _dblResetRate))
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- } else {
- org.drip.state.credit.CreditCurve ccBase =
- org.drip.state.creator.ScenarioCreditCurveBuilder.Custom (strReferenceEntity, dtSpot, new
- org.drip.product.definition.CalibratableComponent[] {bond}, mdfc, new double[]
- {_dblCurrentPrice}, new java.lang.String[] {"Price"}, _dblRecoveryRate, false, new
- org.drip.param.definition.CalibrationParams ("Price", 0,
- _bond.exerciseYieldFromPrice (_valParams, _csqcFundingBase, null,
- _dblCurrentPrice)));
- if (null == ccBase || null == (_csqcCreditBase =
- org.drip.param.creator.MarketParamsBuilder.Create (mdfc, gc, ccBase, null, null, null,
- null)))
- return;
- if (_bond.isFloater())
- {
- if (null != fl && org.drip.numerical.common.NumberUtil.IsValid (_dblResetRate))
- {
- if (fl instanceof org.drip.state.identifier.ForwardLabel)
- {
- if (!_csqcCreditBase.setFixing (_iResetDate, (org.drip.state.identifier.ForwardLabel)
- fl, _dblResetRate))
- {
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- } else if (fl instanceof org.drip.state.identifier.OTCFixFloatLabel)
- {
- if (!_csqcCreditBase.setFixing (_iResetDate,
- (org.drip.state.identifier.OTCFixFloatLabel) fl, _dblResetRate))
- {
- throw new java.lang.Exception ("BondReplicator Constructor => Invalid Inputs");
- }
- }
- }
- }
- _csqcCredit01Up = org.drip.param.creator.MarketParamsBuilder.Create (mdfc, gc,
- org.drip.state.creator.ScenarioCreditCurveBuilder.FlatHazard (dtSpot.julian(),
- strReferenceEntity, strCurrency, ccBase.hazard (bond.maturityDate()) + 0.0001,
- _dblRecoveryRate), null, null, null, null);
- }
- _emr = !_bond.callable() && _bond.putable() ? null :
- org.drip.service.scenario.EOSMetricsReplicator.Standard (
- _bond,
- _valParams,
- _csqcFundingBase,
- new org.drip.state.sequence.GovvieBuilderSettings (
- dtSpot,
- _strGovvieCode,
- _astrGovvieTenor,
- _adblGovvieQuote,
- _adblGovvieQuote
- ),
- _dblLogNormalVolatility,
- _dblCurrentPrice
- );
- }
- /**
- * Retrieve the Bond Current Market Price
- *
- * @return The Bond Current Market Price
- */
- public double currentPrice()
- {
- return _dblCurrentPrice;
- }
- /**
- * Retrieve the Bond Issue Price
- *
- * @return The Bond Issue Price
- */
- public double issuePrice()
- {
- return _dblIssuePrice;
- }
- /**
- * Retrieve the Bond Issue Amount
- *
- * @return The Bond Issue Amount
- */
- public double issueAmount()
- {
- return _dblIssueAmount;
- }
- /**
- * Retrieve the Value Date
- *
- * @return The Value Date
- */
- public org.drip.analytics.date.JulianDate valueDate()
- {
- return _dtValue;
- }
- /**
- * Retrieve the Array of Deposit Instrument Maturity Tenors
- *
- * @return The Array of Deposit Instrument Maturity Tenors
- */
- public java.lang.String[] depositTenor()
- {
- return _astrDepositTenor;
- }
- /**
- * Retrieve the Array of Deposit Instrument Quotes
- *
- * @return The Array of Deposit Instrument Quotes
- */
- public double[] depositQuote()
- {
- return _adblDepositQuote;
- }
- /**
- * Retrieve the Array of Futures Instrument Quotes
- *
- * @return The Array of Futures Instrument Quotes
- */
- public double[] futuresQuote()
- {
- return _adblFuturesQuote;
- }
- /**
- * Retrieve the Array of Fix-Float IRS Instrument Maturity Tenors
- *
- * @return The Array of Fix-Float IRS Instrument Maturity Tenors
- */
- public java.lang.String[] fixFloatTenor()
- {
- return _astrFixFloatTenor;
- }
- /**
- * Retrieve the Array of Fix-Float IRS Instrument Quotes
- *
- * @return The Array of Fix-Float IRS Instrument Quotes
- */
- public double[] fixFloatQuote()
- {
- return _adblFixFloatQuote;
- }
- /**
- * Retrieve the Recovery Rate
- *
- * @return The Recovery Rate
- */
- public double recoveryRate()
- {
- return _dblRecoveryRate;
- }
- /**
- * Retrieve the Custom Yield Bump
- *
- * @return The Custom Yield Bump
- */
- public double customYieldBump()
- {
- return _dblCustomYieldBump;
- }
- /**
- * Retrieve the Custom Credit Basis Bump
- *
- * @return The Custom Credit Basis Bump
- */
- public double customCreditBasisBump()
- {
- return _dblCustomCreditBasisBump;
- }
- /**
- * Retrieve the Z Spread Bump
- *
- * @return The Z Spread Bump
- */
- public double zSpreadBump()
- {
- return _dblZSpreadBump;
- }
- /**
- * Retrieve the Tenor Quote Bump
- *
- * @return The Tenor Quote Bump
- */
- public double tenorBump()
- {
- return _dblTenorBump;
- }
- /**
- * Retrieve the Spread Duration Multiplier
- *
- * @return The Spread Duration Multiplier
- */
- public double spreadDurationMultiplier()
- {
- return _dblSpreadDurationMultiplier;
- }
- /**
- * Retrieve the Govvie Code
- *
- * @return The Govvie Code
- */
- public java.lang.String govvieCode()
- {
- return _strGovvieCode;
- }
- /**
- * Retrieve the Array of Govvie Instrument Maturity Tenors
- *
- * @return The Array of Govvie Instrument Maturity Tenors
- */
- public java.lang.String[] govvieTenor()
- {
- return _astrGovvieTenor;
- }
- /**
- * Retrieve the Array of Govvie Yield Quotes
- *
- * @return The Array of Govvie Yield Quotes
- */
- public double[] govvieQuote()
- {
- return _adblGovvieQuote;
- }
- /**
- * Retrieve the Flag that indicates the Generation the Credit Metrics from the Market Price
- *
- * @return TRUE - Generate the Credit Metrics from the Market Price
- */
- public boolean creditMetricsFromMarketPrice()
- {
- return _bMarketPriceCreditMetrics;
- }
- /**
- * Retrieve the Array of CDS Instrument Maturity Tenors
- *
- * @return The Array of CDS Instrument Maturity Tenors
- */
- public java.lang.String[] creditTenor()
- {
- return _astrCreditTenor;
- }
- /**
- * Retrieve the Array of CDS Quotes
- *
- * @return The Array of CDS Quotes
- */
- public double[] creditQuote()
- {
- return _adblCreditQuote;
- }
- /**
- * Retrieve the FX Rate
- *
- * @return The FX Rate
- */
- public double fx()
- {
- return _dblFX;
- }
- /**
- * Retrieve the Settle Lag
- *
- * @return The Settle Lag
- */
- public double settleLag()
- {
- return _iSettleLag;
- }
- /**
- * Retrieve the Bond Component Instance
- *
- * @return The Bond Component Instance
- */
- public org.drip.product.credit.BondComponent bond()
- {
- return _bond;
- }
- /**
- * Retrieve the Settle Date
- *
- * @return The Settle Date
- */
- public org.drip.analytics.date.JulianDate settleDate()
- {
- return _dtSettle;
- }
- /**
- * Retrieve the Valuation Parameters
- *
- * @return The Valuation Parameters
- */
- public org.drip.param.valuation.ValuationParams valuationParameters()
- {
- return _valParams;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Up Instances of the Funding Curve CSQC
- *
- * @return The Map of the Tenor Bumped Up Instances of the Funding Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- fundingTenorCSQCUp()
- {
- return _mapCSQCFundingUp;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Down Instances of the Funding Curve CSQC
- *
- * @return The Map of the Tenor Bumped Down Instances of the Funding Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- fundingTenorCSQCDown()
- {
- return _mapCSQCFundingDown;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Up Instances of the Forward Funding Curve CSQC
- *
- * @return The Map of the Tenor Bumped Up Instances of the Forward Funding Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- forwardFundingTenorCSQCUp()
- {
- return _mapCSQCForwardFundingUp;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Down Instances of the Forward Funding Curve CSQC
- *
- * @return The Map of the Tenor Bumped Down Instances of the Forward Funding Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- forwardFundingTenorCSQCDown()
- {
- return _mapCSQCForwardFundingDown;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Up Instances of the Govvie Curve CSQC
- *
- * @return The Map of the Tenor Bumped Up Instances of the Govvie Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- govvieTenorCSQCUp()
- {
- return _mapCSQCGovvieUp;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Down Instances of the Govvie Curve CSQC
- *
- * @return The Map of the Tenor Bumped Down Instances of the Govvie Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- govvieTenorCSQCDown()
- {
- return _mapCSQCGovvieDown;
- }
- /**
- * Retrieve the Map of the Tenor Bumped Instances of the Credit Curve CSQC
- *
- * @return The Map of the Tenor Bumped Instances of the Credit Curve CSQC
- */
- public java.util.Map<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- creditTenorCSQC()
- {
- return _mapCSQCCredit;
- }
- /**
- * Retrieve the CSQC built out of the Base Funding Curve
- *
- * @return The CSQC built out of the Base Funding Curve
- */
- public org.drip.param.market.CurveSurfaceQuoteContainer fundingBaseCSQC()
- {
- return _csqcFundingBase;
- }
- /**
- * Retrieve the CSQC built out of the Base Euro Dollar Curve
- *
- * @return The CSQC built out of the Base Euro Dollar Curve
- */
- public org.drip.param.market.CurveSurfaceQuoteContainer fundingEuroDollarCSQC()
- {
- return _csqcFundingEuroDollar;
- }
- /**
- * Retrieve the CSQC built out of the Base Credit Curve
- *
- * @return The CSQC built out of the Base Credit Curve
- */
- public org.drip.param.market.CurveSurfaceQuoteContainer creditBaseCSQC()
- {
- return _csqcCreditBase;
- }
- /**
- * Retrieve the CSQC built out of the Funding Curve Flat Bumped 1 bp
- *
- * @return The CSQC built out of the Funding Curve Flat Bumped 1 bp
- */
- public org.drip.param.market.CurveSurfaceQuoteContainer funding01UpCSQC()
- {
- return _csqcFunding01Up;
- }
- /**
- * Retrieve the CSQC built out of the Credit Curve Flat Bumped 1 bp
- *
- * @return The CSQC built out of the Credit Curve Flat Bumped 1 bp
- */
- public org.drip.param.market.CurveSurfaceQuoteContainer credit01UpCSQC()
- {
- return _csqcCredit01Up;
- }
- /**
- * Retrieve the Reset Date
- *
- * @return The Reset Date
- */
- public int resetDate()
- {
- return _iResetDate;
- }
- /**
- * Retrieve the Reset Rate
- *
- * @return The Reset Rate
- */
- public double resetRate()
- {
- return _dblResetRate;
- }
- /**
- * Retrieve the EOS Metrics Replicator
- *
- * @return The EOS Metrics Replicator
- */
- public org.drip.service.scenario.EOSMetricsReplicator eosMetricsReplicator()
- {
- return _emr;
- }
- /**
- * Generate an Instance of a Replication Run
- *
- * @return Instance of a Replication Run
- */
- public org.drip.service.scenario.BondReplicationRun generateRun()
- {
- int iMaturityDate = _bond.maturityDate().julian();
- double dblNextPutFactor = 1.;
- double dblNextCallFactor = 1.;
- int iNextPutDate = iMaturityDate;
- int iNextCallDate = iMaturityDate;
- double dblCV01 = java.lang.Double.NaN;
- double dblAccrued = java.lang.Double.NaN;
- double dblYield01 = java.lang.Double.NaN;
- double dblNominalYield = java.lang.Double.NaN;
- double dblBEYToMaturity = java.lang.Double.NaN;
- double dblOASToExercise = java.lang.Double.NaN;
- double dblOASToMaturity = java.lang.Double.NaN;
- double dblSpreadDuration = java.lang.Double.NaN;
- double dblYieldToMaturity = java.lang.Double.NaN;
- double dblParOASToExercise = java.lang.Double.NaN;
- double dblESpreadToExercise = java.lang.Double.NaN;
- double dblISpreadToExercise = java.lang.Double.NaN;
- double dblJSpreadToExercise = java.lang.Double.NaN;
- double dblNSpreadToExercise = java.lang.Double.NaN;
- double dblZSpreadToExercise = java.lang.Double.NaN;
- double dblZSpreadToMaturity = java.lang.Double.NaN;
- double dblBondBasisToExercise = java.lang.Double.NaN;
- double dblBondBasisToMaturity = java.lang.Double.NaN;
- double dblConvexityToExercise = java.lang.Double.NaN;
- double dblWALCreditToExercise = java.lang.Double.NaN;
- double dblParZSpreadToExercise = java.lang.Double.NaN;
- double dblCreditBasisToExercise = java.lang.Double.NaN;
- double dblWALLossOnlyToExercise = java.lang.Double.NaN;
- double dblYieldFromPriceNextPut = java.lang.Double.NaN;
- double dblYieldFromPriceNextCall = java.lang.Double.NaN;
- double dblWALCouponOnlyToExercise = java.lang.Double.NaN;
- double dblDiscountMarginToExercise = java.lang.Double.NaN;
- double dblParCreditBasisToExercise = java.lang.Double.NaN;
- double dblYieldToMaturityFwdCoupon = java.lang.Double.NaN;
- double dblEffectiveDurationAdjusted = java.lang.Double.NaN;
- double dblMacaulayDurationToMaturity = java.lang.Double.NaN;
- double dblModifiedDurationToExercise = java.lang.Double.NaN;
- double dblModifiedDurationToMaturity = java.lang.Double.NaN;
- double dblWALPrincipalOnlyToExercise = java.lang.Double.NaN;
- double dblWALPrincipalOnlyToMaturity = java.lang.Double.NaN;
- java.util.Map<java.lang.String, java.lang.Double> mapCreditKRD = null;
- java.util.Map<java.lang.String, java.lang.Double> mapCreditKPRD = null;
- int iValueDate = _dtValue.julian();
- java.lang.String strCurrency = _bond.currency();
- org.drip.product.params.EmbeddedOptionSchedule eosPut = _bond.putSchedule();
- org.drip.product.params.EmbeddedOptionSchedule eosCall = _bond.callSchedule();
- org.drip.service.scenario.BondReplicationRun arr = new
- org.drip.service.scenario.BondReplicationRun();
- org.drip.param.valuation.WorkoutInfo wi = _bond.exerciseYieldFromPrice (_valParams, _csqcFundingBase,
- null, _dblCurrentPrice);
- if (null == wi) return null;
- int iWorkoutDate = wi.date();
- double dblWorkoutFactor = wi.factor();
- double dblYieldToExercise = wi.yield();
- java.util.Map<java.lang.String, java.lang.Double> mapLIBORKRD = new
- org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- java.util.Map<java.lang.String, java.lang.Double> mapLIBORKPRD = new
- org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- java.util.Map<java.lang.String, java.lang.Double> mapFundingKRD = new
- org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- java.util.Map<java.lang.String, java.lang.Double> mapFundingKPRD = new
- org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- java.util.Map<java.lang.String, java.lang.Double> mapGovvieKRD = new
- org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- java.util.Map<java.lang.String, java.lang.Double> mapGovvieKPRD = new
- org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- try {
- if (null != eosCall) {
- iNextCallDate = eosCall.nextDate (iValueDate);
- dblNextCallFactor = eosCall.nextFactor (iValueDate);
- }
- if (null != eosPut) {
- iNextPutDate = eosPut.nextDate (iValueDate);
- dblNextPutFactor = eosPut.nextFactor (iValueDate);
- }
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblAccrued = _bond.accrued (_dtSettle.julian(), _csqcFundingBase);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblYieldToMaturity = _bond.yieldFromPrice (_valParams, _csqcFundingBase, null, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblBEYToMaturity = _bond.yieldFromPrice (_valParams, _csqcFundingBase,
- org.drip.param.valuation.ValuationCustomizationParams.BondEquivalent (strCurrency),
- _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblYieldToMaturityFwdCoupon = _bond.yieldFromPrice (_valParams, _csqcFundingBase, new
- org.drip.param.valuation.ValuationCustomizationParams (_bond.couponDC(), _bond.freq(), false,
- null, strCurrency, false, true), _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblYieldFromPriceNextCall = _bond.yieldFromPrice (_valParams, _csqcFundingBase, null,
- iNextCallDate, dblNextCallFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblYieldFromPriceNextPut = _bond.yieldFromPrice (_valParams, _csqcFundingBase, null,
- iNextPutDate, dblNextPutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblNominalYield = _bond.yieldFromPrice (_valParams, _csqcFundingBase, null, _dblIssuePrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- dblOASToMaturity = _bond.oasFromPrice (_valParams, _csqcFundingBase, null, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblZSpreadToMaturity = _bond.isFloater() ? _bond.discountMarginFromPrice (_valParams,
- _csqcFundingBase, null, _dblCurrentPrice) : _bond.zSpreadFromPrice (_valParams,
- _csqcFundingBase, null, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblZSpreadToExercise = _bond.isFloater() ? _bond.discountMarginFromPrice (_valParams,
- _csqcFundingBase, null, iWorkoutDate, dblWorkoutFactor, _dblCurrentPrice) :
- _bond.zSpreadFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblParZSpreadToExercise = _bond.isFloater() ? _bond.discountMarginFromPrice (_valParams,
- _csqcFundingBase, null, iWorkoutDate, dblWorkoutFactor, _dblIssuePrice) :
- _bond.zSpreadFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblIssuePrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblBondBasisToMaturity = _bond.bondBasisFromPrice (_valParams, _csqcFundingBase, null,
- _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblBondBasisToExercise = _bond.bondBasisFromPrice (_valParams, _csqcFundingBase, null,
- iWorkoutDate, dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblModifiedDurationToMaturity = (_dblCurrentPrice - _bond.priceFromBondBasis (_valParams,
- _csqcFunding01Up, null, dblBondBasisToMaturity)) / _dblCurrentPrice;
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblMacaulayDurationToMaturity = _bond.macaulayDurationFromPrice (_valParams, _csqcFundingBase,
- null, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblModifiedDurationToExercise = (_dblCurrentPrice - _bond.priceFromBondBasis (_valParams,
- _csqcFunding01Up, null, iWorkoutDate, dblWorkoutFactor, dblBondBasisToExercise)) /
- _dblCurrentPrice;
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblYield01 = 0.5 * (_bond.priceFromYield (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, dblYieldToExercise - 0.0001 * _dblCustomYieldBump) - _bond.priceFromYield
- (_valParams, _csqcFundingBase, null, iWorkoutDate, dblWorkoutFactor, dblYieldToExercise +
- 0.0001 * _dblCustomYieldBump)) / _dblCustomYieldBump;
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != _csqcCreditBase)
- dblCreditBasisToExercise = _bMarketPriceCreditMetrics ? 0. : _bond.creditBasisFromPrice
- (_valParams, _csqcCreditBase, null, iWorkoutDate, dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != _csqcCreditBase)
- dblParCreditBasisToExercise = _bond.creditBasisFromPrice (_valParams, _csqcCreditBase, null,
- iWorkoutDate, dblWorkoutFactor, _dblIssuePrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != _csqcCreditBase) {
- if (!_bMarketPriceCreditMetrics)
- dblEffectiveDurationAdjusted = (_dblCurrentPrice - _bond.priceFromCreditBasis
- (_valParams, _csqcCreditBase, null, iWorkoutDate, dblWorkoutFactor,
- dblCreditBasisToExercise + 0.0001 * _dblCustomCreditBasisBump)) /
- _dblCurrentPrice / _dblCustomCreditBasisBump;
- else {
- org.drip.state.identifier.EntityCDSLabel cl = _bond.creditLabel();
- org.drip.state.credit.CreditCurve ccBase = _csqcCreditBase.creditState (cl);
- org.drip.state.credit.CreditCurve ccAdj =
- org.drip.state.creator.ScenarioCreditCurveBuilder.FlatHazard (_dtValue.julian(),
- cl.referenceEntity(), strCurrency, ccBase.hazard (_bond.maturityDate()) + 0.0001
- * _dblCustomCreditBasisBump, _dblRecoveryRate);
- if (null != ccAdj)
- dblEffectiveDurationAdjusted = (_dblCurrentPrice - _bond.priceFromCreditBasis
- (_valParams, org.drip.param.creator.MarketParamsBuilder.Create
- (_csqcCreditBase.fundingState (_bond.fundingLabel()),
- _csqcCreditBase.govvieState (_bond.govvieLabel()), ccAdj, "", null, null,
- _csqcCreditBase.fixings()), null, iWorkoutDate, dblWorkoutFactor,
- 0.)) / _dblCurrentPrice / _dblCustomCreditBasisBump;
- }
- }
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblSpreadDuration = _dblSpreadDurationMultiplier * (_dblCurrentPrice - (_bond.isFloater() ?
- _bond.priceFromDiscountMargin (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, dblZSpreadToExercise + 0.0001 * _dblZSpreadBump) :
- _bond.priceFromZSpread (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, dblZSpreadToExercise + 0.0001 * _dblZSpreadBump))) /
- _dblCurrentPrice;
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != _csqcCredit01Up)
- dblCV01 = _dblCurrentPrice - _bond.priceFromCreditBasis (_valParams, _csqcCredit01Up, null,
- iWorkoutDate, dblWorkoutFactor, dblCreditBasisToExercise);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblConvexityToExercise = _bond.convexityFromPrice (_valParams, _csqcFundingBase, null,
- iWorkoutDate, dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblDiscountMarginToExercise = dblYieldToExercise - _csqcFundingBase.fundingState
- (_bond.fundingLabel()).libor (_valParams.valueDate(), "1M");
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblESpreadToExercise = _bond.isFloater() ? _bond.discountMarginFromPrice (_valParams,
- _csqcFundingEuroDollar, null, iWorkoutDate, dblWorkoutFactor, _dblCurrentPrice) :
- _bond.zSpreadFromPrice (_valParams, _csqcFundingEuroDollar, null, iWorkoutDate,
- dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblISpreadToExercise = _bond.iSpreadFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblJSpreadToExercise = _bond.jSpreadFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblNSpreadToExercise = _bond.nSpreadFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblWALPrincipalOnlyToExercise = _bond.weightedAverageLifePrincipalOnly (_valParams,
- _csqcFundingBase, iWorkoutDate, dblWorkoutFactor);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblWALPrincipalOnlyToMaturity = _bond.weightedAverageLifePrincipalOnly (_valParams,
- _csqcFundingBase, iMaturityDate, 1.);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != _csqcCreditBase)
- dblWALLossOnlyToExercise = _bond.weightedAverageLifeLossOnly (_valParams, _csqcCreditBase,
- iWorkoutDate, dblWorkoutFactor);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblWALCouponOnlyToExercise = _bond.weightedAverageLifeCouponOnly (_valParams, _csqcFundingBase,
- iWorkoutDate, dblWorkoutFactor);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- if (null != _csqcCreditBase)
- dblWALCreditToExercise = _bond.weightedAverageLifeCredit (_valParams, _csqcCreditBase,
- iWorkoutDate, dblWorkoutFactor);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblOASToExercise = _bond.oasFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblCurrentPrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- try {
- dblParOASToExercise = _bond.oasFromPrice (_valParams, _csqcFundingBase, null, iWorkoutDate,
- dblWorkoutFactor, _dblIssuePrice);
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- double dblEffectiveDuration = dblYield01 / _dblCurrentPrice;
- try {
- for (java.util.Map.Entry<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- meCSQCUp : _mapCSQCFundingUp.entrySet()) {
- java.lang.String strKey = meCSQCUp.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenorUp = meCSQCUp.getValue();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenorDown = _mapCSQCFundingDown.get
- (strKey);
- double dblTenorFundingUpPrice = _bond.isFloater() ? _bond.priceFromFundingCurve (_valParams,
- csqcTenorUp, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread (_valParams,
- csqcTenorUp, null, iWorkoutDate, dblWorkoutFactor, dblZSpreadToExercise);
- double dblTenorFundingUpParPrice = _bond.isFloater() ? _bond.priceFromFundingCurve
- (_valParams, csqcTenorUp, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread
- (_valParams, csqcTenorUp, null, iWorkoutDate, dblWorkoutFactor,
- dblParZSpreadToExercise);
- double dblTenorFundingDownPrice = _bond.isFloater() ? _bond.priceFromFundingCurve
- (_valParams, csqcTenorDown, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread
- (_valParams, csqcTenorDown, null, iWorkoutDate, dblWorkoutFactor,
- dblZSpreadToExercise);
- double dblTenorFundingDownParPrice = _bond.isFloater() ? _bond.priceFromFundingCurve
- (_valParams, csqcTenorDown, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread
- (_valParams, csqcTenorDown, null, iWorkoutDate, dblWorkoutFactor,
- dblParZSpreadToExercise);
- double dblBaseFloaterPrice = 0.5 * (dblTenorFundingDownPrice + dblTenorFundingUpPrice);
- mapFundingKRD.put (strKey, 0.5 * (dblTenorFundingDownPrice - dblTenorFundingUpPrice) /
- (_bond.isFloater() ? dblBaseFloaterPrice : _dblCurrentPrice) / _dblTenorBump);
- mapFundingKPRD.put (strKey, 0.5 * (dblTenorFundingDownParPrice - dblTenorFundingUpParPrice) /
- (_bond.isFloater() ? dblBaseFloaterPrice : _dblIssuePrice) / _dblTenorBump);
- }
- for (java.util.Map.Entry<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- meCSQCUp : _mapCSQCForwardFundingUp.entrySet()) {
- java.lang.String strKey = meCSQCUp.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenorUp = meCSQCUp.getValue();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenorDown =
- _mapCSQCForwardFundingDown.get (strKey);
- double dblTenorForwardUpPrice = _bond.isFloater() ? _bond.priceFromFundingCurve (_valParams,
- csqcTenorUp, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread (_valParams,
- csqcTenorUp, null, iWorkoutDate, dblWorkoutFactor, dblZSpreadToExercise);
- double dblTenorForwardUpParPrice = _bond.isFloater() ? _bond.priceFromFundingCurve
- (_valParams, csqcTenorUp, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread
- (_valParams, csqcTenorUp, null, iWorkoutDate, dblWorkoutFactor,
- dblParZSpreadToExercise);
- double dblTenorForwardDownPrice = _bond.isFloater() ? _bond.priceFromFundingCurve
- (_valParams, csqcTenorDown, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread
- (_valParams, csqcTenorDown, null, iWorkoutDate, dblWorkoutFactor,
- dblZSpreadToExercise);
- double dblTenorForwardDownParPrice = _bond.isFloater() ? _bond.priceFromFundingCurve
- (_valParams, csqcTenorDown, iWorkoutDate, dblWorkoutFactor, 0.) : _bond.priceFromZSpread
- (_valParams, csqcTenorDown, null, iWorkoutDate, dblWorkoutFactor,
- dblParZSpreadToExercise);
- double dblBaseFloaterPrice = 0.5 * (dblTenorForwardDownPrice + dblTenorForwardUpPrice);
- mapLIBORKRD.put (strKey, 0.5 * (dblTenorForwardDownPrice - dblTenorForwardUpPrice) /
- (_bond.isFloater() ? dblBaseFloaterPrice : _dblCurrentPrice) / _dblTenorBump);
- mapLIBORKPRD.put (strKey, 0.5 * (dblTenorForwardDownParPrice - dblTenorForwardUpParPrice) /
- (_bond.isFloater() ? dblBaseFloaterPrice : _dblIssuePrice) / _dblTenorBump);
- }
- for (java.util.Map.Entry<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- meCSQCUp : _mapCSQCGovvieUp.entrySet()) {
- java.lang.String strKey = meCSQCUp.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenorUp = meCSQCUp.getValue();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenorDown = _mapCSQCGovvieDown.get
- (strKey);
- mapGovvieKRD.put (strKey, 0.5 * (_bond.priceFromOAS (_valParams, csqcTenorDown, null,
- iWorkoutDate, dblWorkoutFactor, dblOASToExercise) - _bond.priceFromOAS (_valParams,
- csqcTenorUp, null, iWorkoutDate, dblWorkoutFactor, dblOASToExercise)) /
- _dblCurrentPrice / _dblTenorBump);
- mapGovvieKPRD.put (strKey, 0.5 * (_bond.priceFromOAS (_valParams, csqcTenorDown, null,
- iWorkoutDate, dblWorkoutFactor, dblParOASToExercise) - _bond.priceFromOAS (_valParams,
- csqcTenorUp, null, iWorkoutDate, dblWorkoutFactor, dblParOASToExercise)) /
- _dblIssuePrice / _dblTenorBump);
- }
- if (null != _mapCSQCCredit) {
- mapCreditKRD = new org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- mapCreditKPRD = new org.drip.analytics.support.CaseInsensitiveHashMap<java.lang.Double>();
- for (java.util.Map.Entry<java.lang.String, org.drip.param.market.CurveSurfaceQuoteContainer>
- meCSQC : _mapCSQCCredit.entrySet()) {
- java.lang.String strKey = meCSQC.getKey();
- org.drip.param.market.CurveSurfaceQuoteContainer csqcTenor = meCSQC.getValue();
- mapCreditKRD.put (strKey, (_dblCurrentPrice - _bond.priceFromCreditBasis (_valParams,
- csqcTenor, null, iWorkoutDate, dblWorkoutFactor, dblCreditBasisToExercise)) /
- _dblCurrentPrice);
- mapCreditKPRD.put (strKey, (_dblIssuePrice - _bond.priceFromCreditBasis (_valParams,
- csqcTenor, null, iWorkoutDate, dblWorkoutFactor, dblParCreditBasisToExercise)) /
- _dblIssuePrice);
- }
- }
- org.drip.analytics.output.BondEOSMetrics bem = null == _emr ? null : _emr.generateRun();
- if (null != bem)
- {
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("MCOAS", bem.oas())))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("MCDuration",
- bem.oasDuration())))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("MCConvexity",
- bem.oasConvexity())))
- return null;
- }
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Price", _dblCurrentPrice)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Market Value",
- _dblCurrentPrice * _dblIssueAmount)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Accrued", dblAccrued)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Accrued$", dblAccrued *
- _dblIssueAmount)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Accrued Interest Factor",
- dblAccrued * _dblFX)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Yield To Maturity",
- dblYieldToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Yield To Maturity CBE",
- dblBEYToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("YTM fwdCpn",
- dblYieldToMaturityFwdCoupon)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Yield To Worst",
- dblYieldToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("YIELD TO CALL",
- dblYieldFromPriceNextCall)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("YIELD TO PUT",
- dblYieldFromPriceNextPut)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Nominal Yield",
- dblNominalYield)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Z_Spread", dblOASToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Z_Vol_OAS",
- dblZSpreadToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("OAS", dblZSpreadToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("TSY OAS", dblOASToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("MOD DUR",
- dblModifiedDurationToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("MACAULAY DURATION",
- dblMacaulayDurationToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("MOD DUR TO WORST",
- dblModifiedDurationToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Funding DURATION",
- mapFundingKRD.get ("bump"))))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("LIBOR DURATION",
- mapLIBORKRD.get ("bump"))))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("TREASURY DURATION",
- mapGovvieKRD.get ("bump"))))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("EFFECTIVE DURATION",
- dblEffectiveDuration)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("EFFECTIVE DURATION ADJ",
- dblEffectiveDurationAdjusted)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("OAD MULT",
- dblEffectiveDurationAdjusted / dblEffectiveDuration)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Spread Dur",
- dblSpreadDuration)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Spread Dur $",
- dblSpreadDuration * _dblIssueAmount)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("DV01", dblYield01)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("CV01", dblCV01))) return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Convexity",
- dblConvexityToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("Modified Convexity",
- dblConvexityToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("DISCOUNT MARGIN",
- dblDiscountMarginToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("E-Spread",
- dblESpreadToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("I-Spread",
- dblISpreadToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("J-Spread",
- dblJSpreadToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("N-Spread",
- dblNSpreadToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("WAL To Worst",
- dblWALPrincipalOnlyToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("WAL",
- dblWALPrincipalOnlyToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("WAL2",
- dblWALLossOnlyToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("WAL3",
- !org.drip.numerical.common.NumberUtil.IsValid (dblWALCouponOnlyToExercise) ? 0. :
- dblWALCouponOnlyToExercise)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("WAL4",
- dblWALPrincipalOnlyToMaturity)))
- return null;
- if (!arr.addNamedField (new org.drip.service.scenario.NamedField ("WAL_Adj",
- dblWALCreditToExercise)))
- return null;
- if (!arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("Funding KRD",
- mapFundingKRD)))
- return null;
- if (!arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("Funding KPRD",
- mapFundingKPRD)))
- return null;
- if (!arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("LIBOR KRD",
- mapLIBORKRD)))
- return null;
- if (!arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("LIBOR KPRD",
- mapLIBORKPRD)))
- return null;
- if (!arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("Govvie KRD",
- mapGovvieKRD)))
- return null;
- if (!arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("Govvie KPRD",
- mapGovvieKPRD)))
- return null;
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- return null;
- }
- try {
- if (null != mapCreditKRD)
- arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("Credit KRD",
- mapCreditKRD));
- if (null != mapCreditKPRD)
- arr.addNamedFieldMap (new org.drip.service.scenario.NamedFieldMap ("Credit KPRD",
- mapCreditKPRD));
- } catch (java.lang.Exception e) {
- e.printStackTrace();
- }
- System.out.println ("Workout : " + new org.drip.analytics.date.JulianDate (iWorkoutDate));
- System.out.println ("Next Call Date : " + new org.drip.analytics.date.JulianDate (iNextCallDate) +
- " | " + dblNextCallFactor);
- System.out.println ("Maturity Date : " + new org.drip.analytics.date.JulianDate (iMaturityDate) +
- " | 1.0");
- return arr;
- }
- }