예제 #1
0
        public virtual void endedTest()
        {
            LocalDate           valuationDate = PRODUCT.ProtectionEndDate.plusDays(1);
            CreditRatesProvider provider      = createCreditRatesProviderSingle(valuationDate, false);
            double price = PRICER.price(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA);

            assertEquals(price, 0d);
            CurrencyAmount pv = PRICER.presentValue(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA);

            assertEquals(pv, CurrencyAmount.zero(USD));
            assertThrowsIllegalArg(() => PRICER.parSpread(PRODUCT, provider, SETTLEMENT_STD, REF_DATA));
            CurrencyAmount rpv01 = PRICER.rpv01(PRODUCT, provider, SETTLEMENT_STD, CLEAN, REF_DATA);

            assertEquals(rpv01, CurrencyAmount.zero(USD));
            CurrencyAmount recovery01 = PRICER.recovery01(PRODUCT, provider, SETTLEMENT_STD, REF_DATA);

            assertEquals(recovery01, CurrencyAmount.zero(USD));
            PointSensitivityBuilder sensi = PRICER.presentValueSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA);

            assertEquals(sensi, PointSensitivityBuilder.none());
            PointSensitivityBuilder sensiPrice = PRICER.priceSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA);

            assertEquals(sensiPrice, PointSensitivityBuilder.none());
            assertThrowsIllegalArg(() => PRICER.parSpreadSensitivity(PRODUCT, provider, SETTLEMENT_STD, REF_DATA));
            JumpToDefault jumpToDefault = PRICER.jumpToDefault(PRODUCT, provider, SETTLEMENT_STD, REF_DATA);

            assertEquals(jumpToDefault, JumpToDefault.of(USD, ImmutableMap.of(INDEX_ID, 0d)));
            CurrencyAmount expectedLoss = PRICER.expectedLoss(PRODUCT, provider);

            assertEquals(expectedLoss, CurrencyAmount.zero(USD));
        }
예제 #2
0
        public virtual void test_rpv01OnSettle()
        {
            CurrencyAmount computed   = PRICER.rpv01OnSettle(TRADE, RATES_PROVIDER, PriceType.CLEAN, REF_DATA);
            CurrencyAmount expected   = PRICER_PRODUCT.rpv01(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, PriceType.CLEAN, REF_DATA);
            CurrencyAmount computedMf = PRICER_MF.rpv01OnSettle(TRADE_NO_SETTLE_DATE, RATES_PROVIDER, PriceType.CLEAN, REF_DATA);
            CurrencyAmount expectedMf = PRICER_PRODUCT_MF.rpv01(PRODUCT, RATES_PROVIDER, SETTLEMENT_DATE, PriceType.CLEAN, REF_DATA);

            assertEquals(computed.Amount, expected.Amount, TOL);
            assertEquals(computedMf.Amount, expectedMf.Amount, TOL);
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the risky PV01 of the underlying product.
        /// <para>
        /// RPV01 is defined as minus of the present value sensitivity to coupon rate.
        /// </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="priceType">  the price type </param>
        /// <param name="refData">  the reference date </param>
        /// <returns> the RPV01 </returns>
        public virtual CurrencyAmount rpv01OnSettle(ResolvedCdsIndexTrade trade, CreditRatesProvider ratesProvider, PriceType priceType, ReferenceData refData)
        {
            LocalDate settlementDate = calculateSettlementDate(trade, ratesProvider, refData);

            return(productPricer.rpv01(trade.Product, ratesProvider, settlementDate, priceType, refData));
        }