/// <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 input sensitivity should have a <seealso cref="DatedParameterMetadata"/> for each sensitivity. /// /// </para> /// </summary> /// <param name="sensitivities"> the input sensitivities </param> /// <param name="targetDates"> the list of dates for the re-bucketing </param> /// <returns> the sensitivity after the re-bucketing </returns> public static CurrencyParameterSensitivities linearRebucketing(CurrencyParameterSensitivities sensitivities, IList <LocalDate> targetDates) { 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, "re-bucketing requires sensitivity date for node {} which is of type {} while 'DatedParameterMetadata' is expected", nodeMetadata.Label, nodeMetadata.GetType().FullName); DatedParameterMetadata datedParameterMetadata = (DatedParameterMetadata)nodeMetadata; LocalDate nodeDate = datedParameterMetadata.Date; 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)); }
public virtual void test_metadata_fixed() { LocalDate nodeDate = VAL_DATE.plusMonths(1); IborFutureCurveNode node = IborFutureCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.of(nodeDate)); DatedParameterMetadata metadata = node.metadata(VAL_DATE, REF_DATA); assertEquals(metadata.Date, nodeDate); assertEquals(metadata.Label, node.Label); }
public virtual void test_metadata_fixed() { FixedInflationSwapCurveNode node = FixedInflationSwapCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.of(VAL_DATE)); LocalDate valuationDate = LocalDate.of(2015, 1, 22); DatedParameterMetadata metadata = node.metadata(valuationDate, REF_DATA); assertEquals(metadata.Date, VAL_DATE); assertEquals(metadata.Label, node.Label); }
public virtual void test_metadata_last_fixing() { ThreeLegBasisSwapCurveNode node = ThreeLegBasisSwapCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.LAST_FIXING); LocalDate valuationDate = LocalDate.of(2015, 1, 22); LocalDate fixingExpected = LocalDate.of(2024, 7, 24); DatedParameterMetadata metadata = node.metadata(valuationDate, REF_DATA); assertEquals(metadata.Date, fixingExpected); assertEquals(metadata.Label, node.Label); }
public virtual void test_metadata_last_fixing() { FixedInflationSwapCurveNode node = FixedInflationSwapCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.LAST_FIXING); LocalDate valuationDate = LocalDate.of(2015, 1, 22); LocalDate fixingExpected = LocalDate.of(2024, 10, 31); // Last day of the month DatedParameterMetadata metadata = node.metadata(valuationDate, REF_DATA); assertEquals(metadata.Date, fixingExpected); assertEquals(metadata.Label, node.Label); }
public virtual void test_metadata_fixed() { LocalDate nodeDate = VAL_DATE.plusMonths(1); FixedOvernightSwapCurveNode node = FixedOvernightSwapCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.of(nodeDate)); LocalDate valuationDate = LocalDate.of(2015, 1, 22); DatedParameterMetadata metadata = node.metadata(valuationDate, REF_DATA); assertEquals(metadata.Date, nodeDate); assertEquals(metadata.Label, node.Label); }
public virtual void test_metadata_last_fixing() { XCcyIborIborSwapCurveNode node = XCcyIborIborSwapCurveNode.of(TEMPLATE, SPREAD_ID, SPREAD_ADJ, LABEL).withDate(CurveNodeDate.LAST_FIXING); LocalDate valuationDate = LocalDate.of(2015, 1, 22); DatedParameterMetadata metadata = node.metadata(valuationDate, REF_DATA); LocalDate fixingExpected = LocalDate.of(2024, 10, 24); assertEquals(metadata.Date, fixingExpected); assertEquals(((TenorDateParameterMetadata)metadata).Tenor, TENOR_10Y); }
public virtual void test_metadata_last_fixing() { IborFixingDepositCurveNode node = IborFixingDepositCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD).withDate(CurveNodeDate.LAST_FIXING); ImmutableMarketData marketData = ImmutableMarketData.builder(VAL_DATE).addValue(QUOTE_ID, 0.0d).build(); IborFixingDepositTrade trade = node.trade(1d, marketData, REF_DATA); ResolvedIborFixingDeposit product = trade.Product.resolve(REF_DATA); LocalDate fixingDate = ((IborRateComputation)product.FloatingRate).FixingDate; DatedParameterMetadata metadata = node.metadata(VAL_DATE, REF_DATA); assertEquals(((TenorDateParameterMetadata)metadata).Date, fixingDate); assertEquals(((TenorDateParameterMetadata)metadata).Tenor.Period, TEMPLATE.DepositPeriod); }
public virtual void test_metadata_last_fixing() { IborFutureCurveNode node = IborFutureCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD, LABEL).withDate(CurveNodeDate.LAST_FIXING); ImmutableMarketData marketData = ImmutableMarketData.builder(VAL_DATE).addValue(QUOTE_ID, 0.0d).build(); IborFutureTrade trade = node.trade(1d, marketData, REF_DATA); LocalDate fixingDate = trade.Product.FixingDate; DatedParameterMetadata metadata = node.metadata(VAL_DATE, REF_DATA); assertEquals(metadata.Date, fixingDate); LocalDate referenceDate = TEMPLATE.calculateReferenceDateFromTradeDate(VAL_DATE, REF_DATA); assertEquals(((YearMonthDateParameterMetadata)metadata).YearMonth, YearMonth.from(referenceDate)); }
public virtual void test_metadata_last_fixing() { FraCurveNode node = FraCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD).withDate(CurveNodeDate.LAST_FIXING); LocalDate valuationDate = LocalDate.of(2015, 1, 22); ImmutableMarketData marketData = ImmutableMarketData.builder(valuationDate).addValue(QUOTE_ID, 0.0d).build(); FraTrade trade = node.trade(1d, marketData, REF_DATA); ResolvedFra resolved = trade.Product.resolve(REF_DATA); LocalDate fixingDate = ((IborRateComputation)(resolved.FloatingRate)).FixingDate; DatedParameterMetadata metadata = node.metadata(valuationDate, REF_DATA); assertEquals(((TenorDateParameterMetadata)metadata).Date, fixingDate); assertEquals(((TenorDateParameterMetadata)metadata).Tenor, TENOR_5M); }
// add each node to the csv file private static void nodeLines(string valuationDateStr, Curve curve, CsvOutput csv) { ArgChecker.isTrue(curve is InterpolatedNodalCurve, "interpolated"); InterpolatedNodalCurve interpolatedCurve = (InterpolatedNodalCurve)curve; int nbPoints = interpolatedCurve.XValues.size(); for (int i = 0; i < nbPoints; i++) { ArgChecker.isTrue(interpolatedCurve.getParameterMetadata(i) is DatedParameterMetadata, "Curve metadata must contain a date, but was " + interpolatedCurve.getParameterMetadata(i).GetType().Name); DatedParameterMetadata metadata = (DatedParameterMetadata)interpolatedCurve.getParameterMetadata(i); IList <string> line = new List <string>(); line.Add(valuationDateStr); line.Add(curve.Name.Name.ToString()); line.Add(metadata.Date.ToString()); line.Add(decimal.valueOf(interpolatedCurve.YValues.get(i)).toPlainString()); line.Add(metadata.Label); csv.writeLine(line); } }