//------------------------------------------------------------------------- public virtual void test_fxRate_separate() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).build(); assertEquals(test.fxRate(USD, GBP), 1 / FX_GBP_USD, 0d); assertEquals(test.fxRate(USD, USD), 1d, 0d); }
public virtual void test_discountFactors_notKnown() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).build(); assertThrowsIllegalArg(() => test.discountFactors(GBP)); assertThrowsIllegalArg(() => test.discountFactor(GBP, LocalDate.of(2014, 7, 30))); }
//------------------------------------------------------------------------- public virtual void test_getCurves() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).build(); assertEquals(test.Curves.Count, 2); assertEquals(test.Curves[DISCOUNT_CURVE_GBP.Name], DISCOUNT_CURVE_GBP); assertEquals(test.Curves[DISCOUNT_CURVE_USD.Name], DISCOUNT_CURVE_USD); }
public virtual void test_getCurves_withGroup() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).build(); CurveGroupName group = CurveGroupName.of("GRP"); assertEquals(test.getCurves(group).Count, 2); assertEquals(test.getCurves(group)[CurveId.of(group, DISCOUNT_CURVE_GBP.Name)], DISCOUNT_CURVE_GBP); assertEquals(test.getCurves(group)[CurveId.of(group, DISCOUNT_CURVE_USD.Name)], DISCOUNT_CURVE_USD); }
//------------------------------------------------------------------------- public virtual void coverage() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).build(); coverImmutableBean(test); ImmutableRatesProvider test2 = ImmutableRatesProvider.builder(LocalDate.of(2014, 6, 27)).discountCurve(GBP, DISCOUNT_CURVE_GBP).build(); coverBeanEquals(test, test2); }
//------------------------------------------------------------------------- public virtual void test_builder() { LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.of(PREV_DATE, 0.62d); ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).timeSeries(GBP_USD_WM, ts).build(); assertEquals(test.ValuationDate, VAL_DATE); assertEquals(ImmutableRatesProvider.meta().timeSeries().get(test), ImmutableMap.of(GBP_USD_WM, ts)); assertSame(test.toImmutableRatesProvider(), test); }
//------------------------------------------------------------------------- public virtual void test_fxIndexRates() { LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d); ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).timeSeries(GBP_USD_WM, ts).build(); assertEquals(test.fxIndexRates(GBP_USD_WM).Index, GBP_USD_WM); assertEquals(test.fxIndexRates(GBP_USD_WM).Fixings, ts); assertEquals(test.TimeSeriesIndices, ImmutableSet.of(GBP_USD_WM)); }
//------------------------------------------------------------------------- public virtual void test_overnightIndexRates() { LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d); ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).overnightIndexCurve(USD_FED_FUND, FED_FUND_CURVE).timeSeries(USD_FED_FUND, ts).build(); assertEquals(test.overnightIndexRates(USD_FED_FUND).Index, USD_FED_FUND); assertEquals(test.overnightIndexRates(USD_FED_FUND).Fixings, ts); assertEquals(test.OvernightIndices, ImmutableSet.of(USD_FED_FUND)); assertEquals(test.TimeSeriesIndices, ImmutableSet.of(USD_FED_FUND)); }
//------------------------------------------------------------------------- public virtual void test_priceIndexValues() { LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d); ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).priceIndexCurve(GB_RPI, GBPRI_CURVE).timeSeries(GB_RPI, ts).build(); assertEquals(test.priceIndexValues(GB_RPI).Index, GB_RPI); assertEquals(test.priceIndexValues(GB_RPI).Fixings, ts); assertEquals(test.PriceIndices, ImmutableSet.of(GB_RPI)); assertEquals(test.TimeSeriesIndices, ImmutableSet.of(GB_RPI)); }
//------------------------------------------------------------------------- public virtual void test_iborIndexRates() { LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d); ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).iborIndexCurve(USD_LIBOR_3M, USD_LIBOR_CURVE).timeSeries(USD_LIBOR_3M, ts).build(); assertEquals(test.iborIndexRates(USD_LIBOR_3M).Index, USD_LIBOR_3M); assertEquals(test.iborIndexRates(USD_LIBOR_3M).Fixings, ts); assertEquals(test.IborIndices, ImmutableSet.of(USD_LIBOR_3M)); assertEquals(test.TimeSeriesIndices, ImmutableSet.of(USD_LIBOR_3M)); }
//------------------------------------------------------------------------- /// <summary> /// Combines a number of rates providers. /// <para> /// If the two providers have curves or time series for the same currency or index, /// an <seealso cref="IllegalAccessException"/> is thrown. /// The FxRateProviders is not populated with the given provider; no attempt is done on merging the embedded FX providers. /// /// </para> /// </summary> /// <param name="fx"> the FX provider for the resulting rate provider </param> /// <param name="providers"> the rates providers to be merged </param> /// <returns> the combined rates provider </returns> public static ImmutableRatesProvider combined(FxRateProvider fx, params ImmutableRatesProvider[] providers) { ArgChecker.isTrue(providers.Length > 0, "at least one provider requested"); ImmutableRatesProvider merged = ImmutableRatesProvider.builder(providers[0].ValuationDate).build(); foreach (ImmutableRatesProvider provider in providers) { merged = merged.combinedWith(provider, fx); } return(merged); }
//------------------------------------------------------------------------- public virtual void test_fxForwardRates() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).build(); DiscountFxForwardRates res = (DiscountFxForwardRates)test.fxForwardRates(CurrencyPair.of(GBP, USD)); assertEquals(res.BaseCurrencyDiscountFactors, ZeroRateDiscountFactors.of(GBP, VAL_DATE, DISCOUNT_CURVE_GBP)); assertEquals(res.CounterCurrencyDiscountFactors, ZeroRateDiscountFactors.of(USD, VAL_DATE, DISCOUNT_CURVE_USD)); assertEquals(res.CurrencyPair, CurrencyPair.of(GBP, USD)); assertEquals(res.FxRateProvider, FX_MATRIX); assertEquals(res.ValuationDate, VAL_DATE); }
public virtual void merge_illegal_arguments() { ImmutableRatesProvider test_dsc = ImmutableRatesProvider.builder(VAL_DATE).discountCurve(GBP, DISCOUNT_CURVE_GBP).build(); ImmutableRatesProvider test_ts = ImmutableRatesProvider.builder(VAL_DATE).timeSeries(GBP_USD_WM, TS).build(); ImmutableRatesProvider test_ibor = ImmutableRatesProvider.builder(VAL_DATE).iborIndexCurve(USD_LIBOR_3M, USD_LIBOR_CURVE).build(); ImmutableRatesProvider test_on = ImmutableRatesProvider.builder(VAL_DATE).overnightIndexCurve(USD_FED_FUND, FED_FUND_CURVE).build(); ImmutableRatesProvider test_pi = ImmutableRatesProvider.builder(VAL_DATE).priceIndexCurve(GB_RPI, GBPRI_CURVE).build(); assertThrowsIllegalArg(() => ImmutableRatesProvider.combined(FX_MATRIX, test_dsc, test_dsc)); assertThrowsIllegalArg(() => ImmutableRatesProvider.combined(FX_MATRIX, test_ts, test_ts)); assertThrowsIllegalArg(() => ImmutableRatesProvider.combined(FX_MATRIX, test_ibor, test_ibor)); assertThrowsIllegalArg(() => ImmutableRatesProvider.combined(FX_MATRIX, test_on, test_on)); assertThrowsIllegalArg(() => ImmutableRatesProvider.combined(FX_MATRIX, test_pi, test_pi)); }
public virtual void merge_content_2() { ImmutableRatesProvider test1 = ImmutableRatesProvider.builder(VAL_DATE).discountCurve(GBP, DISCOUNT_CURVE_GBP).timeSeries(GBP_USD_WM, TS).build(); ImmutableRatesProvider test2 = ImmutableRatesProvider.builder(VAL_DATE).discountCurve(USD, DISCOUNT_CURVE_USD).iborIndexCurve(USD_LIBOR_3M, USD_LIBOR_CURVE).overnightIndexCurve(USD_FED_FUND, FED_FUND_CURVE).priceIndexCurve(GB_RPI, GBPRI_CURVE).timeSeries(GB_RPI, TS).build(); ImmutableRatesProvider merged = ImmutableRatesProvider.combined(FX_MATRIX, test1, test2); assertEquals(merged.ValuationDate, VAL_DATE); assertEquals(merged.discountFactors(USD), DiscountFactors.of(USD, VAL_DATE, DISCOUNT_CURVE_USD)); assertEquals(merged.discountFactors(GBP), DiscountFactors.of(GBP, VAL_DATE, DISCOUNT_CURVE_GBP)); assertEquals(merged.iborIndexRates(USD_LIBOR_3M), IborIndexRates.of(USD_LIBOR_3M, VAL_DATE, USD_LIBOR_CURVE)); assertEquals(merged.overnightIndexRates(USD_FED_FUND), OvernightIndexRates.of(USD_FED_FUND, VAL_DATE, FED_FUND_CURVE)); assertEquals(merged.priceIndexValues(GB_RPI), PriceIndexValues.of(GB_RPI, VAL_DATE, GBPRI_CURVE, TS)); assertEquals(merged.timeSeries(GBP_USD_WM), TS); assertEquals(merged.FxRateProvider, FX_MATRIX); }
public virtual void pointAndParameterFx() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).build(); ImmutableRatesProvider test_gbp_up = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP_UP).discountCurve(USD, DISCOUNT_CURVE_USD).build(); ImmutableRatesProvider test_gbp_dw = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP_DOWN).discountCurve(USD, DISCOUNT_CURVE_USD).build(); ImmutableRatesProvider test_usd_up = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD_UP).build(); ImmutableRatesProvider test_usd_dw = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD_DOWN).build(); LocalDate matuirtyDate = GBP_USD_WM.calculateMaturityFromFixing(VAL_DATE, REF_DATA); double maturityTime = DAY_COUNT.relativeYearFraction(VAL_DATE, matuirtyDate); // GBP based FxIndexObservation obs = FxIndexObservation.of(GBP_USD_WM, VAL_DATE, REF_DATA); PointSensitivityBuilder sensiBuildCmpGBP = test.fxIndexRates(GBP_USD_WM).ratePointSensitivity(obs, GBP); FxIndexSensitivity sensiBuildExpGBP = FxIndexSensitivity.of(obs, GBP, USD, 1.0); assertTrue(sensiBuildCmpGBP.Equals(sensiBuildExpGBP)); double sense_gbp1 = 0.5 * (test_gbp_up.fxIndexRates(GBP_USD_WM).rate(obs, GBP) - test_gbp_dw.fxIndexRates(GBP_USD_WM).rate(obs, GBP)) / EPS_FD * (-maturityTime * GBP_DSC); double sense_usd1 = 0.5 * (test_usd_up.fxIndexRates(GBP_USD_WM).rate(obs, GBP) - test_usd_dw.fxIndexRates(GBP_USD_WM).rate(obs, GBP)) / EPS_FD * (-maturityTime * USD_DSC); PointSensitivityBuilder sensiBuildDecGBP = ZeroRateSensitivity.of(GBP, maturityTime, USD, sense_gbp1); sensiBuildDecGBP = sensiBuildDecGBP.combinedWith(ZeroRateSensitivity.of(USD, maturityTime, USD, sense_usd1)); CurrencyParameterSensitivities paramSensiCmpGBP = test.parameterSensitivity(sensiBuildCmpGBP.build().normalized()); CurrencyParameterSensitivities paramSensiExpGBP = test.parameterSensitivity(sensiBuildDecGBP.build().normalized()); assertTrue(paramSensiCmpGBP.equalWithTolerance(paramSensiExpGBP, EPS_FD)); // USD based PointSensitivityBuilder sensiBuildCmpUSD = test.fxIndexRates(GBP_USD_WM).ratePointSensitivity(obs, USD); FxIndexSensitivity sensiBuildExpUSD = FxIndexSensitivity.of(obs, USD, GBP, 1.0); assertTrue(sensiBuildCmpUSD.Equals(sensiBuildExpUSD)); double sense_gbp2 = 0.5 * (test_gbp_up.fxIndexRates(GBP_USD_WM).rate(obs, USD) - test_gbp_dw.fxIndexRates(GBP_USD_WM).rate(obs, USD)) / EPS_FD * (-maturityTime * GBP_DSC); double sense_usd2 = 0.5 * (test_usd_up.fxIndexRates(GBP_USD_WM).rate(obs, USD) - test_usd_dw.fxIndexRates(GBP_USD_WM).rate(obs, USD)) / EPS_FD * (-maturityTime * USD_DSC); PointSensitivityBuilder sensiBuildDecUSD = ZeroRateSensitivity.of(GBP, maturityTime, GBP, sense_gbp2); sensiBuildDecUSD = sensiBuildDecUSD.combinedWith(ZeroRateSensitivity.of(USD, maturityTime, GBP, sense_usd2)); CurrencyParameterSensitivities paramSensiCmpUSD = test.parameterSensitivity(sensiBuildCmpUSD.build().normalized()); CurrencyParameterSensitivities paramSensiExpUSD = test.parameterSensitivity(sensiBuildDecUSD.build().normalized()); assertTrue(paramSensiCmpUSD.equalWithTolerance(paramSensiExpUSD, EPS_FD)); }
public virtual void pointAndParameterPriceIndex() { double eps = 1.0e-13; LocalDate valuationDate = LocalDate.of(2014, 1, 22); DoubleArray x = DoubleArray.of(0.5, 1.0, 2.0); DoubleArray y = DoubleArray.of(224.2, 262.6, 277.5); CurveInterpolator interp = CurveInterpolators.NATURAL_CUBIC_SPLINE; string curveName = "GB_RPI_CURVE"; InterpolatedNodalCurve interpCurve = InterpolatedNodalCurve.of(Curves.prices(curveName), x, y, interp); ImmutableRatesProvider provider = ImmutableRatesProvider.builder(VAL_DATE).priceIndexCurve(GB_RPI, interpCurve).timeSeries(GB_RPI, LocalDateDoubleTimeSeries.of(date(2013, 11, 30), 200)).build(); double pointSensiValue = 2.5; YearMonth refMonth = YearMonth.from(valuationDate.plusMonths(9)); InflationRateSensitivity pointSensi = InflationRateSensitivity.of(PriceIndexObservation.of(GB_RPI, refMonth), pointSensiValue); CurrencyParameterSensitivities computed = provider.parameterSensitivity(pointSensi.build()); DoubleArray sensiComputed = computed.Sensitivities.get(0).Sensitivity; InflationRateSensitivity pointSensi1 = InflationRateSensitivity.of(PriceIndexObservation.of(GB_RPI, refMonth), 1); DoubleArray sensiExpectedUnit = provider.priceIndexValues(GB_RPI).parameterSensitivity(pointSensi1).Sensitivities.get(0).Sensitivity; assertTrue(sensiComputed.equalWithTolerance(sensiExpectedUnit.multipliedBy(pointSensiValue), eps)); }
//------------------------------------------------------------------------- public virtual void test_discountFactors() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).build(); assertEquals(test.discountFactors(GBP).Currency, GBP); }
public virtual void testSerializeDeserialize() { cycleBean(ImmutableRatesProvider.builder(VAL_DATE).build()); }
public virtual void test_fxRate_pair() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).build(); assertEquals(test.fxRate(CurrencyPair.of(USD, GBP)), 1 / FX_GBP_USD, 0d); }
public virtual void test_priceIndexValues_notKnown() { ImmutableRatesProvider test = ImmutableRatesProvider.builder(VAL_DATE).build(); assertThrowsIllegalArg(() => test.priceIndexValues(GB_RPI)); }