/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(FraTemplate beanToCopy) { this.periodToStart = beanToCopy.getPeriodToStart(); this.periodToEnd = beanToCopy.getPeriodToEnd(); this.convention = beanToCopy.getConvention(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case -574688858: // periodToStart return ((FraTemplate) bean).getPeriodToStart(); case -970442977: // periodToEnd return ((FraTemplate) bean).getPeriodToEnd(); case 2039569265: // convention return ((FraTemplate) bean).getConvention(); } return super.propertyGet(bean, propertyName, quiet); }
@ImmutablePreBuild private static void preBuild(Builder builder) { if (builder.label == null && builder.template != null) { builder.label = Tenor.of(builder.template.getPeriodToEnd()).toString(); } }
@Override public double initialGuess(MarketData marketData, ValueType valueType) { if (ValueType.ZERO_RATE.equals(valueType) || ValueType.FORWARD_RATE.equals(valueType)) { return marketData.getValue(rateId); } if (ValueType.DISCOUNT_FACTOR.equals(valueType)) { double approximateMaturity = template.getPeriodToEnd().toTotalMonths() / 12.0d; return Math.exp(-approximateMaturity * marketData.getValue(rateId)); } return 0d; }
@Override public DatedParameterMetadata metadata(LocalDate valuationDate, ReferenceData refData) { LocalDate nodeDate = date(valuationDate, refData); if (date.isFixed()) { return LabelDateParameterMetadata.of(nodeDate, label); } Tenor tenor = Tenor.of(template.getPeriodToEnd()); return TenorDateParameterMetadata.of(nodeDate, tenor, label); }
public void test_of_PeriodIndex() { FraTemplate test = FraTemplate.of(Period.ofMonths(2), GBP_LIBOR_3M); assertEquals(test.getPeriodToStart(), Period.ofMonths(2)); assertEquals(test.getPeriodToEnd(), Period.ofMonths(5)); // defaulted assertEquals(test.getConvention(), FRA_GBP_LIBOR_3M); }
public void test_initialGuess() { FraCurveNode node = FraCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD); double rate = 0.035; MarketData marketData = ImmutableMarketData.builder(VAL_DATE).addValue(QUOTE_ID, rate).build(); assertEquals(node.initialGuess(marketData, ValueType.ZERO_RATE), rate); assertEquals(node.initialGuess(marketData, ValueType.FORWARD_RATE), rate); double approximateMaturity = TEMPLATE.getPeriodToEnd().toTotalMonths() / 12.0d; double df = Math.exp(-approximateMaturity * rate); assertEquals(node.initialGuess(marketData, ValueType.DISCOUNT_FACTOR), df); assertEquals(node.initialGuess(marketData, ValueType.PRICE_INDEX), 0d); }
public void test_of_PeriodPeriodConvention() { FraTemplate test = FraTemplate.of(Period.ofMonths(2), Period.ofMonths(4), FRA_GBP_LIBOR_3M); assertEquals(test.getPeriodToStart(), Period.ofMonths(2)); assertEquals(test.getPeriodToEnd(), Period.ofMonths(4)); assertEquals(test.getConvention(), FRA_GBP_LIBOR_3M); }
public void test_builder_defaults() { FraTemplate test = FraTemplate.builder() .periodToStart(Period.ofMonths(2)) .convention(FRA_GBP_LIBOR_3M) .build(); assertEquals(test.getPeriodToStart(), Period.ofMonths(2)); assertEquals(test.getPeriodToEnd(), Period.ofMonths(5)); // defaulted assertEquals(test.getConvention(), FRA_GBP_LIBOR_3M); }