private RatesCurveGroupDefinitionBuilder merge(RatesCurveGroupEntry newEntry, CurveDefinition curveDefinition) { curveDefinitions.put(curveDefinition.getName(), curveDefinition); return mergeEntry(newEntry); }
private CurveMetadata childMetadata( CurveMetadata metadata, CurveDefinition curveDefn, Map<CurveName, JacobianCalibrationMatrix> jacobians, Map<CurveName, DoubleArray> sensitivitiesMarketQuote) { JacobianCalibrationMatrix jacobian = jacobians.get(curveDefn.getName()); CurveMetadata metadataResult = metadata; if (jacobian != null) { metadataResult = metadata.withInfo(CurveInfoType.JACOBIAN, jacobian); } DoubleArray sensitivity = sensitivitiesMarketQuote.get(curveDefn.getName()); if (sensitivity != null) { metadataResult = metadataResult.withInfo(CurveInfoType.PV_SENSITIVITY_TO_MARKET_QUOTE, sensitivity); } return metadataResult; }
/** * Returns a copy of this object containing the specified curve definitions. * <p> * Curves are ignored if there is no entry in this definition with the same curve name. * * @param curveDefinitions curve definitions * @return a copy of this object containing the specified curve definitions */ public RatesCurveGroupDefinition withCurveDefinitions(List<CurveDefinition> curveDefinitions) { Set<CurveName> curveNames = entries.stream().map(entry -> entry.getCurveName()).collect(toSet()); List<CurveDefinition> filteredDefinitions = curveDefinitions.stream().filter(def -> curveNames.contains(def.getName())).collect(toImmutableList()); return new RatesCurveGroupDefinition( name, entries, filteredDefinitions, seasonalityDefinitions, computeJacobian, computePvSensitivityToMarketQuote); }
/** * Converts this definition to the summary form. * <p> * The {@link CurveParameterSize} class provides a summary of this definition * consisting of the name and parameter size. * * @return the summary form */ public default CurveParameterSize toCurveParameterSize() { return CurveParameterSize.of(getName(), getParameterCount()); }
/** * Package-private constructor used by the builder. * * @param name the name of the curve group * @param entries details of the curves in the group * @param curveDefinitions definitions which specify how the curves are calibrated */ @ImmutableConstructor RatesCurveGroupDefinition( CurveGroupName name, Collection<RatesCurveGroupEntry> entries, Collection<? extends CurveDefinition> curveDefinitions, Map<CurveName, SeasonalityDefinition> seasonalityDefinitions, boolean computeJacobian, boolean computePvSensitivityToMarketQuote) { this.name = ArgChecker.notNull(name, "name"); this.entries = ImmutableList.copyOf(entries); this.curveDefinitions = ImmutableList.copyOf(curveDefinitions); this.entriesByName = entries.stream().collect(toImmutableMap(entry -> entry.getCurveName(), entry -> entry)); this.curveDefinitionsByName = curveDefinitions.stream().collect(toImmutableMap(def -> def.getName(), def -> def)); this.computeJacobian = computeJacobian; this.computePvSensitivityToMarketQuote = computePvSensitivityToMarketQuote; this.seasonalityDefinitions = ImmutableMap.copyOf(seasonalityDefinitions); validate(); }
/** * 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); }
CurveDefinition curveDefn = curveDefinitions.get(i); CurveMetadata metadata = curveMetadata.get(i); CurveName name = curveDefn.getName();
/** * Adds the definition of a discount curve to the curve group definition. * * @param curveDefinition the discount curve configuration * @param otherCurrencies additional currencies for which the curve can provide discount factors * @param currency the currency for which the curve provides discount rates * @return this builder */ public RatesCurveGroupDefinitionBuilder addDiscountCurve( CurveDefinition curveDefinition, Currency currency, Currency... otherCurrencies) { ArgChecker.notNull(curveDefinition, "curveDefinition"); ArgChecker.notNull(currency, "currency"); RatesCurveGroupEntry entry = RatesCurveGroupEntry.builder() .curveName(curveDefinition.getName()) .discountCurrencies(ImmutableSet.copyOf(Lists.asList(currency, otherCurrencies))) .build(); return merge(entry, curveDefinition); }
private void assertDefinition(RatesCurveGroupDefinition defn) { assertEquals(defn.getName(), CurveGroupName.of("Default")); assertEquals(defn.getEntries().size(), 3); assertEquals(defn.getSeasonalityDefinitions().size(), 1); assertEquals(defn.getSeasonalityDefinitions().get(CurveName.of("USD-CPI")).getAdjustmentType(), ShiftType.SCALED); RatesCurveGroupEntry entry0 = findEntry(defn, "USD-Disc"); RatesCurveGroupEntry entry1 = findEntry(defn, "USD-3ML"); RatesCurveGroupEntry entry2 = findEntry(defn, "USD-CPI"); CurveDefinition defn0 = defn.findCurveDefinition(entry0.getCurveName()).get(); CurveDefinition defn1 = defn.findCurveDefinition(entry1.getCurveName()).get(); CurveDefinition defn2 = defn.findCurveDefinition(entry2.getCurveName()).get(); assertEquals(entry0.getDiscountCurrencies(), ImmutableSet.of(Currency.USD)); assertEquals(entry0.getIndices(), ImmutableSet.of()); assertEquals(defn0.getName(), CurveName.of("USD-Disc")); assertEquals(defn0.getYValueType(), ValueType.ZERO_RATE); assertEquals(defn0.getParameterCount(), 17); assertEquals(entry1.getDiscountCurrencies(), ImmutableSet.of()); assertEquals(entry1.getIndices(), ImmutableSet.of(IborIndices.USD_LIBOR_3M)); assertEquals(defn1.getName(), CurveName.of("USD-3ML")); assertEquals(defn1.getYValueType(), ValueType.ZERO_RATE); assertEquals(defn1.getParameterCount(), 27); assertEquals(entry2.getDiscountCurrencies(), ImmutableSet.of()); assertEquals(entry2.getIndices(), ImmutableSet.of(PriceIndices.US_CPI_U)); assertEquals(defn2.getName(), CurveName.of("USD-CPI")); assertEquals(defn2.getYValueType(), ValueType.PRICE_INDEX); assertEquals(defn2.getParameterCount(), 2); }
/** * Adds the definition of a curve to the curve group definition which is used to provide * discount rates and forward rates. * * @param curveDefinition the definition of the forward curve * @param currency the currency for which the curve provides discount rates * @param index the index for which the curve provides forward rates * @param otherIndices the additional indices for which the curve provides forward rates * @return this builder */ public RatesCurveGroupDefinitionBuilder addCurve( CurveDefinition curveDefinition, Currency currency, RateIndex index, RateIndex... otherIndices) { ArgChecker.notNull(curveDefinition, "curveDefinition"); ArgChecker.notNull(currency, "currency"); ArgChecker.notNull(index, "index"); RatesCurveGroupEntry entry = RatesCurveGroupEntry.builder() .curveName(curveDefinition.getName()) .discountCurrencies(ImmutableSet.of(currency)) .indices(indices(index, otherIndices)) .build(); return merge(entry, curveDefinition); }
/** * Adds the definition of a forward curve to the curve group definition. * * @param curveDefinition the definition of the forward curve * @param index the index for which the curve provides forward rates * @param otherIndices the additional indices for which the curve provides forward rates * @return this builder */ public RatesCurveGroupDefinitionBuilder addForwardCurve( CurveDefinition curveDefinition, Index index, Index... otherIndices) { ArgChecker.notNull(curveDefinition, "curveDefinition"); ArgChecker.notNull(index, "index"); RatesCurveGroupEntry entry = RatesCurveGroupEntry.builder() .curveName(curveDefinition.getName()) .indices(indices(index, otherIndices)) .build(); return merge(entry, curveDefinition); }