//-------------------------------------------------------------------------
        public FunctionRequirements requirements(SecurityId securityId, LegalEntityId issuerId, Currency currency)
        {
            // repo
            RepoGroup repoKey = repoCurveSecurityGroups.get(securityId);

            if (repoKey == null)
            {
                repoKey = repoCurveGroups.get(issuerId);
            }
            if (repoKey == null)
            {
                throw new System.ArgumentException(Messages.format("Legal entity discounting lookup has no repo curve defined for '{}' and '{}'", securityId, issuerId));
            }
            CurveId repoCurveId = repoCurves.get(Pair.of(repoKey, currency));

            if (repoCurveId == null)
            {
                throw new System.ArgumentException(Messages.format("Legal entity discounting lookup has no repo curve defined for '{}' and '{}'", securityId, issuerId));
            }
            // issuer
            LegalEntityGroup issuerKey = issuerCurveGroups.get(issuerId);

            if (issuerKey == null)
            {
                throw new System.ArgumentException(Messages.format("Legal entity discounting lookup has no issuer curve defined for '{}'", issuerId));
            }
            CurveId issuerCurveId = issuerCurves.get(Pair.of(issuerKey, currency));

            if (issuerCurveId == null)
            {
                throw new System.ArgumentException(Messages.format("Legal entity discounting lookup has no issuer curve defined for '{}'", issuerId));
            }
            // result
            return(FunctionRequirements.builder().valueRequirements(ImmutableSet.of(repoCurveId, issuerCurveId)).outputCurrencies(currency).observableSource(observableSource).build());
        }
Example #2
0
            public override Builder set(string propertyName, object newValue)
            {
                switch (propertyName.GetHashCode())
                {
                case 1303639584:         // curveCurrency
                    this.curveCurrency = (Currency)newValue;
                    break;

                case -1731780257:         // yearFraction
                    this.yearFraction = (double?)newValue.Value;
                    break;

                case 575402001:         // currency
                    this.currency = (Currency)newValue;
                    break;

                case -899047453:         // legalEntityGroup
                    this.legalEntityGroup = (LegalEntityGroup)newValue;
                    break;

                case 564403871:         // sensitivity
                    this.sensitivity = (double?)newValue.Value;
                    break;

                default:
                    throw new NoSuchElementException("Unknown property: " + propertyName);
                }
                return(this);
            }
 private IssuerCurveDiscountFactors(DiscountFactors discountFactors, LegalEntityGroup legalEntityGroup)
 {
     JodaBeanUtils.notNull(discountFactors, "discountFactors");
     JodaBeanUtils.notNull(legalEntityGroup, "legalEntityGroup");
     this.discountFactors  = discountFactors;
     this.legalEntityGroup = legalEntityGroup;
 }
        //-------------------------------------------------------------------------
        public IssuerCurveDiscountFactors issuerCurveDiscountFactors(LegalEntityId issuerId, Currency currency)
        {
            LegalEntityGroup legalEntityGroup = lookup.IssuerCurveGroups.get(issuerId);

            if (legalEntityGroup == null)
            {
                throw new MarketDataNotFoundException("Unable to find issuer curve mapping for ID: " + issuerId);
            }
            return(issuerCurveDiscountFactors(legalEntityGroup, currency));
        }
        // lookup the discount factors for the legal entity group
        private IssuerCurveDiscountFactors issuerCurveDiscountFactors(LegalEntityGroup legalEntityGroup, Currency currency)
        {
            DiscountFactors discountFactors = issuerCurves.get(Pair.of(legalEntityGroup, currency));

            if (discountFactors == null)
            {
                throw new System.ArgumentException("Unable to find issuer curve: " + legalEntityGroup + ", " + currency);
            }
            return(IssuerCurveDiscountFactors.of(discountFactors, legalEntityGroup));
        }
        //-------------------------------------------------------------------------
        public IssuerCurveDiscountFactors issuerCurveDiscountFactors(LegalEntityId issuerId, Currency currency)
        {
            LegalEntityGroup legalEntityGroup = issuerCurveGroups.get(issuerId);

            if (legalEntityGroup == null)
            {
                throw new System.ArgumentException("Unable to find map for ID: " + issuerId);
            }
            return(issuerCurveDiscountFactors(legalEntityGroup, currency));
        }
Example #7
0
        public virtual void test_loadAllDates()
        {
            LocalDate sampleDate = ALL_DATES[3];     // 2017-04-21
            ImmutableList <LocalDate> expDates  = ImmutableList.of(LocalDate.of(2017, 0x7, 21), LocalDate.of(2017, 10, 0x7), LocalDate.of(2018, 4, 13), LocalDate.of(2019, 4, 12), LocalDate.of(2020, 3, 20), LocalDate.of(2021, 3, 19), LocalDate.of(2022, 3, 19), LocalDate.of(2023, 3, 17), LocalDate.of(2024, 6, 17), LocalDate.of(2025, 3, 18), LocalDate.of(2026, 3, 20), LocalDate.of(2027, 3, 20), LocalDate.of(2031, 12, 19), LocalDate.of(2037, 3, 17), LocalDate.of(2047, 3, 17), LocalDate.of(2056, 3, 17));
            ImmutableList <string>    expTenors = ImmutableList.of("3M", "6M", "1Y", "2Y", "3Y", "4Y", "5Y", "6Y", "7Y", "8Y", "9Y", "10Y", "15Y", "20Y", "30Y", "40Y");
            RepoGroup   repoGroup      = RepoGroup.of("JP-REPO");
            DoubleArray expRepoXValues = DoubleArray.of(3, n => ACT_365F.relativeYearFraction(sampleDate, expDates.get(n)));
            DoubleArray expRepoYValues = DoubleArray.of(-0.0019521, -0.0016021, -0.0022521);
            ImmutableList <LabelDateParameterMetadata> expRepoMetadata = IntStream.range(0, 3).mapToObj(n => LabelDateParameterMetadata.of(expDates.get(n), expTenors.get(n))).collect(Guavate.toImmutableList());
            LegalEntityGroup legalEntityGroup = LegalEntityGroup.of("JP-GOVT");
            DoubleArray      expIssuerXValues = DoubleArray.of(expDates.size(), n => ACT_365F.relativeYearFraction(sampleDate, expDates.get(n)));
            DoubleArray      expIssuerYValues = DoubleArray.of(-0.0019511690511744527, -0.001497422302092893, -0.0021798583657932176, -0.002215700360912938, -0.0021722324679574866, -0.001922059591219172, -0.0015461646763548528, -0.0014835851245462084, -0.001118669580570464, -5.476767138782941E-4, -2.2155596172855965E-4, 2.0333291172821893E-5, 0.00284500423293463, 0.005876533417933958, 0.007957581583531789, 0.009134630405512047);
            ImmutableList <LabelDateParameterMetadata> expIssuerMetadata = IntStream.range(0, expDates.size()).mapToObj(n => LabelDateParameterMetadata.of(expDates.get(n), expTenors.get(n))).collect(Guavate.toImmutableList());

            ImmutableListMultimap <LocalDate, LegalEntityCurveGroup> allCurves = LegalEntityRatesCurvesCsvLoader.loadAllDates(ResourceLocator.of(GROUPS), ResourceLocator.of(SETTINGS), ImmutableList.of(ResourceLocator.of(CURVES_1), ResourceLocator.of(CURVES_2)));

//JAVA TO C# CONVERTER TODO TASK: There is no .NET equivalent to the java.util.Collection 'containsAll' method:
            assertTrue(allCurves.Keys.containsAll(ALL_DATES));
            ImmutableList <LegalEntityCurveGroup> groups = allCurves.get(sampleDate);

            assertEquals(groups.size(), 2);
            // group 0
            LegalEntityCurveGroup group0 = groups.get(0);

            assertEquals(group0.Name, CurveGroupName.of("Default1"));
            // repo
            assertEquals(group0.RepoCurves.size(), 1);
            Curve repoCurve = group0.RepoCurves.get(Pair.of(repoGroup, JPY));
            InterpolatedNodalCurve expectedRepoCurve = InterpolatedNodalCurve.of(Curves.zeroRates(CurveName.of("JP-REPO-1"), ACT_365F, expRepoMetadata), expRepoXValues, expRepoYValues, CurveInterpolators.LINEAR, CurveExtrapolators.FLAT, CurveExtrapolators.FLAT);

            assertEquals(repoCurve, expectedRepoCurve);
            // issuer
            assertEquals(group0.IssuerCurves.size(), 2);
            Curve issuerCurve = group0.IssuerCurves.get(Pair.of(legalEntityGroup, JPY));
            InterpolatedNodalCurve expectedIssuerCurve = InterpolatedNodalCurve.of(Curves.zeroRates(CurveName.of("JP-GOVT-1"), ACT_365F, expIssuerMetadata), expIssuerXValues, expIssuerYValues, CurveInterpolators.LINEAR, CurveExtrapolators.FLAT, CurveExtrapolators.FLAT);

            assertEquals(issuerCurve, expectedIssuerCurve);
            Curve usIssuerCurve = group0.IssuerCurves.get(Pair.of(LegalEntityGroup.of("US-GOVT"), USD));

            expectedIssuerCurve = InterpolatedNodalCurve.of(Curves.zeroRates(CurveName.of("US-GOVT"), ACT_360, expIssuerMetadata), DoubleArray.of(expDates.size(), n => ACT_360.relativeYearFraction(sampleDate, expDates.get(n))), expIssuerYValues, CurveInterpolators.NATURAL_SPLINE, CurveExtrapolators.FLAT, CurveExtrapolators.FLAT);
            assertEquals(usIssuerCurve, expectedIssuerCurve);
            // group 1
            LegalEntityCurveGroup group1 = groups.get(1);

            assertEquals(group1.Name, CurveGroupName.of("Default2"));
            // repo
            repoCurve         = group1.RepoCurves.get(Pair.of(repoGroup, JPY));
            expectedRepoCurve = InterpolatedNodalCurve.of(Curves.zeroRates(CurveName.of("JP-REPO-2"), ACT_365F, expRepoMetadata), expRepoXValues, expRepoYValues, CurveInterpolators.DOUBLE_QUADRATIC, CurveExtrapolators.LINEAR, CurveExtrapolators.LINEAR);
            assertEquals(repoCurve, expectedRepoCurve);
            // issuer
            assertEquals(group1.IssuerCurves.size(), 1);
            issuerCurve         = group1.IssuerCurves.get(Pair.of(legalEntityGroup, JPY));
            expectedIssuerCurve = InterpolatedNodalCurve.of(Curves.zeroRates(CurveName.of("JP-GOVT-2"), ACT_365F, expIssuerMetadata), expIssuerXValues, expIssuerYValues, CurveInterpolators.DOUBLE_QUADRATIC, CurveExtrapolators.LINEAR, CurveExtrapolators.LINEAR);
            assertEquals(issuerCurve, expectedIssuerCurve);
        }
Example #8
0
 private IssuerCurveZeroRateSensitivity(Currency curveCurrency, double yearFraction, Currency currency, LegalEntityGroup legalEntityGroup, double sensitivity)
 {
     JodaBeanUtils.notNull(curveCurrency, "curveCurrency");
     JodaBeanUtils.notNull(currency, "currency");
     JodaBeanUtils.notNull(legalEntityGroup, "legalEntityGroup");
     this.curveCurrency    = curveCurrency;
     this.yearFraction     = yearFraction;
     this.currency         = currency;
     this.legalEntityGroup = legalEntityGroup;
     this.sensitivity      = sensitivity;
 }
        // lookup the discount factors for the legal entity group
        private IssuerCurveDiscountFactors issuerCurveDiscountFactors(LegalEntityGroup legalEntityGroup, Currency currency)
        {
            CurveId curveId = lookup.IssuerCurves.get(Pair.of(legalEntityGroup, currency));

            if (curveId == null)
            {
                throw new MarketDataNotFoundException("Unable to find issuer curve: " + legalEntityGroup + ", " + currency);
            }
            Curve           curve = marketData.getValue(curveId);
            DiscountFactors df    = DiscountFactors.of(currency, ValuationDate, curve);

            return(IssuerCurveDiscountFactors.of(df, legalEntityGroup));
        }
            public override Builder set(string propertyName, object newValue)
            {
                switch (propertyName.GetHashCode())
                {
                case -91613053:         // discountFactors
                    this.discountFactors = (DiscountFactors)newValue;
                    break;

                case -899047453:         // legalEntityGroup
                    this.legalEntityGroup = (LegalEntityGroup)newValue;
                    break;

                default:
                    throw new NoSuchElementException("Unknown property: " + propertyName);
                }
                return(this);
            }
        private static void createKey(CurveName curveName, CurveGroupName curveGroup, string curveTypeStr, string referenceStr, string currencyStr, IDictionary <CurveGroupName, IDictionary <Pair <RepoGroup, Currency>, CurveName> > repoGroups, IDictionary <CurveGroupName, IDictionary <Pair <LegalEntityGroup, Currency>, CurveName> > legalEntityGroups)
        {
            Currency currency = Currency.of(currencyStr);

            if (REPO.Equals(curveTypeStr.ToLower(Locale.ENGLISH), StringComparison.OrdinalIgnoreCase))
            {
                RepoGroup repoGroup = RepoGroup.of(referenceStr);
                repoGroups.computeIfAbsent(curveGroup, k => new LinkedHashMap <>()).put(Pair.of(repoGroup, currency), curveName);
            }
            else if (ISSUER.Equals(curveTypeStr.ToLower(Locale.ENGLISH), StringComparison.OrdinalIgnoreCase))
            {
                LegalEntityGroup legalEntiryGroup = LegalEntityGroup.of(referenceStr);
                legalEntityGroups.computeIfAbsent(curveGroup, k => new LinkedHashMap <>()).put(Pair.of(legalEntiryGroup, currency), curveName);
            }
            else
            {
                throw new System.ArgumentException(Messages.format("Unsupported curve type: {}", curveTypeStr));
            }
        }
 //-------------------------------------------------------------------------
 /// <summary>
 /// Obtains an instance based on discount factors and legal entity group.
 /// </summary>
 /// <param name="discountFactors">  the discount factors </param>
 /// <param name="legalEntityGroup">  the legal entity group </param>
 /// <returns> the issuer curve discount factors </returns>
 public static IssuerCurveDiscountFactors of(DiscountFactors discountFactors, LegalEntityGroup legalEntityGroup)
 {
     return(new IssuerCurveDiscountFactors(discountFactors, legalEntityGroup));
 }
Example #13
0
 /// <summary>
 /// Obtains an instance from zero rate sensitivity and legal entity group.
 /// </summary>
 /// <param name="zeroRateSensitivity">  the zero rate sensitivity </param>
 /// <param name="legalEntityGroup">  the legal entity group </param>
 /// <returns> the point sensitivity object </returns>
 public static IssuerCurveZeroRateSensitivity of(ZeroRateSensitivity zeroRateSensitivity, LegalEntityGroup legalEntityGroup)
 {
     return(of(zeroRateSensitivity.CurveCurrency, zeroRateSensitivity.YearFraction, zeroRateSensitivity.Currency, legalEntityGroup, zeroRateSensitivity.Sensitivity));
 }
Example #14
0
 //-------------------------------------------------------------------------
 /// <summary>
 /// Obtains an instance from the curve currency, date, legal entity group and value.
 /// <para>
 /// The currency representing the curve is used also for the sensitivity currency.
 ///
 /// </para>
 /// </summary>
 /// <param name="currency">  the currency of the curve and sensitivity </param>
 /// <param name="yearFraction">  the year fraction that was looked up on the curve </param>
 /// <param name="legalEntityGroup">  the legal entity group </param>
 /// <param name="sensitivity">  the value of the sensitivity </param>
 /// <returns> the point sensitivity object </returns>
 public static IssuerCurveZeroRateSensitivity of(Currency currency, double yearFraction, LegalEntityGroup legalEntityGroup, double sensitivity)
 {
     return(of(currency, yearFraction, currency, legalEntityGroup, sensitivity));
 }