private ImmutableLegalEntityDiscountingProvider replaceRepoCurve( ImmutableLegalEntityDiscountingProvider ratesProvider, Pair<RepoGroup, Currency> rgCcy, DiscountFactors discountFactors) { Map<Pair<RepoGroup, Currency>, DiscountFactors> curves = new HashMap<>(); curves.putAll(ratesProvider.getRepoCurves()); curves.put(rgCcy, discountFactors); return ratesProvider.toBuilder() .repoCurves(curves) .build(); }
private ImmutableLegalEntityDiscountingProvider replaceIssuerCurve( ImmutableLegalEntityDiscountingProvider ratesProvider, Pair<LegalEntityGroup, Currency> legCcy, DiscountFactors discountFactors) { Map<Pair<LegalEntityGroup, Currency>, DiscountFactors> curves = new HashMap<>(); curves.putAll(ratesProvider.getIssuerCurves()); curves.put(legCcy, discountFactors); return ratesProvider.toBuilder() .issuerCurves(curves) .build(); }
private <T> CurrencyParameterSensitivities sensitivity( ImmutableLegalEntityDiscountingProvider provider, Function<ImmutableLegalEntityDiscountingProvider, CurrencyAmount> valueFn, MetaProperty<ImmutableMap<Pair<T, Currency>, DiscountFactors>> metaProperty, CurrencyAmount valueInit) { ImmutableMap<Pair<T, Currency>, DiscountFactors> baseCurves = metaProperty.get(provider); CurrencyParameterSensitivities result = CurrencyParameterSensitivities.empty(); for (Pair<T, Currency> key : baseCurves.keySet()) { DiscountFactors discountFactors = baseCurves.get(key); Curve curve = checkDiscountFactors(discountFactors); int paramCount = curve.getParameterCount(); double[] sensitivity = new double[paramCount]; for (int i = 0; i < paramCount; i++) { Curve dscBumped = curve.withParameter(i, curve.getParameter(i) + shift); Map<Pair<T, Currency>, DiscountFactors> mapBumped = new HashMap<>(baseCurves); mapBumped.put(key, createDiscountFactors(discountFactors, dscBumped)); ImmutableLegalEntityDiscountingProvider providerDscBumped = provider.toBuilder().set(metaProperty, mapBumped).build(); sensitivity[i] = (valueFn.apply(providerDscBumped).getAmount() - valueInit.getAmount()) / shift; } result = result.combinedWith( curve.createParameterSensitivity(valueInit.getCurrency(), DoubleArray.copyOf(sensitivity))); } return result; }