Exemplo n.º 1
0
        // calculates calibrated bucketed IR01 for one scenario
        internal CurrencyParameterSensitivity ir01CalibratedBucketed(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            PointSensitivities           pointSensitivity = tradePricer.presentValueOnSettleSensitivity(trade, ratesProvider, refData);
            CurrencyParameterSensitivity irSensitivity    = ratesProvider.singleDiscountCurveParameterSensitivity(pointSensitivity, trade.Product.Currency);

            return(irSensitivity.multipliedBy(ONE_BASIS_POINT));
        }
Exemplo n.º 2
0
        // calculates market quote bucketed PV01 for one scenario
        internal CurrencyParameterSensitivities pv01MarketQuoteBucketed(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            PointSensitivities             pointSensitivity     = tradePricer.presentValueSensitivity(trade, ratesProvider, refData);
            CurrencyParameterSensitivities parameterSensitivity = ratesProvider.parameterSensitivity(pointSensitivity);

            return(MARKET_QUOTE_SENS.sensitivity(parameterSensitivity, ratesProvider).multipliedBy(ONE_BASIS_POINT));
        }
Exemplo n.º 3
0
        // calculates market quote parallel IR01 for one scenario
        internal MultiCurrencyAmount ir01MarketQuoteParallel(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            PointSensitivities             pointSensitivity     = tradePricer.presentValueOnSettleSensitivity(trade, ratesProvider, refData);
            CurrencyParameterSensitivity   parameterSensitivity = ratesProvider.singleDiscountCurveParameterSensitivity(pointSensitivity, trade.Product.Currency);
            CurrencyParameterSensitivities irSensitivity        = MARKET_QUOTE_SENS.sensitivity(CurrencyParameterSensitivities.of(parameterSensitivity), ratesProvider);

            return(irSensitivity.total().multipliedBy(ONE_BASIS_POINT));
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the present value of the trade.
        /// <para>
        /// The present value of the product is based on the valuation date.
        /// </para>
        /// <para>
        /// This method can calculate the clean or dirty present value, see <seealso cref="PriceType"/>.
        /// If calculating the clean value, the accrued interest is calculated based on the step-in date.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="priceType">  the price type </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the price </returns>
        public virtual CurrencyAmount presentValue(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, PriceType priceType, ReferenceData refData)
        {
            CurrencyAmount pvProduct = productPricer.presentValue(trade.Product, ratesProvider, ratesProvider.ValuationDate, priceType, refData);

            if (!trade.UpfrontFee.Present)
            {
                return(pvProduct);
            }
            Payment        upfront   = trade.UpfrontFee.get();
            CurrencyAmount pvUpfront = upfrontPricer.presentValue(upfront, ratesProvider.discountFactors(upfront.Currency).toDiscountFactors());

            return(pvProduct.plus(pvUpfront));
        }
        /// <summary>
        /// Calculates the present value sensitivity of the trade.
        /// <para>
        /// The present value sensitivity of the trade is the sensitivity of present value to the underlying curves.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the present value sensitivity </returns>
        public virtual PointSensitivities presentValueSensitivity(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            PointSensitivityBuilder pvSensiProduct = productPricer.presentValueSensitivity(trade.Product, ratesProvider, ratesProvider.ValuationDate, refData);

            if (!trade.UpfrontFee.Present)
            {
                return(pvSensiProduct.build());
            }
            Payment upfront = trade.UpfrontFee.get();
            PointSensitivityBuilder pvUpfront = upfrontPricer.presentValueSensitivity(upfront, ratesProvider.discountFactors(upfront.Currency).toDiscountFactors());

            return(pvSensiProduct.combinedWith(pvUpfront).build());
        }
Exemplo n.º 6
0
 //-------------------------------------------------------------------------
 // calculates jump-to-default for all scenarios
 internal ScenarioArray <JumpToDefault> jumpToDefault(ResolvedCdsIndexTrade trade, CreditRatesScenarioMarketData marketData, ReferenceData refData)
 {
     return(ScenarioArray.of(marketData.ScenarioCount, i => jumpToDefault(trade, marketData.scenario(i).creditRatesProvider(), refData)));
 }
Exemplo n.º 7
0
 // calculates recovery01 for one scenario
 internal CurrencyAmount recovery01(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
 {
     return(tradePricer.recovery01OnSettle(trade, ratesProvider, refData));
 }
Exemplo n.º 8
0
 // calculates bucketed CS01 for one scenario
 internal CurrencyParameterSensitivity cs01Bucketed(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
 {
     return(cs01Calculator.bucketedCs01(trade, ratesProvider, refData));
 }
Exemplo n.º 9
0
 //-------------------------------------------------------------------------
 // calculates bucketed CS01 for all scenarios
 internal ScenarioArray <CurrencyParameterSensitivity> cs01Bucketed(ResolvedCdsIndexTrade trade, CreditRatesScenarioMarketData marketData, ReferenceData refData)
 {
     return(ScenarioArray.of(marketData.ScenarioCount, i => cs01Bucketed(trade, marketData.scenario(i).creditRatesProvider(), refData)));
 }
Exemplo n.º 10
0
 // calculates parallel CS01 for one scenario
 internal CurrencyAmount cs01Parallel(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
 {
     return(cs01Calculator.parallelCs01(trade, ratesProvider, refData));
 }
        /// <summary>
        /// Calculates the present value sensitivity of the underlying product.
        /// <para>
        /// The present value sensitivity of the product is the sensitivity of present value to the underlying curves.
        /// The present value sensitivity is computed based on the settlement date rather than the valuation date.
        /// </para>
        /// <para>
        /// This is coherent to <seealso cref="#presentValueOnSettle(ResolvedCdsIndexTrade, CreditRatesProvider, PriceType, ReferenceData)"/>.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the present value sensitivity </returns>
        public virtual PointSensitivities presentValueOnSettleSensitivity(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

            return(productPricer.presentValueSensitivity(trade.Product, ratesProvider, settlementDate, refData).build());
        }
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates the expected loss of the underlying product.
 /// <para>
 /// The expected loss is the (undiscounted) expected default settlement value paid by the protection seller.
 /// The resulting value is always positive.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="ratesProvider">  the rates provider </param>
 /// <returns> the recovery01 </returns>
 public virtual CurrencyAmount expectedLoss(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider)
 {
     return(productPricer.expectedLoss(trade.Product, ratesProvider));
 }
Exemplo n.º 13
0
 //-------------------------------------------------------------------------
 // calculates principal for all scenarios
 internal CurrencyScenarioArray principal(ResolvedCdsIndexTrade trade, CreditRatesScenarioMarketData marketData, ReferenceData refData)
 {
     return(CurrencyScenarioArray.of(marketData.ScenarioCount, i => principal(trade, marketData.scenario(i).creditRatesProvider(), refData)));
 }
Exemplo n.º 14
0
 //-------------------------------------------------------------------------
 // calculates present value for all scenarios
 internal CurrencyScenarioArray presentValue(ResolvedCdsIndexTrade trade, CreditRatesScenarioMarketData marketData, ReferenceData refData)
 {
     return(CurrencyScenarioArray.of(marketData.ScenarioCount, i => presentValue(trade, marketData.scenario(i).creditRatesProvider(), PriceType.DIRTY, refData)));
 }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the recovery01 of the underlying product.
        /// <para>
        /// The recovery01 is defined as the present value sensitivity to the recovery rate.
        /// Since the ISDA standard model requires the recovery rate to be constant throughout the lifetime of the CDS,
        /// one currency amount is returned by this method.
        /// </para>
        /// <para>
        /// This is computed based on the settlement date rather than the valuation date.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the recovery01 </returns>
        public virtual CurrencyAmount recovery01OnSettle(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

            return(productPricer.recovery01(trade.Product, ratesProvider, settlementDate, refData));
        }
Exemplo n.º 16
0
        // calculates price for one scenario
        internal double unitPrice(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            double puf = tradePricer.price(trade, ratesProvider, PriceType.CLEAN, refData);

            return(converter.cleanPriceFromPointsUpfront(puf));
        }
Exemplo n.º 17
0
 //-------------------------------------------------------------------------
 // calculates price for all scenarios
 internal DoubleScenarioArray unitPrice(ResolvedCdsIndexTrade trade, CreditRatesScenarioMarketData marketData, ReferenceData refData)
 {
     return(DoubleScenarioArray.of(marketData.ScenarioCount, i => unitPrice(trade, marketData.scenario(i).creditRatesProvider(), refData)));
 }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the price of the underlying product, which is the present value per unit notional.
        /// <para>
        /// This method can calculate the clean or dirty price, see <seealso cref="PriceType"/>.
        /// If calculating the clean price, the accrued interest is calculated based on the step-in date.
        /// </para>
        /// <para>
        /// This is coherent to <seealso cref="#presentValueOnSettle(ResolvedCdsIndexTrade, CreditRatesProvider, PriceType, ReferenceData)"/>.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="priceType">  the price type </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the price </returns>
        public virtual double price(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, PriceType priceType, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

            return(productPricer.price(trade.Product, ratesProvider, settlementDate, priceType, refData));
        }
 //-------------------------------------------------------------------------
 private LocalDate calculateSettlementDate(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
 {
     return(trade.Info.SettlementDate.orElse(trade.Product.calculateSettlementDateFromValuation(ratesProvider.ValuationDate, refData)));
 }
Exemplo n.º 20
0
 // calculates jump-to-default for one scenario
 internal JumpToDefault jumpToDefault(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
 {
     return(tradePricer.jumpToDefault(trade, ratesProvider, refData));
 }
Exemplo n.º 21
0
 // calculates expected loss for one scenario
 internal CurrencyAmount expectedLoss(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider)
 {
     return(tradePricer.expectedLoss(trade, ratesProvider));
 }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the jump-to-default of the underlying product.
        /// <para>
        /// The jump-to-default is the value of the product in case of immediate default of a constituent single name.
        /// </para>
        /// <para>
        /// Under the homogeneous pool assumption, the jump-to-default values are the same for all of the undefaulted names,
        /// and zero for defaulted names. Thus the resulting object contains a single number.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="refData">  the reference data </param>
        /// <returns> the recovery01 </returns>
        public virtual JumpToDefault jumpToDefault(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

            return(productPricer.jumpToDefault(trade.Product, ratesProvider, settlementDate, refData));
        }
Exemplo n.º 23
0
 // calculates present value for one scenario
 internal CurrencyAmount presentValue(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, PriceType priceType, ReferenceData refData)
 {
     return(tradePricer.presentValue(trade, ratesProvider, priceType, refData));
 }
Exemplo n.º 24
0
        // calculates calibrated bucketed PV01 for one scenario
        internal CurrencyParameterSensitivities pv01CalibratedBucketed(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
        {
            PointSensitivities pointSensitivity = tradePricer.presentValueSensitivity(trade, ratesProvider, refData);

            return(ratesProvider.parameterSensitivity(pointSensitivity).multipliedBy(ONE_BASIS_POINT));
        }
Exemplo n.º 25
0
 // calculates principal for one scenario
 internal CurrencyAmount principal(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, ReferenceData refData)
 {
     return(tradePricer.presentValueOnSettle(trade, ratesProvider, PriceType.CLEAN, refData));
 }
Exemplo n.º 26
0
 //-------------------------------------------------------------------------
 // calculates market quote sum PV01 for all scenarios
 internal MultiCurrencyScenarioArray pv01MarketQuoteSum(ResolvedCdsIndexTrade trade, CreditRatesScenarioMarketData marketData, ReferenceData refData)
 {
     return(MultiCurrencyScenarioArray.of(marketData.ScenarioCount, i => pv01MarketQuoteSum(trade, marketData.scenario(i).creditRatesProvider(), refData)));
 }