private System.Func <ResolvedCdsTrade, DoubleArray> getParSpreadSensitivityFunction(CreditRatesProvider ratesProvider, CurveName curveName, Currency currency, ReferenceData refData)
 {
     System.Func <ResolvedCdsTrade, DoubleArray> func = (ResolvedCdsTrade trade) =>
     {
         PointSensitivities point = tradePricer.parSpreadSensitivity(trade, ratesProvider, refData);
         return(ratesProvider.parameterSensitivity(point).getSensitivity(curveName, currency).Sensitivity);
     };
     return(func);
 }
        public virtual void test_parameterSensitivity()
        {
            ZeroRateSensitivity            zeroPt   = ZeroRateSensitivity.of(USD, 10d, 5d);
            CreditCurveZeroRateSensitivity creditPt = CreditCurveZeroRateSensitivity.of(LEGAL_ENTITY_ABC, JPY, 2d, 3d);
            FxForwardSensitivity           fxPt     = FxForwardSensitivity.of(CurrencyPair.of(JPY, USD), USD, LocalDate.of(2017, 2, 14), 15d);
            CreditRatesProvider            test     = ImmutableCreditRatesProvider.builder().creditCurves(ImmutableMap.of(Pair.of(LEGAL_ENTITY_ABC, USD), LegalEntitySurvivalProbabilities.of(LEGAL_ENTITY_ABC, CRD_ABC_USD), Pair.of(LEGAL_ENTITY_ABC, JPY), LegalEntitySurvivalProbabilities.of(LEGAL_ENTITY_ABC, CRD_ABC_JPY), Pair.of(LEGAL_ENTITY_DEF, JPY), LegalEntitySurvivalProbabilities.of(LEGAL_ENTITY_DEF, CRD_DEF))).discountCurves(ImmutableMap.of(USD, DSC_USD, JPY, DSC_JPY)).recoveryRateCurves(ImmutableMap.of(LEGAL_ENTITY_ABC, RR_ABC, LEGAL_ENTITY_DEF, RR_DEF)).valuationDate(VALUATION).build();
            CurrencyParameterSensitivities computed = test.parameterSensitivity(zeroPt.combinedWith(creditPt).combinedWith(fxPt).build());
            CurrencyParameterSensitivities expected = DSC_USD.parameterSensitivity(zeroPt).combinedWith(LegalEntitySurvivalProbabilities.of(LEGAL_ENTITY_ABC, CRD_ABC_JPY).parameterSensitivity(creditPt));

            assertTrue(computed.equalWithTolerance(expected, 1.0e-14));
        }
示例#3
0
        //-------------------------------------------------------------------------
        public virtual void pvSensitivityTest()
        {
            PointSensitivityBuilder        point = PRICER.presentValueSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_STD, REF_DATA);
            CurrencyParameterSensitivities res   = RATES_PROVIDER.parameterSensitivity(point.build());
            CurrencyParameterSensitivities exp   = CALC_FD.sensitivity(RATES_PROVIDER, p => PRICER.presentValue(PRODUCT, p, SETTLEMENT_STD, CLEAN, REF_DATA));

            equalWithRelativeTolerance(res, exp, NOTIONAL * EPS);
            PointSensitivityBuilder        pointMarkit = PRICER_MARKIT.presentValueSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_STD, REF_DATA);
            CurrencyParameterSensitivities resMarkit   = RATES_PROVIDER.parameterSensitivity(pointMarkit.build());
            CurrencyParameterSensitivities expMarkit   = CALC_FD.sensitivity(RATES_PROVIDER, p => PRICER_MARKIT.presentValue(PRODUCT, p, SETTLEMENT_STD, CLEAN, REF_DATA));

            equalWithRelativeTolerance(resMarkit, expMarkit, NOTIONAL * EPS);
            PointSensitivityBuilder        pointOg = PRICER_OG.presentValueSensitivity(PRODUCT, RATES_PROVIDER, SETTLEMENT_STD, REF_DATA);
            CurrencyParameterSensitivities resOg   = RATES_PROVIDER.parameterSensitivity(pointOg.build());
            CurrencyParameterSensitivities expOg   = CALC_FD.sensitivity(RATES_PROVIDER, p => PRICER_OG.presentValue(PRODUCT, p, SETTLEMENT_STD, CLEAN, REF_DATA));

            equalWithRelativeTolerance(resOg, expOg, NOTIONAL * EPS);
        }
        public virtual void test_curveSensitivityMeasures()
        {
            double                         oneBp                   = 1e-4;
            PointSensitivities             pvPointSens             = PRICER.presentValueSensitivity(RTRADE, RATES_PROVIDER, CreditDataSet.REF_DATA);
            CurrencyParameterSensitivities pvParamSens             = RATES_PROVIDER.parameterSensitivity(pvPointSens);
            MultiCurrencyAmount            expectedPv01Cal         = pvParamSens.total().multipliedBy(oneBp);
            CurrencyParameterSensitivities expectedPv01CalBucketed = pvParamSens.multipliedBy(oneBp);
            CurrencyParameterSensitivity   expectedCs01Bucketed    = CS01_CALC.bucketedCs01(RTRADE, RATES_PROVIDER, CreditDataSet.REF_DATA);
            CurrencyAmount                 expectedCs01Parallel    = CS01_CALC.parallelCs01(RTRADE, RATES_PROVIDER, CreditDataSet.REF_DATA);
            PointSensitivities             pvPointSensOnSettle     = PRICER.presentValueOnSettleSensitivity(RTRADE, RATES_PROVIDER, CreditDataSet.REF_DATA);
            CurrencyParameterSensitivity   ir01                    = RATES_PROVIDER.singleDiscountCurveParameterSensitivity(pvPointSensOnSettle, USD);
            CurrencyAmount                 expectedIr01Cal         = ir01.total().multipliedBy(oneBp);
            CurrencyParameterSensitivity   expectedIr01CalBucketed = ir01.multipliedBy(oneBp);

            ISet <Measure> measures = ImmutableSet.of(Measures.PV01_CALIBRATED_SUM, Measures.PV01_CALIBRATED_BUCKETED, CreditMeasures.CS01_PARALLEL, CreditMeasures.CS01_BUCKETED, CreditMeasures.IR01_CALIBRATED_PARALLEL, CreditMeasures.IR01_CALIBRATED_BUCKETED);

            assertThat(FUNCTION.calculate(TRADE, measures, CreditDataSet.CDS_PARAMS, CreditDataSet.MARKET_DATA, CreditDataSet.REF_DATA)).containsEntry(Measures.PV01_CALIBRATED_SUM, Result.success(MultiCurrencyScenarioArray.of(ImmutableList.of(expectedPv01Cal)))).containsEntry(Measures.PV01_CALIBRATED_BUCKETED, Result.success(ScenarioArray.of(ImmutableList.of(expectedPv01CalBucketed)))).containsEntry(CreditMeasures.CS01_PARALLEL, Result.success(CurrencyScenarioArray.of(ImmutableList.of(expectedCs01Parallel)))).containsEntry(CreditMeasures.CS01_BUCKETED, Result.success(ScenarioArray.of(ImmutableList.of(expectedCs01Bucketed)))).containsEntry(CreditMeasures.IR01_CALIBRATED_PARALLEL, Result.success(CurrencyScenarioArray.of(ImmutableList.of(expectedIr01Cal)))).containsEntry(CreditMeasures.IR01_CALIBRATED_BUCKETED, Result.success(ScenarioArray.of(ImmutableList.of(expectedIr01CalBucketed))));
        }