/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(ImmutableLegalEntityDiscountingProvider beanToCopy) { this.valuationDate = beanToCopy.getValuationDate(); this.repoCurveSecurityGroups = beanToCopy.getRepoCurveSecurityGroups(); this.repoCurveGroups = beanToCopy.getRepoCurveGroups(); this.repoCurves = beanToCopy.getRepoCurves(); this.issuerCurveGroups = beanToCopy.getIssuerCurveGroups(); this.issuerCurves = beanToCopy.getIssuerCurves(); }
@Override public IssuerCurveDiscountFactors issuerCurveDiscountFactors(LegalEntityId issuerId, Currency currency) { LegalEntityGroup legalEntityGroup = issuerCurveGroups.get(issuerId); if (legalEntityGroup == null) { throw new IllegalArgumentException("Unable to find map for ID: " + issuerId); } return issuerCurveDiscountFactors(legalEntityGroup, currency); }
@Override public RepoCurveDiscountFactors repoCurveDiscountFactors(LegalEntityId issuerId, Currency currency) { RepoGroup repoGroup = repoCurveGroups.get(issuerId); if (repoGroup == null) { throw new IllegalArgumentException("Unable to find map for ID: " + issuerId); } return repoCurveDiscountFactors(repoGroup, currency); }
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(); }
public void test_builder_noValuationDate() { ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_ISSUER, GBP), DSC_FACTORS_REPO)) .repoCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_REPO_ISSUER)) .build(); assertEquals( test.issuerCurveDiscountFactors(ID_ISSUER, GBP), IssuerCurveDiscountFactors.of(DSC_FACTORS_ISSUER, GROUP_ISSUER)); assertEquals(test.repoCurveDiscountFactors(ID_SECURITY, ID_ISSUER, GBP), RepoCurveDiscountFactors.of(DSC_FACTORS_REPO, GROUP_REPO_ISSUER)); assertEquals(test.repoCurveDiscountFactors(ID_ISSUER, GBP), RepoCurveDiscountFactors.of(DSC_FACTORS_REPO, GROUP_REPO_ISSUER)); assertEquals(test.getValuationDate(), DATE); }
private double sum(ImmutableLegalEntityDiscountingProvider provider) { double result = 0d; // repo curves ImmutableMap<Pair<RepoGroup, Currency>, DiscountFactors> mapIndex = provider.getRepoCurves(); for (Entry<Pair<RepoGroup, Currency>, DiscountFactors> entry : mapIndex.entrySet()) { InterpolatedNodalCurve curve = (InterpolatedNodalCurve) getCurve(entry.getValue()); result += sumSingle(curve); } // issuer curves ImmutableMap<Pair<LegalEntityGroup, Currency>, DiscountFactors> mapCurrency = provider.getIssuerCurves(); for (Entry<Pair<LegalEntityGroup, Currency>, DiscountFactors> entry : mapCurrency.entrySet()) { InterpolatedNodalCurve curve = (InterpolatedNodalCurve) getCurve(entry.getValue()); result += sumSingle(curve); } return result; }
public void test_curveParameterSensitivity() { ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_ISSUER, GBP), DSC_FACTORS_REPO)) .repoCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_REPO_ISSUER)) .valuationDate(DATE) .build(); LocalDate refDate = date(2018, 11, 24); IssuerCurveZeroRateSensitivity sensi1 = test.issuerCurveDiscountFactors(ID_ISSUER, GBP) .zeroRatePointSensitivity(refDate, GBP); RepoCurveZeroRateSensitivity sensi2 = test.repoCurveDiscountFactors(ID_SECURITY, ID_ISSUER, GBP) .zeroRatePointSensitivity(refDate, GBP); PointSensitivities sensi = PointSensitivities.of(sensi1, sensi2); CurrencyParameterSensitivities computed = test.parameterSensitivity(sensi); CurrencyParameterSensitivities expected = DSC_FACTORS_ISSUER.parameterSensitivity(sensi1.createZeroRateSensitivity()).combinedWith( DSC_FACTORS_REPO.parameterSensitivity(sensi2.createZeroRateSensitivity())); assertTrue(computed.equalWithTolerance(expected, 1.0e-12)); }
public void test_builder_noRepoRate() { ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER)) .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .build(); assertEquals( test.issuerCurveDiscountFactors(ID_ISSUER, GBP), IssuerCurveDiscountFactors.of(DSC_FACTORS_ISSUER, GROUP_ISSUER)); assertEquals(test.getValuationDate(), DATE); }
public void test_discountFactor_notFound() { LegalEntityId issuerId = LegalEntityId.of("OG-Ticker", "Issuer-2"); LegalEntityGroup issuerGroup = LegalEntityGroup.of("ISSUER2"); RepoGroup repoGroup = RepoGroup.of("ISSUER2 BND 5Y"); SecurityId securityId = SecurityId.of("OG-Ticker", "Issuer-2-bond-5Y"); ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER, issuerId, issuerGroup)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_SECURITY, GBP), DSC_FACTORS_REPO)) .repoCurveGroups(ImmutableMap.of(issuerId, repoGroup)) .repoCurveSecurityGroups(ImmutableMap.of(ID_SECURITY, GROUP_REPO_SECURITY)) .valuationDate(DATE) .build(); assertThrowsIllegalArg(() -> test.issuerCurveDiscountFactors(ID_ISSUER, USD)); assertThrowsIllegalArg(() -> test.issuerCurveDiscountFactors(LegalEntityId.of("OG-Ticker", "foo"), GBP)); assertThrowsIllegalArg(() -> test.issuerCurveDiscountFactors(issuerId, GBP)); assertThrowsIllegalArg(() -> test.repoCurveDiscountFactors(ID_SECURITY, ID_ISSUER, USD)); assertThrowsIllegalArg(() -> test.repoCurveDiscountFactors( SecurityId.of("OG-Ticker", "foo-bond"), LegalEntityId.of("OG-Ticker", "foo"), GBP)); assertThrowsIllegalArg(() -> test.repoCurveDiscountFactors(securityId, issuerId, GBP)); }
@Override public CurrencyParameterSensitivities parameterSensitivity(PointSensitivities pointSensitivities) { CurrencyParameterSensitivities sens = CurrencyParameterSensitivities.empty(); for (PointSensitivity point : pointSensitivities.getSensitivities()) { if (point instanceof RepoCurveZeroRateSensitivity) { RepoCurveZeroRateSensitivity pt = (RepoCurveZeroRateSensitivity) point; RepoCurveDiscountFactors factors = repoCurveDiscountFactors(pt.getRepoGroup(), pt.getCurveCurrency()); sens = sens.combinedWith(factors.parameterSensitivity(pt)); } else if (point instanceof IssuerCurveZeroRateSensitivity) { IssuerCurveZeroRateSensitivity pt = (IssuerCurveZeroRateSensitivity) point; IssuerCurveDiscountFactors factors = issuerCurveDiscountFactors(pt.getLegalEntityGroup(), pt.getCurveCurrency()); sens = sens.combinedWith(factors.parameterSensitivity(pt)); } } return sens; }
private static LegalEntityDiscountingProvider createRatesProvider(LocalDate valuationDate) { DiscountFactors dscRepo = ZeroRateDiscountFactors.of(EUR, valuationDate, CURVE_REPO); DiscountFactors dscIssuer = ZeroRateDiscountFactors.of(EUR, valuationDate, CURVE_ISSUER); LegalEntityDiscountingProvider provider = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, EUR), dscIssuer)) .issuerCurveGroups(ImmutableMap.of(ISSUER_ID, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO, EUR), dscRepo)) .repoCurveSecurityGroups(ImmutableMap.of(SECURITY_ID, GROUP_REPO)) .valuationDate(valuationDate) .build(); return provider; }
public void test_findData() { ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_ISSUER, GBP), DSC_FACTORS_REPO)) .repoCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_REPO_ISSUER)) .valuationDate(DATE) .build(); assertEquals(test.findData(DSC_FACTORS_ISSUER.getCurve().getName()), Optional.of(DSC_FACTORS_ISSUER.getCurve())); assertEquals(test.findData(DSC_FACTORS_REPO.getCurve().getName()), Optional.of(DSC_FACTORS_REPO.getCurve())); assertEquals(test.findData(CurveName.of("Rubbish")), Optional.empty()); }
public void test_curveParameterSensitivity_noSensi() { ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_ISSUER, GBP), DSC_FACTORS_REPO)) .repoCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_REPO_ISSUER)) .valuationDate(DATE) .build(); ZeroRateSensitivity sensi = ZeroRateSensitivity.of(USD, DSC_FACTORS_ISSUER.relativeYearFraction(date(2018, 11, 24)), 25d); CurrencyParameterSensitivities computed = test.parameterSensitivity(sensi.build()); assertEquals(computed, CurrencyParameterSensitivities.empty()); }
@Override public ImmutableLegalEntityDiscountingProvider build() { preBuild(this); return new ImmutableLegalEntityDiscountingProvider( valuationDate, repoCurveSecurityGroups, repoCurveGroups, repoCurves, issuerCurveGroups, issuerCurves); }
public void test_builder() { ImmutableLegalEntityDiscountingProvider test = ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, GBP), DSC_FACTORS_ISSUER)) .issuerCurveGroups(ImmutableMap.of(ID_ISSUER, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO_SECURITY, GBP), DSC_FACTORS_REPO)) .repoCurveSecurityGroups(ImmutableMap.of(ID_SECURITY, GROUP_REPO_SECURITY)) .valuationDate(DATE) .build(); assertEquals( test.issuerCurveDiscountFactors(ID_ISSUER, GBP), IssuerCurveDiscountFactors.of(DSC_FACTORS_ISSUER, GROUP_ISSUER)); assertEquals(test.repoCurveDiscountFactors(ID_SECURITY, ID_ISSUER, GBP), RepoCurveDiscountFactors.of(DSC_FACTORS_REPO, GROUP_REPO_SECURITY)); assertThrowsIllegalArg(() -> test.repoCurveDiscountFactors(ID_ISSUER, GBP)); assertEquals(test.getValuationDate(), DATE); }
private double sumCombine(ImmutableLegalEntityDiscountingProvider provider) { double result = 0d; // repo curves ImmutableMap<Pair<RepoGroup, Currency>, DiscountFactors> mapCurrency = provider.getRepoCurves(); for (Entry<Pair<RepoGroup, Currency>, DiscountFactors> entry : mapCurrency.entrySet()) { CombinedCurve curve = (CombinedCurve) getCurve(entry.getValue()); result += sumSingle((InterpolatedNodalCurve) curve.split().get(0)); result += sumSingle((InterpolatedNodalCurve) curve.split().get(1)); } // issuer curves ImmutableMap<Pair<LegalEntityGroup, Currency>, DiscountFactors> mapIndex = provider.getIssuerCurves(); for (Entry<Pair<LegalEntityGroup, Currency>, DiscountFactors> entry : mapIndex.entrySet()) { CombinedCurve curve = (CombinedCurve) getCurve(entry.getValue()); result += sumSingle((InterpolatedNodalCurve) curve.split().get(0)); result += sumSingle((InterpolatedNodalCurve) curve.split().get(1)); } return result; }
/** * Obtains legal entity discounting rates provider from valuation date. * * @param valuationDate the valuation date * @return the discounting rates provider */ public static LegalEntityDiscountingProvider getLegalEntityDiscountingProvider(LocalDate valuationDate) { DiscountFactors dscIssuer = ZeroRateDiscountFactors.of(USD, valuationDate, ISSUER_CURVE); DiscountFactors dscRepo = ZeroRateDiscountFactors.of(USD, valuationDate, REPO_CURVE); return ImmutableLegalEntityDiscountingProvider.builder() .issuerCurves(ImmutableMap.of(Pair.of(GROUP_ISSUER, USD), dscIssuer)) .issuerCurveGroups(ImmutableMap.of(ISSUER_ID, GROUP_ISSUER)) .repoCurves(ImmutableMap.of(Pair.of(GROUP_REPO, USD), dscRepo)) .repoCurveGroups(ImmutableMap.of(ISSUER_ID, GROUP_REPO)) .build(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 113107279: // valuationDate return ((ImmutableLegalEntityDiscountingProvider) bean).getValuationDate(); case -1749299407: // repoCurveSecurityGroups return ((ImmutableLegalEntityDiscountingProvider) bean).getRepoCurveSecurityGroups(); case -1279842095: // repoCurveGroups return ((ImmutableLegalEntityDiscountingProvider) bean).getRepoCurveGroups(); case 587630454: // repoCurves return ((ImmutableLegalEntityDiscountingProvider) bean).getRepoCurves(); case 1830129450: // issuerCurveGroups return ((ImmutableLegalEntityDiscountingProvider) bean).getIssuerCurveGroups(); case -1909076611: // issuerCurves return ((ImmutableLegalEntityDiscountingProvider) bean).getIssuerCurves(); } return super.propertyGet(bean, propertyName, quiet); }
for (Entry<Pair<LegalEntityGroup, Currency>, DiscountFactors> entry : immProv.getIssuerCurves().entrySet()) { Pair<LegalEntityGroup, Currency> legCcy = entry.getKey(); Currency currency = legCcy.getSecond(); for (Entry<Pair<RepoGroup, Currency>, DiscountFactors> entry : immProv.getRepoCurves().entrySet()) { Pair<RepoGroup, Currency> rgCcy = entry.getKey(); Currency currency = rgCcy.getSecond();