private DoubleArray sensitivityDeposit( InterpolatedNodalCurve curve, double termDepositYearFraction, int index, double fixedRate) { int nNode = curve.getParameterCount(); double[] sensi = new double[nNode]; sensi[index] = curve.getXValues().get(index) * (1d + fixedRate * termDepositYearFraction) / termDepositYearFraction; return DoubleArray.ofUnsafe(sensi); }
private static void nodeLines(String valuationDateStr, Curve curve, CsvOutput csv) { ArgChecker.isTrue(curve instanceof InterpolatedNodalCurve, "interpolated"); InterpolatedNodalCurve interpolatedCurve = (InterpolatedNodalCurve) curve; int nbPoints = interpolatedCurve.getXValues().size(); for (int i = 0; i < nbPoints; i++) { ArgChecker.isTrue( interpolatedCurve.getParameterMetadata(i) instanceof DatedParameterMetadata, "Curve metadata must contain a date, but was " + interpolatedCurve.getParameterMetadata(i).getClass().getSimpleName()); DatedParameterMetadata metadata = (DatedParameterMetadata) interpolatedCurve.getParameterMetadata(i); List<String> line = new ArrayList<>(); line.add(valuationDateStr); line.add(curve.getName().getName().toString()); line.add(metadata.getDate().toString()); line.add(BigDecimal.valueOf(interpolatedCurve.getYValues().get(i)).toPlainString()); line.add(metadata.getLabel()); csv.writeLine(line); } }
public void test_withValuesXy() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA, XVALUES, YVALUES, INTERPOLATOR); InterpolatedNodalCurve test = base.withValues(XVALUES2, YVALUES_BUMPED); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getMetadata()).isEqualTo(METADATA); assertThat(test.getXValues()).isEqualTo(XVALUES2); assertThat(test.getYValues()).isEqualTo(YVALUES_BUMPED); }
public void test_withValues() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA, XVALUES, YVALUES, INTERPOLATOR); InterpolatedNodalCurve test = base.withYValues(YVALUES_BUMPED); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getMetadata()).isEqualTo(METADATA); assertThat(test.getXValues()).isEqualTo(XVALUES); assertThat(test.getYValues()).isEqualTo(YVALUES_BUMPED); }
public void test_withMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA, XVALUES, YVALUES, INTERPOLATOR); InterpolatedNodalCurve test = base.withMetadata(METADATA_ENTRIES); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES); assertThat(test.getXValues()).isEqualTo(XVALUES); assertThat(test.getYValues()).isEqualTo(YVALUES); }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(InterpolatedNodalCurve beanToCopy) { this.metadata = beanToCopy.getMetadata(); this.xValues = beanToCopy.getXValues(); this.yValues = beanToCopy.getYValues(); this.interpolator = beanToCopy.getInterpolator(); this.extrapolatorLeft = beanToCopy.getExtrapolatorLeft(); this.extrapolatorRight = beanToCopy.getExtrapolatorRight(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case -450004177: // metadata return ((InterpolatedNodalCurve) bean).getMetadata(); case 1681280954: // xValues return ((InterpolatedNodalCurve) bean).getXValues(); case -1726182661: // yValues return ((InterpolatedNodalCurve) bean).getYValues(); case 2096253127: // interpolator return ((InterpolatedNodalCurve) bean).getInterpolator(); case 1271703994: // extrapolatorLeft return ((InterpolatedNodalCurve) bean).getExtrapolatorLeft(); case 773779145: // extrapolatorRight return ((InterpolatedNodalCurve) bean).getExtrapolatorRight(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_withNode_replace_withMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); LabelDateParameterMetadata item = LabelDateParameterMetadata.of(date(2015, 6, 30), TNR_1Y); InterpolatedNodalCurve test = base.withNode(2d, 4d, item); List<ParameterMetadata> list = new ArrayList<>(METADATA_ENTRIES.getParameterMetadata().get()); list.set(1, item); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getMetadata()).isEqualTo(METADATA.withParameterMetadata(list)); assertThat(test.getXValues()).isEqualTo(DoubleArray.of(1d, 2d, 3d)); assertThat(test.getYValues()).isEqualTo(DoubleArray.of(5d, 4d, 8d)); }
public void test_withNode_atEnd_withoutMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA, XVALUES, YVALUES, INTERPOLATOR); LabelDateParameterMetadata item = LabelDateParameterMetadata.of(date(2015, 6, 30), TNR_1Y); InterpolatedNodalCurve test = base.withNode(0.5d, 4d, item); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE + 1); assertThat(test.getMetadata()).isEqualTo(METADATA); assertThat(test.getXValues()).isEqualTo(DoubleArray.of(0.5d, 1d, 2d, 3d)); assertThat(test.getYValues()).isEqualTo(DoubleArray.of(4d, 5d, 7d, 8d)); }
public void test_withNode_inMiddle_withMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); LabelDateParameterMetadata item = LabelDateParameterMetadata.of(date(2015, 6, 30), TNR_1Y); InterpolatedNodalCurve test = base.withNode(2.5d, 4d, item); List<ParameterMetadata> list = new ArrayList<>(METADATA_ENTRIES.getParameterMetadata().get()); list.add(2, item); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE + 1); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES.withParameterMetadata(list)); assertThat(test.getXValues()).isEqualTo(DoubleArray.of(1d, 2d, 2.5d, 3d)); assertThat(test.getYValues()).isEqualTo(DoubleArray.of(5d, 7d, 4d, 8d)); }
public void test_withNode_atStart_withMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); LabelDateParameterMetadata item = LabelDateParameterMetadata.of(date(2015, 6, 30), TNR_1Y); InterpolatedNodalCurve test = base.withNode(0.5d, 4d, item); List<ParameterMetadata> list = new ArrayList<>(); list.add(item); list.addAll(ParameterMetadata.listOfEmpty(SIZE)); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE + 1); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES.withParameterMetadata(list)); assertThat(test.getXValues()).isEqualTo(DoubleArray.of(0.5d, 1d, 2d, 3d)); assertThat(test.getYValues()).isEqualTo(DoubleArray.of(4d, 5d, 7d, 8d)); }
String[] labels = new String[] {"3M", "1Y", "2Y", "3Y", "5Y", "10Y"}; for (int i = 0; i < nodalCurve.getXValues().size(); i++) { LocalDate nodeDate = nodeDates[i]; double actualYearFraction = nodalCurve.getXValues().get(i); double expectedYearFraction = getYearFraction(valuationDate, nodeDate); assertThat(actualYearFraction).isCloseTo(expectedYearFraction, offset(TOLERANCE));
String[] labels = new String[] {"3M", "6M", "1Y", "2Y", "3Y", "5Y", "10Y"}; for (int i = 0; i < nodalCurve.getXValues().size(); i++) { LocalDate nodeDate = nodeDates[i]; double actualYearFraction = nodalCurve.getXValues().get(i); double expectedYearFraction = getYearFraction(valuationDate, nodeDate); assertThat(actualYearFraction).isCloseTo(expectedYearFraction, offset(TOLERANCE));
public void test_of_CurveMetadata() { InterpolatedNodalCurve test = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getParameter(0)).isEqualTo(YVALUES.get(0)); assertThat(test.getParameter(1)).isEqualTo(YVALUES.get(1)); assertThat(test.getParameterMetadata(0)).isSameAs(METADATA_ENTRIES.getParameterMetadata().get().get(0)); assertThat(test.getParameterMetadata(1)).isSameAs(METADATA_ENTRIES.getParameterMetadata().get().get(1)); assertThat(test.withParameter(0, 2d)).isEqualTo( InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES.with(0, 2d), INTERPOLATOR)); assertThat(test.withPerturbation((i, v, m) -> v - 2d)).isEqualTo( InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES_BUMPED, INTERPOLATOR)); assertThat(test.getExtrapolatorLeft().getName()).isEqualTo(FLAT_EXTRAPOLATOR.getName()); assertThat(test.getInterpolator().getName()).isEqualTo(INTERPOLATOR.getName()); assertThat(test.getExtrapolatorRight().getName()).isEqualTo(FLAT_EXTRAPOLATOR.getName()); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES); assertThat(test.getXValues()).isEqualTo(XVALUES); assertThat(test.getYValues()).isEqualTo(YVALUES); }
private double sumSingle(InterpolatedNodalCurve interpolatedNodalCurve) { double result = 0.0; int nbNodePoints = interpolatedNodalCurve.getParameterCount(); for (int i = 0; i < nbNodePoints; i++) { result += interpolatedNodalCurve.getXValues().get(i) * interpolatedNodalCurve.getYValues().get(i); } return result; }
private CurrencyParameterSensitivities sensiModFn(ImmutableRatesProvider provider) { CurrencyParameterSensitivities sensi = CurrencyParameterSensitivities.empty(); // Index ImmutableMap<Index, Curve> mapIndex = provider.getIndexCurves(); for (Entry<Index, Curve> entry : mapIndex.entrySet()) { if (entry.getKey() instanceof IborIndex) { InterpolatedNodalCurve curveInt = checkInterpolated(entry.getValue()); double sumSqrt = sumMod(provider); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(curveInt.getName(), USD, DoubleArray.of(curveInt.getParameterCount(), i -> 2d * sumSqrt * curveInt.getXValues().get(i)))); } } return sensi; }
private CurrencyParameterSensitivities sensiFn(ImmutableRatesProvider provider) { CurrencyParameterSensitivities sensi = CurrencyParameterSensitivities.empty(); // Currency ImmutableMap<Currency, Curve> mapCurrency = provider.getDiscountCurves(); for (Entry<Currency, Curve> entry : mapCurrency.entrySet()) { InterpolatedNodalCurve curveInt = checkInterpolated(entry.getValue()); double sumSqrt = sum(provider); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(curveInt.getName(), USD, DoubleArray.of(curveInt.getParameterCount(), i -> 2d * sumSqrt * curveInt.getXValues().get(i)))); } // Index ImmutableMap<Index, Curve> mapIndex = provider.getIndexCurves(); for (Entry<Index, Curve> entry : mapIndex.entrySet()) { InterpolatedNodalCurve curveInt = checkInterpolated(entry.getValue()); double sumSqrt = sum(provider); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(curveInt.getName(), USD, DoubleArray.of(curveInt.getParameterCount(), i -> 2d * sumSqrt * curveInt.getXValues().get(i)))); } return sensi; }
private CurrencyParameterSensitivities sensiFnBond(ImmutableLegalEntityDiscountingProvider provider) { CurrencyParameterSensitivities sensi = CurrencyParameterSensitivities.empty(); double sum = sum(provider); // repo curves ImmutableMap<Pair<RepoGroup, Currency>, DiscountFactors> mapRepoCurves = provider.getRepoCurves(); for (Entry<Pair<RepoGroup, Currency>, DiscountFactors> entry : mapRepoCurves.entrySet()) { DiscountFactors discountFactors = entry.getValue(); InterpolatedNodalCurve curve = (InterpolatedNodalCurve) getCurve(discountFactors); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(curve.getName(), discountFactors.getCurrency(), DoubleArray.of(discountFactors.getParameterCount(), i -> 2d * curve.getXValues().get(i) * sum))); } // issuer curves ImmutableMap<Pair<LegalEntityGroup, Currency>, DiscountFactors> mapIssuerCurves = provider.getIssuerCurves(); for (Entry<Pair<LegalEntityGroup, Currency>, DiscountFactors> entry : mapIssuerCurves.entrySet()) { DiscountFactors discountFactors = entry.getValue(); InterpolatedNodalCurve curve = (InterpolatedNodalCurve) getCurve(discountFactors); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(curve.getName(), discountFactors.getCurrency(), DoubleArray.of(discountFactors.getParameterCount(), i -> 2d * curve.getXValues().get(i) * sum))); } return sensi; }
InterpolatedNodalCurve spreadCurveInt = checkInterpolated(curveComb.getSpreadCurve()); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(baseCurveInt.getName(), USD, DoubleArray.of(baseCurveInt.getParameterCount(), i -> 2d * sum * baseCurveInt.getXValues().get(i)))); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(spreadCurveInt.getName(), USD, DoubleArray.of(spreadCurveInt.getParameterCount(), i -> 2d * sum * spreadCurveInt.getXValues().get(i)))); InterpolatedNodalCurve spreadCurveInt = checkInterpolated(curveComb.getSpreadCurve()); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(baseCurveInt.getName(), USD, DoubleArray.of(baseCurveInt.getParameterCount(), i -> 2d * sum * baseCurveInt.getXValues().get(i)))); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(spreadCurveInt.getName(), USD, DoubleArray.of(spreadCurveInt.getParameterCount(), i -> 2d * sum * spreadCurveInt.getXValues().get(i)))); } else { InterpolatedNodalCurve curveInt = checkInterpolated(entry.getValue()); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(curveInt.getName(), USD, DoubleArray.of(curveInt.getParameterCount(), i -> 2d * sum * curveInt.getXValues().get(i))));
private CurrencyParameterSensitivities sensiCombinedFnBond(ImmutableLegalEntityDiscountingProvider provider) { CurrencyParameterSensitivities sensi = CurrencyParameterSensitivities.empty(); double sum = sumCombine(provider); // repo curves ImmutableMap<Pair<RepoGroup, Currency>, DiscountFactors> mapCurrency = provider.getRepoCurves(); for (Entry<Pair<RepoGroup, Currency>, DiscountFactors> entry : mapCurrency.entrySet()) { CombinedCurve curveComb = (CombinedCurve) getCurve(entry.getValue()); InterpolatedNodalCurve baseCurveInt = checkInterpolated(curveComb.getBaseCurve()); InterpolatedNodalCurve spreadCurveInt = checkInterpolated(curveComb.getSpreadCurve()); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(baseCurveInt.getName(), USD, DoubleArray.of(baseCurveInt.getParameterCount(), i -> 2d * sum * baseCurveInt.getXValues().get(i)))); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(spreadCurveInt.getName(), USD, DoubleArray.of(spreadCurveInt.getParameterCount(), i -> 2d * sum * spreadCurveInt.getXValues().get(i)))); } // issuer curves ImmutableMap<Pair<LegalEntityGroup, Currency>, DiscountFactors> mapIndex = provider.getIssuerCurves(); for (Entry<Pair<LegalEntityGroup, Currency>, DiscountFactors> entry : mapIndex.entrySet()) { CombinedCurve curveComb = (CombinedCurve) getCurve(entry.getValue()); InterpolatedNodalCurve baseCurveInt = checkInterpolated(curveComb.getBaseCurve()); InterpolatedNodalCurve spreadCurveInt = checkInterpolated(curveComb.getSpreadCurve()); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(baseCurveInt.getName(), USD, DoubleArray.of(baseCurveInt.getParameterCount(), i -> 2d * sum * baseCurveInt.getXValues().get(i)))); sensi = sensi.combinedWith(CurrencyParameterSensitivity.of(spreadCurveInt.getName(), USD, DoubleArray.of(spreadCurveInt.getParameterCount(), i -> 2d * sum * spreadCurveInt.getXValues().get(i)))); } return sensi; }