private static ImmutableList<CurveParameterSize> toOrder(RatesCurveGroupDefinition groupDefn) { return groupDefn.getCurveDefinitions().stream().map(def -> def.toCurveParameterSize()).collect(toImmutableList()); }
/** * Obtains a generator from an existing provider and definition. * * @param knownProvider the underlying known provider * @param groupDefn the curve group definition * @param refData the reference data to use * @return the generator */ public static ImmutableRatesProviderGenerator of( ImmutableRatesProvider knownProvider, RatesCurveGroupDefinition groupDefn, ReferenceData refData) { List<CurveDefinition> curveDefns = new ArrayList<>(); List<CurveMetadata> curveMetadata = new ArrayList<>(); SetMultimap<CurveName, Currency> discountNames = HashMultimap.create(); SetMultimap<CurveName, Index> indexNames = HashMultimap.create(); for (CurveDefinition curveDefn : groupDefn.getCurveDefinitions()) { curveDefns.add(curveDefn); curveMetadata.add(curveDefn.metadata(knownProvider.getValuationDate(), refData)); CurveName curveName = curveDefn.getName(); // A curve group is guaranteed to include an entry for every definition RatesCurveGroupEntry entry = groupDefn.findEntry(curveName).get(); Set<Currency> ccy = entry.getDiscountCurrencies(); discountNames.putAll(curveName, ccy); indexNames.putAll(curveName, entry.getIndices()); } return new ImmutableRatesProviderGenerator( knownProvider, curveDefns, curveMetadata, discountNames, indexNames); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3373707: // name return ((RatesCurveGroupDefinition) bean).getName(); case -1591573360: // entries return ((RatesCurveGroupDefinition) bean).getEntries(); case -336166639: // curveDefinitions return ((RatesCurveGroupDefinition) bean).getCurveDefinitions(); case 1051792832: // seasonalityDefinitions return ((RatesCurveGroupDefinition) bean).getSeasonalityDefinitions(); case -1730091410: // computeJacobian return ((RatesCurveGroupDefinition) bean).isComputeJacobian(); case -2061625469: // computePvSensitivityToMarketQuote return ((RatesCurveGroupDefinition) bean).isComputePvSensitivityToMarketQuote(); } return super.propertyGet(bean, propertyName, quiet); }
ImmutableList<CurveDefinition> curveGroups = group.getCurveDefinitions();
public void check_pv_with_measures() { ImmutableRatesProvider multicurve = CALIBRATOR.calibrate(GROUP_DEFINITION, MARKET_QUOTES, REF_DATA); // the trades used for calibration List<ResolvedTrade> trades = new ArrayList<>(); ImmutableList<CurveDefinition> curveGroups = GROUP_DEFINITION.getCurveDefinitions(); for (CurveDefinition entry : curveGroups) { ImmutableList<CurveNode> nodes = entry.getNodes(); for (CurveNode node : nodes) { trades.add(node.resolvedTrade(1d, MARKET_QUOTES, REF_DATA)); } } // Check PV = 0 for (ResolvedTrade trade : trades) { double pv = PV_MEASURES.value(trade, multicurve); assertEquals(pv, 0.0, TOLERANCE_PV); } }
public void calibrate_ts_empty() { MarketData mad = CALIBRATOR_SYNTHETIC.marketData(GROUPS_SYN_EUR, MULTICURVE_INPUT_EUR_TSEMPTY, REF_DATA); RatesProvider multicurveSyn = CALIBRATOR_SYNTHETIC.calibrate(GROUPS_SYN_EUR, MULTICURVE_INPUT_EUR_TSEMPTY, REF_DATA); for (CurveDefinition entry : GROUPS_SYN_EUR.getCurveDefinitions()) { ImmutableList<CurveNode> nodes = entry.getNodes(); for (CurveNode node : nodes) { ResolvedTrade trade = node.resolvedTrade(1d, mad, REF_DATA); double mqIn = MQ_MEASURES.value(trade, MULTICURVE_INPUT_EUR_TSEMPTY); double mqSy = MQ_MEASURES.value(trade, multicurveSyn); assertEquals(mqIn, mqSy, TOLERANCE_MQ); } } assertEquals(mad.getTimeSeriesIds(), ImmutableSet.of()); }
public void test_bind() { RatesCurveGroupDefinition test = RatesCurveGroupDefinition.builder() .name(CurveGroupName.of("Test")) .addCurve(CURVE_DEFN1, GBP, GBP_LIBOR_1M, GBP_LIBOR_3M) .addForwardCurve(CURVE_DEFN_I, GB_RPI) .addSeasonality(CURVE_NAME_I, SEASONALITY_ADDITIVE_DEF) .build(); LocalDate valuationDate = LocalDate.of(2015, 11, 10); LocalDate lastFixingDate = LocalDate.of(2015, 10, 31); LocalDate otherFixingDate = LocalDate.of(2015, 9, 30); double lastFixingValue = 234.56; Map<Index, LocalDateDoubleTimeSeries> map = ImmutableMap.of(GB_RPI, LocalDateDoubleTimeSeries.builder() .put(lastFixingDate, 234.56).put(otherFixingDate, lastFixingValue - 1).build()); RatesCurveGroupDefinition testBound = test.bindTimeSeries(valuationDate, map); List<CurveDefinition> list = testBound.getCurveDefinitions(); assertEquals(list.size(), 2); assertTrue(list.get(0) instanceof InterpolatedNodalCurveDefinition); assertTrue(list.get(1) instanceof InflationNodalCurveDefinition); InflationNodalCurveDefinition seasonDef = (InflationNodalCurveDefinition) list.get(1); assertEquals(seasonDef.getCurveWithoutFixingDefinition(), CURVE_DEFN_I); assertEquals(seasonDef.getLastFixingMonth(), YearMonth.from(lastFixingDate)); assertEquals(seasonDef.getLastFixingValue(), lastFixingValue); assertEquals(seasonDef.getName(), CURVE_NAME_I); assertEquals(seasonDef.getSeasonalityDefinition(), SEASONALITY_ADDITIVE_DEF); assertEquals(seasonDef.getYValueType(), ValueType.PRICE_INDEX); }
public void test_bind_after_last_fixing() { RatesCurveGroupDefinition test = RatesCurveGroupDefinition.builder() .name(CurveGroupName.of("Test")) .addCurve(CURVE_DEFN1, GBP, GBP_LIBOR_1M, GBP_LIBOR_3M) .addForwardCurve(CURVE_DEFN_I, GB_RPI) .addSeasonality(CURVE_NAME_I, SEASONALITY_ADDITIVE_DEF) .build(); LocalDate valuationDate = LocalDate.of(2015, 10, 15); LocalDate lastFixingDate = LocalDate.of(2015, 10, 31); LocalDate otherFixingDate = LocalDate.of(2015, 9, 30); LocalDate other2FixingDate = LocalDate.of(2015, 8, 31); double lastFixingValue = 234.56; Map<Index, LocalDateDoubleTimeSeries> map = ImmutableMap.of(GB_RPI, LocalDateDoubleTimeSeries.builder() .put(lastFixingDate, lastFixingValue).put(otherFixingDate, lastFixingValue - 1.0) .put(other2FixingDate, lastFixingValue - 2.0).build()); RatesCurveGroupDefinition testBound = test.bindTimeSeries(valuationDate, map); List<CurveDefinition> list = testBound.getCurveDefinitions(); assertEquals(list.size(), 2); assertTrue(list.get(0) instanceof InterpolatedNodalCurveDefinition); assertTrue(list.get(1) instanceof InflationNodalCurveDefinition); InflationNodalCurveDefinition seasonDef = (InflationNodalCurveDefinition) list.get(1); assertEquals(seasonDef.getCurveWithoutFixingDefinition(), CURVE_DEFN_I); assertEquals(seasonDef.getLastFixingMonth(), YearMonth.from(otherFixingDate)); assertEquals(seasonDef.getLastFixingValue(), lastFixingValue - 1.0); assertEquals(seasonDef.getName(), CURVE_NAME_I); assertEquals(seasonDef.getSeasonalityDefinition(), SEASONALITY_ADDITIVE_DEF); assertEquals(seasonDef.getYValueType(), ValueType.PRICE_INDEX); }
CALIBRATOR.calibrate(CURVE_GROUP_CONFIG, ALL_QUOTES, REF_DATA); ImmutableList<CurveDefinition> definitions = CURVE_GROUP_CONFIG.getCurveDefinitions();
ImmutableList<CurveDefinition> curveGroups = GROUP_DEFINITION.getCurveDefinitions(); ImmutableList.Builder<CurveParameterSize> builder = ImmutableList.builder(); for (CurveDefinition entry : curveGroups) {
public void test_bind_no_seasonality() { RatesCurveGroupDefinition test = RatesCurveGroupDefinition.builder() .name(CurveGroupName.of("Test")) .addCurve(CURVE_DEFN1, GBP, GBP_LIBOR_1M, GBP_LIBOR_3M) .addForwardCurve(CURVE_DEFN_I, GB_RPI) .build(); LocalDate valuationDate = LocalDate.of(2015, 11, 10); LocalDate lastFixingDate = LocalDate.of(2015, 10, 31); LocalDate otherFixingDate = LocalDate.of(2015, 9, 30); double lastFixingValue = 234.56; Map<Index, LocalDateDoubleTimeSeries> map = ImmutableMap.of(GB_RPI, LocalDateDoubleTimeSeries.builder() .put(lastFixingDate, 234.56).put(otherFixingDate, lastFixingValue - 1).build()); RatesCurveGroupDefinition testBound = test.bindTimeSeries(valuationDate, map); List<CurveDefinition> list = testBound.getCurveDefinitions(); assertEquals(list.size(), 2); assertTrue(list.get(0) instanceof InterpolatedNodalCurveDefinition); assertTrue(list.get(1) instanceof InflationNodalCurveDefinition); InflationNodalCurveDefinition seasonDef = (InflationNodalCurveDefinition) list.get(1); assertEquals(seasonDef.getCurveWithoutFixingDefinition(), CURVE_DEFN_I); assertEquals(seasonDef.getLastFixingMonth(), YearMonth.from(lastFixingDate)); assertEquals(seasonDef.getLastFixingValue(), lastFixingValue); assertEquals(seasonDef.getName(), CURVE_NAME_I); assertEquals(seasonDef.getYValueType(), ValueType.PRICE_INDEX); // Check the default assertTrue(seasonDef.getSeasonalityDefinition().getSeasonalityMonthOnMonth() .equalWithTolerance(DoubleArray.filled(12, 1d), 1.0E-10)); assertEquals(seasonDef.getSeasonalityDefinition().getAdjustmentType(), ShiftType.SCALED); }
public void market_data() { RatesCurveGroupDefinition group = GROUPS_SYN_EUR; RatesProvider multicurveTsLarge = MULTICURVE_INPUT_EUR_TSEMPTY.toBuilder().timeSeries(TS_LARGE).build(); MarketData madTsEmpty = CALIBRATOR_SYNTHETIC.marketData(group, MULTICURVE_INPUT_EUR_TSEMPTY, REF_DATA); MarketData madTsLarge = CALIBRATOR_SYNTHETIC.marketData(group, multicurveTsLarge, REF_DATA); assertEquals(madTsEmpty.getValuationDate(), VALUATION_DATE); for (CurveDefinition entry : group.getCurveDefinitions()) { ImmutableList<CurveNode> nodes = entry.getNodes(); for (CurveNode node : nodes) { ResolvedTrade tradeTsEmpty = node.resolvedTrade(1d, madTsEmpty, REF_DATA); double mqTsEmpty = MQ_MEASURES.value(tradeTsEmpty, MULTICURVE_INPUT_EUR_TSEMPTY); assertEquals(mqTsEmpty, (Double) madTsEmpty.getValue(node.requirements().iterator().next()), TOLERANCE_MQ); ResolvedTrade tradeTsLarge = node.resolvedTrade(1d, madTsLarge, REF_DATA); double mqTsLarge = MQ_MEASURES.value(tradeTsLarge, multicurveTsLarge); assertEquals(mqTsLarge, (Double) madTsLarge.getValue(node.requirements().iterator().next()), TOLERANCE_MQ); // Market Quote for Fixed v ibor swaps should have changed with the fixing if ((tradeTsLarge instanceof ResolvedSwapTrade) && // Swap Fixed v Ibor (((ResolvedSwapTrade) tradeTsLarge)).getProduct().getLegs(SwapLegType.IBOR).size() == 1) { assertTrue(Math.abs(mqTsEmpty - mqTsLarge) > TOLERANCE_MQ); } } } assertEquals(madTsEmpty.getTimeSeriesIds(), ImmutableSet.of()); assertEquals( madTsLarge.getTimeSeriesIds(), ImmutableSet.of(IndexQuoteId.of(EUR_EURIBOR_3M), IndexQuoteId.of(EUR_EURIBOR_6M))); }
public void calibrate_ts_vd() { SyntheticRatesCurveCalibrator calibratorDefault = SyntheticRatesCurveCalibrator.standard(); MarketData mad = calibratorDefault.marketData(GROUPS_SYN_EUR, MULTICURVE_INPUT_EUR_TSLARGE, REF_DATA); RatesProvider multicurveSyn = CALIBRATOR_SYNTHETIC.calibrate(GROUPS_SYN_EUR, MULTICURVE_INPUT_EUR_TSLARGE, REF_DATA); for (CurveDefinition entry : GROUPS_SYN_EUR.getCurveDefinitions()) { ImmutableList<CurveNode> nodes = entry.getNodes(); for (CurveNode node : nodes) { ResolvedTrade trade = node.resolvedTrade(1d, mad, REF_DATA); double mqIn = MQ_MEASURES.value(trade, MULTICURVE_INPUT_EUR_TSLARGE); double mqSy = MQ_MEASURES.value(trade, multicurveSyn); assertEquals(mqIn, mqSy, TOLERANCE_MQ); } } }
FWD3_FRA_TENORS, FWD3_IRS_TENORS, fwd3IdValue, FWD6_FRA_TENORS, FWD6_IRS_TENORS, fwd6IdValue); ImmutableList<CurveDefinition> definitions = config.getCurveDefinitions();
FWD3_FRA_TENORS, FWD3_IRS_TENORS, fwd3IdValue, FWD6_FRA_TENORS, FWD6_IRS_TENORS, fwd6IdValue); ImmutableList<CurveDefinition> definitions = config.getCurveDefinitions();