コード例 #1
0
        static ParameterizedFunctionalCurveTest()
        {
            TenorParameterMetadata param1 = TenorParameterMetadata.of(Tenor.TENOR_1Y);
            TenorParameterMetadata param2 = TenorParameterMetadata.of(Tenor.TENOR_5Y);
            TenorParameterMetadata param3 = TenorParameterMetadata.of(Tenor.TENOR_10Y);

            METADATA = DefaultCurveMetadata.builder().curveName("test").yValueType(ValueType.DISCOUNT_FACTOR).xValueType(ValueType.YEAR_FRACTION).parameterMetadata(param1, param2, param3).build();
        }
        static ParameterizedFunctionalCurveDefinitionTest()
        {
            TenorParameterMetadata param1 = TenorParameterMetadata.of(Tenor.TENOR_1Y);
            TenorParameterMetadata param2 = TenorParameterMetadata.of(Tenor.TENOR_5Y);
            TenorParameterMetadata param3 = TenorParameterMetadata.of(Tenor.TENOR_10Y);

            PARAM_METADATA = ImmutableList.of(param1, param2, param3);
        }
コード例 #3
0
        public virtual void wrong_metadata()
        {
            IList <ParameterMetadata> pmdInput = new List <ParameterMetadata>();

            pmdInput.Add(TenorParameterMetadata.of(Tenor.TENOR_10M));
            CurrencyParameterSensitivity   s1 = CurrencyParameterSensitivity.of(NAME_1, pmdInput, CCY_1, DoubleArray.of(SENSITIVITY_AMOUNT));
            CurrencyParameterSensitivities s2 = CurrencyParameterSensitivities.of(s1);

            assertThrowsIllegalArg(() => CurveSensitivityUtils.linearRebucketing(s2, TARGET_DATES));
        }
コード例 #4
0
 static CombinedCurveTest()
 {
     PARAM_METADATA_BASE.Add(TenorParameterMetadata.of(TENOR_1Y, BASE_NAME + TENOR_1Y.ToString()));
     PARAM_METADATA_BASE.Add(TenorParameterMetadata.of(TENOR_3Y, BASE_NAME + TENOR_3Y.ToString()));
     PARAM_METADATA_BASE.Add(TenorParameterMetadata.of(TENOR_5Y, BASE_NAME + TENOR_5Y.ToString()));
     PARAM_METADATA_SPREAD.Add(TenorParameterMetadata.of(TENOR_6M, SPREAD_NAME + TENOR_6M.ToString()));
     PARAM_METADATA_SPREAD.Add(TenorParameterMetadata.of(TENOR_18M, SPREAD_NAME + TENOR_18M.ToString()));
     PARAM_METADATA_SPREAD.Add(TenorParameterMetadata.of(TENOR_5Y, SPREAD_NAME + TENOR_5Y.ToString()));
     PARAM_METADATA_SPREAD.Add(TenorParameterMetadata.of(TENOR_7Y, SPREAD_NAME + TENOR_7Y.ToString()));
 }
コード例 #5
0
        // parses the currency as a column or from the reference
        private ParameterMetadata parseMetadata(CsvRow row, bool lenientDateParsing)
        {
            // parse the tenor and date fields
            Optional <Tenor>     tenorOpt    = row.findValue(TENOR_HEADER).flatMap(LoaderUtils.tryParseTenor);
            Optional <LocalDate> dateOpt     = row.findValue(DATE_HEADER).map(LoaderUtils.parseDate);
            Optional <string>    tenorStrOpt = row.findValue(TENOR_HEADER);

            if (tenorStrOpt.Present && !tenorOpt.Present)
            {
                if (lenientDateParsing && !dateOpt.Present && !resolver.TenorRequired)
                {
                    try
                    {
                        dateOpt = tenorStrOpt.map(LoaderUtils.parseDate);
                    }
                    catch (Exception)
                    {
                        // hide this exception, as this is a historic format
                        throw new System.ArgumentException(Messages.format("Invalid tenor '{}', must be expressed as nD, nW, nM or nY", tenorStrOpt.get()));
                    }
                }
                else
                {
                    throw new System.ArgumentException(Messages.format("Invalid tenor '{}', must be expressed as nD, nW, nM or nY", tenorStrOpt.get()));
                }
            }
            // build correct metadata based on the parsed fields
            if (tenorOpt.Present)
            {
                Tenor tenor = resolver.checkSensitivityTenor(tenorOpt.get());
                if (dateOpt.Present)
                {
                    return(TenorDateParameterMetadata.of(dateOpt.get(), tenor));
                }
                else
                {
                    return(TenorParameterMetadata.of(tenor));
                }
            }
            else if (resolver.TenorRequired)
            {
                throw new System.ArgumentException(Messages.format("Missing value for '{}' column", TENOR_HEADER));
            }
            else if (dateOpt.Present)
            {
                return(LabelDateParameterMetadata.of(dateOpt.get(), dateOpt.get().ToString()));
            }
            else
            {
                throw new System.ArgumentException(Messages.format("Unable to parse tenor or date, check '{}' and '{}' columns", TENOR_HEADER, DATE_HEADER));
            }
        }
        static CurveSensitivityUtilsJacobianTest()
        {
            Tenor[] tenors = new Tenor[] { Tenor.TENOR_1D, Tenor.TENOR_1M, Tenor.TENOR_3M, Tenor.TENOR_6M, Tenor.TENOR_1Y, Tenor.TENOR_2Y, Tenor.TENOR_3Y, Tenor.TENOR_4Y, Tenor.TENOR_5Y, Tenor.TENOR_7Y, Tenor.TENOR_10Y, Tenor.TENOR_15Y, Tenor.TENOR_20Y, Tenor.TENOR_30Y };
            IList <TenorParameterMetadata> metadataList = new List <TenorParameterMetadata>();

            for (int looptenor = 0; looptenor < tenors.Length; looptenor++)
            {
                metadataList.Add(TenorParameterMetadata.of(tenors[looptenor]));
            }
            DoubleArray            rate_eur         = DoubleArray.of(0.0160, 0.0165, 0.0155, 0.0155, 0.0155, 0.0150, 0.0150, 0.0160, 0.0165, 0.0155, 0.0155, 0.0155, 0.0150, 0.0140);
            InterpolatedNodalCurve curve_single_eur = InterpolatedNodalCurve.builder().metadata(DefaultCurveMetadata.builder().curveName(EUR_SINGLE_NAME).parameterMetadata(metadataList).dayCount(ACT_365F).xValueType(ValueType.YEAR_FRACTION).yValueType(ValueType.ZERO_RATE).build()).xValues(TIME_EUR).yValues(rate_eur).extrapolatorLeft(CurveExtrapolators.FLAT).extrapolatorRight(CurveExtrapolators.FLAT).interpolator(CurveInterpolators.LINEAR).build();

            MULTICURVE_EUR_SINGLE_INPUT = ImmutableRatesProvider.builder(VALUATION_DATE).discountCurve(EUR, curve_single_eur).iborIndexCurve(EUR_EURIBOR_6M, curve_single_eur).build();
            LIST_CURVE_NAMES_1.Add(CurveParameterSize.of(EUR_SINGLE_NAME, TIME_EUR.size()));
        }
コード例 #7
0
        /// <summary>
        /// Re-buckets a <seealso cref="CurrencyParameterSensitivities"/> to a given set of dates.
        /// <para>
        /// The list of dates must be sorted in chronological order. All sensitivities are re-bucketed to the same date list.
        /// The re-bucketing is done by linear weighting on the number of days, i.e. the sensitivities for dates outside the
        /// extremes are fully bucketed to the extremes and for date between two re-bucketing dates, the weight on the start
        /// date is the number days between end date and the date re-bucketed divided by the number of days between the
        /// start and the end. The date of the nodes can be directly in the parameter metadata - when the metadata is of the
        /// type <seealso cref="DatedParameterMetadata"/> - or inferred from the sensitivity date and the tenor when the
        /// metadata is of the type <seealso cref="TenorParameterMetadata"/>. Only those types of metadata are accepted.
        ///
        /// </para>
        /// </summary>
        /// <param name="sensitivities">  the input sensitivities </param>
        /// <param name="targetDates">  the list of dates for the re-bucketing </param>
        /// <param name="sensitivityDate">  the date for which the sensitivities are valid </param>
        /// <returns> the sensitivity after the re-bucketing </returns>
        public static CurrencyParameterSensitivities linearRebucketing(CurrencyParameterSensitivities sensitivities, IList <LocalDate> targetDates, LocalDate sensitivityDate)
        {
            checkSortedDates(targetDates);
            int nbBuckets = targetDates.Count;
            IList <ParameterMetadata> pmdTarget = targetDates.Select(date => LabelDateParameterMetadata.of(date, date.ToString())).ToList();
            ImmutableList <CurrencyParameterSensitivity> sensitivitiesList = sensitivities.Sensitivities;
            IList <CurrencyParameterSensitivity>         sensitivityTarget = new List <CurrencyParameterSensitivity>();

            foreach (CurrencyParameterSensitivity sensitivity in sensitivitiesList)
            {
                double[]    rebucketedSensitivityAmounts        = new double[nbBuckets];
                DoubleArray sensitivityAmounts                  = sensitivity.Sensitivity;
                IList <ParameterMetadata> parameterMetadataList = sensitivity.ParameterMetadata;
                for (int loopnode = 0; loopnode < sensitivityAmounts.size(); loopnode++)
                {
                    ParameterMetadata nodeMetadata = parameterMetadataList[loopnode];
//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
                    ArgChecker.isTrue((nodeMetadata is DatedParameterMetadata) || (nodeMetadata is TenorParameterMetadata), "re-bucketing requires sensitivity date or node for node {} which is of type {}", nodeMetadata.Label, nodeMetadata.GetType().FullName);
                    LocalDate nodeDate;
                    if (nodeMetadata is DatedParameterMetadata)
                    {
                        DatedParameterMetadata datedParameterMetadata = (DatedParameterMetadata)nodeMetadata;
                        nodeDate = datedParameterMetadata.Date;
                    }
                    else
                    {
                        TenorParameterMetadata tenorParameterMetadata = (TenorParameterMetadata)nodeMetadata;
                        nodeDate = sensitivityDate.plus(tenorParameterMetadata.Tenor);
                    }
                    rebucketingArray(targetDates, rebucketedSensitivityAmounts, sensitivityAmounts.get(loopnode), nodeDate);
                }
                CurrencyParameterSensitivity rebucketedSensitivity = CurrencyParameterSensitivity.of(sensitivity.MarketDataName, pmdTarget, sensitivity.Currency, DoubleArray.ofUnsafe(rebucketedSensitivityAmounts));
                sensitivityTarget.Add(rebucketedSensitivity);
            }
            return(CurrencyParameterSensitivities.of(sensitivityTarget));
        }
コード例 #8
0
        public void test_write_standard_withDate()
        {
            CurveName curve1 = CurveName.of("GBDSC");
            CurveName curve2 = CurveName.of("GBFWD");
            // listed in reverse order to check ordering
            CurveSensitivities sens = CurveSensitivities.builder(PortfolioItemInfo.empty().withAttribute(CCP_ATTR, "LCH")).add(ZERO_RATE_GAMMA, curve2, Currency.GBP, TenorParameterMetadata.of(Tenor.TENOR_3M), 1).add(ZERO_RATE_GAMMA, curve2, Currency.GBP, TenorParameterMetadata.of(Tenor.TENOR_6M), 2).add(ZERO_RATE_DELTA, curve2, Currency.GBP, TenorParameterMetadata.of(Tenor.TENOR_3M), 3).add(ZERO_RATE_DELTA, curve2, Currency.GBP, TenorParameterMetadata.of(Tenor.TENOR_6M), 5).add(ZERO_RATE_DELTA, curve1, Currency.GBP, TenorDateParameterMetadata.of(date(2018, 6, 30), Tenor.TENOR_3M), 2).add(ZERO_RATE_DELTA, curve1, Currency.GBP, TenorParameterMetadata.of(Tenor.TENOR_6M), 4).build();

            StringBuilder buf = new StringBuilder();

            WRITER_CCP.write(sens, buf);
            string content = buf.ToString();

            string expected = "" +
                              "Reference,Sensitivity Type,Sensitivity Tenor,Sensitivity Date,Currency,Value,CCP\n" +
                              "GBDSC,ZeroRateDelta,3M,2018-06-30,GBP,2.0,LCH\n" +
                              "GBDSC,ZeroRateDelta,6M,,GBP,4.0,LCH\n" +
                              "GBFWD,ZeroRateDelta,3M,,GBP,3.0,LCH\n" +
                              "GBFWD,ZeroRateDelta,6M,,GBP,5.0,LCH\n" +
                              "GBFWD,ZeroRateGamma,3M,,GBP,1.0,LCH\n" +
                              "GBFWD,ZeroRateGamma,6M,,GBP,2.0,LCH\n";

            assertEquals(content, expected);
        }
コード例 #9
0
        public virtual void hard_coded_value_one_curve_one_date_tenor()
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.time.LocalDate sensitivityDate = java.time.LocalDate.of(2015, 8, 18);
            LocalDate sensitivityDate = LocalDate.of(2015, 8, 18);

            System.Func <LocalDate, ParameterMetadata> parameterMetadataFunction = (d) => TenorParameterMetadata.of(Tenor.of(Period.ofDays((int)(d.toEpochDay() - sensitivityDate.toEpochDay()))));
            System.Func <CurrencyParameterSensitivities, CurrencyParameterSensitivities> rebucketFunction = (s) => CurveSensitivityUtils.linearRebucketing(s, TARGET_DATES, sensitivityDate);
            test_from_functions_one_curve_one_date(parameterMetadataFunction, rebucketFunction);
        }