예제 #1
0
        public DatedParameterMetadata metadata(LocalDate valuationDate, ReferenceData refData)
        {
            LocalDate nodeDate = date(valuationDate, refData);

            if (date_Renamed.Fixed)
            {
                return(LabelDateParameterMetadata.of(nodeDate, label));
            }
            return(TenorDateParameterMetadata.of(nodeDate, template.Tenor, label));
        }
예제 #2
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));
            }
        }
        public void test_parse_grid_tenorAndDateColumns()
        {
            CharSource source = CharSource.wrap("Sensitivity Type,Sensitivity Tenor,Sensitivity Date,GBP\n" + "ZeroRateGamma,1M,2018-06-30,1\n");

            assertEquals(LOADER.isKnownFormat(source), true);
            ValueWithFailures <ListMultimap <string, CurveSensitivities> > test = LOADER.parse(ImmutableList.of(source));

            assertEquals(test.Failures.size(), 0, test.Failures.ToString());
            assertEquals(test.Value.size(), 1);
            IList <CurveSensitivities> list = test.Value.get("");

            assertEquals(list.Count, 1);

            CurveSensitivities csens0 = list[0];

            assertEquals(csens0.TypedSensitivities.size(), 1);
            CurrencyParameterSensitivities cpss = csens0.getTypedSensitivity(ZERO_RATE_GAMMA);

            assertEquals(cpss.Sensitivities.size(), 1);
            CurrencyParameterSensitivity cps = cpss.Sensitivities.get(0);

            assertEquals(cps.ParameterMetadata.size(), 1);
            assertEquals(cps.ParameterMetadata.get(0), TenorDateParameterMetadata.of(date(2018, 6, 30), TENOR_1M));
        }
        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);
        }
 public override DatedParameterMetadata metadata(LocalDate nodeDate)
 {
     return(template is TenorCdsTemplate?TenorDateParameterMetadata.of(nodeDate, ((TenorCdsTemplate)template).Tenor, label) : LabelDateParameterMetadata.of(nodeDate, label));
 }
 public override TenorDateParameterMetadata metadata(LocalDate nodeDate)
 {
     return(TenorDateParameterMetadata.of(nodeDate, tenor));
 }