Пример #1
0
        //-------------------------------------------------------------------------
        public virtual void test_explainPresentValue()
        {
            ExplainMap explain = LEG_PRICER.explainPresentValue(CAP_LEG, RATES_PROVIDER, VOLATILITIES);

            assertEquals(explain.get(ExplainKey.ENTRY_TYPE).get(), "CmsLeg");
            assertEquals(explain.get(ExplainKey.PAY_RECEIVE).get().ToString(), "Receive");
            assertEquals(explain.get(ExplainKey.PAYMENT_CURRENCY).get().Code, "EUR");
            assertEquals(explain.get(ExplainKey.START_DATE).get(), LocalDate.of(2015, 10, 21));
            assertEquals(explain.get(ExplainKey.END_DATE).get(), LocalDate.of(2020, 10, 21));
            assertEquals(explain.get(ExplainKey.INDEX).get().ToString(), "EUR-EURIBOR-1100-5Y");
            assertEquals(explain.get(ExplainKey.PRESENT_VALUE).get().Amount, 39728.51321029542);

            IList <ExplainMap> paymentPeriods = explain.get(ExplainKey.PAYMENT_PERIODS).get();

            assertEquals(paymentPeriods.Count, 5);
            //Test First Period
            ExplainMap cmsPeriod0 = paymentPeriods[0];

            assertEquals(cmsPeriod0.get(ExplainKey.ENTRY_TYPE).get(), "CmsCapletPeriod");
            assertEquals(cmsPeriod0.get(ExplainKey.STRIKE_VALUE).Value, 0.0125d);
            assertEquals(cmsPeriod0.get(ExplainKey.NOTIONAL).get().Amount, 1000000d);
            assertEquals(cmsPeriod0.get(ExplainKey.PAYMENT_DATE).get(), LocalDate.of(2016, 10, 21));
            assertEquals(cmsPeriod0.get(ExplainKey.DISCOUNT_FACTOR).Value, 0.9820085531995826d);
            assertEquals(cmsPeriod0.get(ExplainKey.START_DATE).get(), LocalDate.of(2015, 10, 21));
            assertEquals(cmsPeriod0.get(ExplainKey.END_DATE).get(), LocalDate.of(2016, 10, 21));
            assertEquals(cmsPeriod0.get(ExplainKey.FIXING_DATE).get(), LocalDate.of(2015, 10, 19));
            assertEquals(cmsPeriod0.get(ExplainKey.ACCRUAL_YEAR_FRACTION).Value, 1.0166666666666666d);
            double forwardSwapRate = PRICER_SWAP.parRate(CAP_LEG.CmsPeriods.get(0).UnderlyingSwap, RATES_PROVIDER);

            assertEquals(cmsPeriod0.get(ExplainKey.FORWARD_RATE).Value, forwardSwapRate);
            CurrencyAmount pv = PERIOD_PRICER.presentValue(CAP_LEG.CmsPeriods.get(0), RATES_PROVIDER, VOLATILITIES);

            assertEquals(cmsPeriod0.get(ExplainKey.PRESENT_VALUE).get(), pv);
        }
Пример #2
0
        //-------------------------------------------------------------------------
        /// <summary>
        /// Explains the present value of the CMS product.
        /// <para>
        /// This returns explanatory information about the calculation.
        ///
        /// </para>
        /// </summary>
        /// <param name="cms">  the CMS product </param>
        /// <param name="ratesProvider">  the rates provider </param>
        /// <param name="swaptionVolatilities">  the swaption volatilities </param>
        /// <returns> the explain PV map </returns>
        public virtual ExplainMap explainPresentValue(ResolvedCms cms, RatesProvider ratesProvider, SabrSwaptionVolatilities swaptionVolatilities)
        {
            ExplainMapBuilder builder = ExplainMap.builder();

            builder.put(ExplainKey.ENTRY_TYPE, "CmsSwap");
            IList <ExplainMap> legsExplain = new List <ExplainMap>();

            legsExplain.Add(cmsLegPricer.explainPresentValue(cms.CmsLeg, ratesProvider, swaptionVolatilities));
            if (cms.PayLeg.Present)
            {
                legsExplain.Add(payLegPricer.explainPresentValue(cms.PayLeg.get(), ratesProvider));
            }
            builder.put(ExplainKey.LEGS, legsExplain);
            return(builder.build());
        }
        public virtual void test_pvExplain()
        {
            ExplainMap explain1 = PRODUCT_PRICER.explainPresentValue(CMS_ONE_LEG, RATES_PROVIDER, VOLATILITIES);

            assertEquals(explain1.get(ExplainKey.ENTRY_TYPE).get(), "CmsSwap");
            assertEquals(explain1.get(ExplainKey.LEGS).get().size(), 1);
            ExplainMap explain2 = PRODUCT_PRICER.explainPresentValue(CMS_TWO_LEGS, RATES_PROVIDER, VOLATILITIES);

            assertEquals(explain2.get(ExplainKey.ENTRY_TYPE).get(), "CmsSwap");
            assertEquals(explain2.get(ExplainKey.LEGS).get().size(), 2);
            ExplainMap explainCms   = CMS_LEG_PRICER.explainPresentValue(CMS_LEG, RATES_PROVIDER, VOLATILITIES);
            ExplainMap explainOther = SWAP_LEG_PRICER.explainPresentValue(CMS_TWO_LEGS.PayLeg.get(), RATES_PROVIDER);

            assertEquals(explain2.get(ExplainKey.LEGS).get().get(0), explainCms);
            assertEquals(explain2.get(ExplainKey.LEGS).get().get(1), explainOther);
        }