/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(RatesCurveGroup beanToCopy) { this.name = beanToCopy.getName(); this.discountCurves = beanToCopy.getDiscountCurves(); this.forwardCurves = beanToCopy.getForwardCurves(); }
/** * Creates a curve group using a curve group definition and some existing curves. * <p> * If there are curves named in the definition which are not present in the curves the group is built using * whatever curves are available. * <p> * If there are multiple curves with the same name in the curves one of them is arbitrarily chosen. * <p> * Multiple curves with the same name are allowed to support the use case where the list contains the same * curve multiple times. This means the caller doesn't have to filter the input curves to remove duplicates. * * @param curveGroupDefinition the definition of a curve group * @param curves some curves * @return a curve group built from the definition and the list of curves */ public static RatesCurveGroup ofCurves(RatesCurveGroupDefinition curveGroupDefinition, Curve... curves) { return ofCurves(curveGroupDefinition, Arrays.asList(curves)); }
public void test_of() { RatesCurveGroup test = RatesCurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); assertThat(test.getName()).isEqualTo(NAME); assertThat(test.getDiscountCurves()).isEqualTo(DISCOUNT_CURVES); assertThat(test.getForwardCurves()).isEqualTo(IBOR_CURVES); assertThat(test.findCurve(DISCOUNT_NAME)).hasValue(DISCOUNT_CURVE); assertThat(test.findCurve(IBOR_NAME)).hasValue(IBOR_CURVE); assertThat(test.findCurve(OVERNIGHT_NAME)).isEmpty(); assertThat(test.findDiscountCurve(GBP)).hasValue(DISCOUNT_CURVE); assertThat(test.findDiscountCurve(USD)).isEmpty(); assertThat(test.findForwardCurve(GBP_LIBOR_3M)).hasValue(IBOR_CURVE); assertThat(test.findForwardCurve(CHF_LIBOR_3M)).isEmpty(); }
public void test_builder() { RatesCurveGroup test = RatesCurveGroup.builder() .name(NAME) .discountCurves(DISCOUNT_CURVES) .forwardCurves(IBOR_CURVES) .build(); assertThat(test.getName()).isEqualTo(NAME); assertThat(test.getDiscountCurves()).isEqualTo(DISCOUNT_CURVES); assertThat(test.getForwardCurves()).isEqualTo(IBOR_CURVES); assertThat(test.findDiscountCurve(GBP)).hasValue(DISCOUNT_CURVE); assertThat(test.findDiscountCurve(USD)).isEmpty(); assertThat(test.findForwardCurve(GBP_LIBOR_3M)).hasValue(IBOR_CURVE); assertThat(test.findForwardCurve(CHF_LIBOR_3M)).isEmpty(); }
private void assertCurves(List<RatesCurveGroup> curveGroups) { assertNotNull(curveGroups); assertEquals(curveGroups.size(), 1); RatesCurveGroup curveGroup = curveGroups.get(0); assertEquals(curveGroup.getName(), CurveGroupName.of("Default")); assertUsdDisc(curveGroup.findDiscountCurve(Currency.USD).get()); Curve usd3ml = curveGroup.findForwardCurve(IborIndices.USD_LIBOR_3M).get(); assertUsd3ml(usd3ml); }
public void test_ofCurves() { RatesCurveGroupDefinition definition = RatesCurveGroupDefinition.builder() .name(CurveGroupName.of("group")) .addCurve(DISCOUNT_NAME, GBP, GBP_LIBOR_1M) .addForwardCurve(IBOR_NAME, USD_LIBOR_1M, USD_LIBOR_2M) .addForwardCurve(OVERNIGHT_NAME, EUR_EONIA) .build(); RatesCurveGroup group = RatesCurveGroup.ofCurves(definition, DISCOUNT_CURVE, OVERNIGHT_CURVE, IBOR_CURVE); assertThat(group.findDiscountCurve(GBP)).hasValue(DISCOUNT_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_1M)).hasValue(IBOR_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_2M)).hasValue(IBOR_CURVE); assertThat(group.findForwardCurve(EUR_EONIA)).hasValue(OVERNIGHT_CURVE); }
/** * Writes the curve nodes in a CSV format to an appendable. * * @param underlying the underlying appendable destination * @param valuationDate the valuation date * @param group the curve group */ public static void writeCurveNodes(Appendable underlying, LocalDate valuationDate, RatesCurveGroup group) { CsvOutput csv = CsvOutput.standard(underlying); // header csv.writeLine(HEADERS_NODES); // rows String valuationDateStr = valuationDate.toString(); Map<Currency, Curve> discountingCurves = group.getDiscountCurves(); Set<CurveName> names = new HashSet<>(); for (Entry<Currency, Curve> entry : discountingCurves.entrySet()) { Curve curve = entry.getValue(); nodeLines(valuationDateStr, curve, csv); names.add(curve.getName()); } Map<Index, Curve> forwardCurves = group.getForwardCurves(); for (Entry<Index, Curve> entry : forwardCurves.entrySet()) { Curve curve = entry.getValue(); if (!names.contains(curve.getName())) { nodeLines(valuationDateStr, curve, csv); names.add(curve.getName()); } } }
public void test_ofCurves_duplicateCurveName() { RatesCurveGroupDefinition definition = RatesCurveGroupDefinition.builder() .name(CurveGroupName.of("group")) .addForwardCurve(IBOR_NAME, USD_LIBOR_1M, USD_LIBOR_2M) .build(); RatesCurveGroup group = RatesCurveGroup.ofCurves(definition, IBOR_CURVE, IBOR_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_1M)).hasValue(IBOR_CURVE); assertThat(group.findForwardCurve(USD_LIBOR_2M)).hasValue(IBOR_CURVE); }
public void test_load_all_curves() { ListMultimap<LocalDate, RatesCurveGroup> allGroups = RatesCurvesCsvLoader.loadAllDates( ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_1), ImmutableList.of(ResourceLocator.of(CURVES_1), ResourceLocator.of(CURVES_2), ResourceLocator.of(CURVES_3))); assertEquals(allGroups.size(), 2); assertCurves(allGroups.get(CURVE_DATE)); List<RatesCurveGroup> curves3 = allGroups.get(CURVE_DATE_CURVES_3); assertEquals(curves3.size(), 1); RatesCurveGroup group = curves3.get(0); // All curve points are set to 0 in test data to ensure these are really different curve instances Curve usdDisc = group.findDiscountCurve(Currency.USD).get(); InterpolatedNodalCurve usdDiscNodal = (InterpolatedNodalCurve) usdDisc; assertEquals(usdDiscNodal.getMetadata().getCurveName(), CurveName.of("USD-Disc")); assertTrue(usdDiscNodal.getYValues().equalZeroWithTolerance(0d)); Curve usd3ml = group.findForwardCurve(IborIndices.USD_LIBOR_3M).get(); InterpolatedNodalCurve usd3mlNodal = (InterpolatedNodalCurve) usd3ml; assertEquals(usd3mlNodal.getMetadata().getCurveName(), CurveName.of("USD-3ML")); assertTrue(usd3mlNodal.getYValues().equalZeroWithTolerance(0d)); }
public void stream() { RatesCurveGroup test = RatesCurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); List<Curve> expected = ImmutableList.<Curve>builder() .addAll(DISCOUNT_CURVES.values()) .addAll(IBOR_CURVES.values()) .build(); assertThat(test.stream().collect(toList())).containsOnlyElementsOf(expected); }
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Missing settings for curve: .*") public void test_noSettings() { List<RatesCurveGroup> curveGroups = RatesCurvesCsvLoader.load( CURVE_DATE, ResourceLocator.of(GROUPS_1), ResourceLocator.of(SETTINGS_EMPTY), ImmutableList.of(ResourceLocator.of(CURVES_1))); assertEquals(curveGroups.size(), 1); RatesCurveGroup curveGroup = Iterables.getOnlyElement(curveGroups); assertUsdDisc(curveGroup.findDiscountCurve(Currency.USD).get()); }
/** * Writes the curve settings in a CSV format to an appendable. * * @param underlying the underlying appendable destination * @param group the curve group */ public static void writeCurveSettings(Appendable underlying, RatesCurveGroup group) { CsvOutput csv = CsvOutput.standard(underlying); // header csv.writeLine(HEADERS_SETTINGS); // rows Map<Currency, Curve> discountingCurves = group.getDiscountCurves(); Set<CurveName> names = new HashSet<>(); for (Entry<Currency, Curve> entry : discountingCurves.entrySet()) { Curve curve = entry.getValue(); csv.writeLine(curveSettings(curve)); names.add(curve.getName()); } Map<Index, Curve> forwardCurves = group.getForwardCurves(); for (Entry<Index, Curve> entry : forwardCurves.entrySet()) { Curve curve = entry.getValue(); if (!names.contains(curve.getName())) { csv.writeLine(curveSettings(curve)); names.add(curve.getName()); } } }
public void test_serialization() { RatesCurveGroup test = RatesCurveGroup.of(NAME, DISCOUNT_CURVES, IBOR_CURVES); assertSerialization(test); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 3373707: // name return ((RatesCurveGroup) bean).getName(); case -624113147: // discountCurves return ((RatesCurveGroup) bean).getDiscountCurves(); case -850086775: // forwardCurves return ((RatesCurveGroup) bean).getForwardCurves(); } return super.propertyGet(bean, propertyName, quiet); }
RatesCurveGroup curveGroup = RatesCurveGroup.ofCurves(groupDefinition, entry.getValue().values()); builder.put(entry.getKey(), curveGroup);
return RatesCurveGroup.of(curveGroupDefinition.getName(), discountCurves, forwardCurves);
private static void writeCurveGroup(CsvOutput csv, RatesCurveGroup group) { String groupName = group.getName().getName(); Map<Currency, Curve> discountingCurves = group.getDiscountCurves(); for (Entry<Currency, Curve> entry : discountingCurves.entrySet()) { List<String> line = new ArrayList<>(4); line.add(groupName); line.add(DISCOUNT); line.add(entry.getKey().toString()); line.add(entry.getValue().getName().getName()); csv.writeLine(line); } Map<Index, Curve> forwardCurves = group.getForwardCurves(); for (Entry<Index, Curve> entry : forwardCurves.entrySet()) { List<String> line = new ArrayList<>(4); line.add(groupName); line.add(FORWARD); line.add(entry.getKey().toString()); line.add(entry.getValue().getName().getName()); csv.writeLine(line); } }