/** * Creates an instance. * <p> * Use {@link LocalDateDoubleTimeSeries#toBuilder()}. * * @param dates the dates to initialize with * @param values the values to initialize with */ LocalDateDoubleTimeSeriesBuilder(LocalDate[] dates, double[] values) { for (int i = 0; i < dates.length; i++) { put(dates[i], values[i]); } }
public void test_putAll_stream() { Collection<LocalDate> dates = Arrays.asList(date(2013, 1, 1), date(2014, 1, 1)); Collection<Double> values = Doubles.asList(2d, 3d); LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(dates, values).build(); LocalDateDoubleTimeSeriesBuilder test = LocalDateDoubleTimeSeries.builder(); test.put(date(2012, 1, 1), 0d); test.put(date(2013, 1, 1), 1d); test.putAll(base.stream()); assertEquals(test.get(date(2012, 1, 1)), OptionalDouble.of(0d)); assertEquals(test.get(date(2013, 1, 1)), OptionalDouble.of(2d)); assertEquals(test.get(date(2014, 1, 1)), OptionalDouble.of(3d)); }
/** * Puts all the entries from the supplied map into this builder. * <p> * If a date is duplicated it will overwrite an earlier entry. * * @param map the map of points to be added * @return this builder */ public LocalDateDoubleTimeSeriesBuilder putAll(Map<LocalDate, Double> map) { ArgChecker.noNulls(map, "map"); map.entrySet().forEach(e -> put(e.getKey(), e.getValue())); return this; }
public void test_putAll_toBuilder() { Collection<LocalDate> dates = Arrays.asList(date(2013, 1, 1), date(2014, 1, 1)); Collection<Double> values = Doubles.asList(2d, 3d); LocalDateDoubleTimeSeries base = LocalDateDoubleTimeSeries.builder().putAll(dates, values).build(); LocalDateDoubleTimeSeriesBuilder test = LocalDateDoubleTimeSeries.builder(); test.put(date(2012, 1, 1), 0d); test.put(date(2013, 1, 1), 1d); test.putAll(base.toBuilder()); assertEquals(test.get(date(2012, 1, 1)), OptionalDouble.of(0d)); assertEquals(test.get(date(2013, 1, 1)), OptionalDouble.of(2d)); assertEquals(test.get(date(2014, 1, 1)), OptionalDouble.of(3d)); }
/** * Creates an instance. * <p> * Use {@link DenseLocalDateDoubleTimeSeries#toBuilder()}. * * @param points the stream of points to initialize with */ LocalDateDoubleTimeSeriesBuilder(Stream<LocalDateDoublePoint> points) { points.forEach(pt -> put(pt.getDate(), pt.getValue())); }
public void test_NaN_is_not_allowed() { assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.of(DATE_2015_01_02, Double.NaN)); assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.builder().put(DATE_2015_01_02, Double.NaN)); assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.builder().putAll( ImmutableMap.of(DATE_2015_01_02, Double.NaN))); assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.builder().put( LocalDateDoublePoint.of(DATE_2015_01_02, Double.NaN))); assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.builder().putAll( ImmutableList.of(DATE_2015_01_02), ImmutableList.of(Double.NaN))); assertThrowsIllegalArg(() -> LocalDateDoubleTimeSeries.builder().putAll( ImmutableList.of(LocalDateDoublePoint.of(DATE_2015_01_02, Double.NaN)))); LocalDateDoubleTimeSeries s1 = LocalDateDoubleTimeSeries.of(DATE_2015_01_02, 1d); LocalDateDoubleTimeSeries s2 = LocalDateDoubleTimeSeries.of(DATE_2015_01_02, 2d); assertThrowsIllegalArg(() -> s1.intersection(s2, (d1, d2) -> Double.NaN)); assertThrowsIllegalArg(() -> s1.mapValues(d -> Double.NaN)); }
private void assertLibor6mSeries(LocalDateDoubleTimeSeries actualSeries) { assertEquals(actualSeries.size(), 3); LocalDateDoubleTimeSeries expectedSeries = LocalDateDoubleTimeSeries.builder() .put(LocalDate.of(1971, 1, 4), 0.0681) .put(LocalDate.of(1971, 1, 5), 0.0675) .put(LocalDate.of(1971, 1, 6), 0.0669) .build(); assertEquals(actualSeries, expectedSeries); }
/** * Obtains a time-series containing a single date and value. * * @param date the singleton date * @param value the singleton value * @return the time-series */ public static LocalDateDoubleTimeSeries of(LocalDate date, double value) { ArgChecker.notNull(date, "date"); return builder().put(date, value).build(); }
/** * Puts the specified date/value point into this builder. * * @param point the point to be added * @return this builder */ public LocalDateDoubleTimeSeriesBuilder put(LocalDateDoublePoint point) { ArgChecker.notNull(point, "point"); put(point.getDate(), point.getValue()); return this; }
private void assertPriceIndexSeries(LocalDateDoubleTimeSeries actualSeries) { assertEquals(actualSeries.size(), 3); LocalDateDoubleTimeSeries expectedSeries = LocalDateDoubleTimeSeries.builder() .put(LocalDate.of(2017, 1, 31), 200) .put(LocalDate.of(2017, 2, 28), 300) .put(LocalDate.of(2017, 3, 31), 390) .build(); assertEquals(actualSeries, expectedSeries); }
private void assertLibor3mSeries(LocalDateDoubleTimeSeries actualSeries) { assertEquals(actualSeries.size(), 3); LocalDateDoubleTimeSeries expectedSeries = LocalDateDoubleTimeSeries.builder() .put(LocalDate.of(1971, 1, 4), 0.065) .put(LocalDate.of(1971, 1, 5), 0.0638) .put(LocalDate.of(1971, 1, 6), 0.0638) .build(); assertEquals(actualSeries, expectedSeries); }
public void test_earliest_with_subseries() { LocalDateDoubleTimeSeries series = LocalDateDoubleTimeSeries.builder() .put(DATE_2015_01_03, 3d) // Saturday, so include weekends .put(DATE_2015_01_05, 5d) .put(DATE_2015_01_06, 6d) .put(DATE_2015_01_07, 7d) .put(DATE_2015_01_08, 8d) .put(DATE_2015_01_09, 9d) .put(DATE_2015_01_11, 11d) .build(); LocalDateDoubleTimeSeries subSeries = series.subSeries(DATE_2015_01_04, DATE_2015_01_11); assertEquals(subSeries.getEarliestDate(), DATE_2015_01_05); assertEquals(subSeries.getEarliestValue(), 5d); assertEquals(subSeries.getLatestDate(), DATE_2015_01_09); assertEquals(subSeries.getLatestValue(), 9d); }
public void test_get() { LocalDateDoubleTimeSeriesBuilder test = LocalDateDoubleTimeSeries.builder() .put(date(2014, 1, 1), 14) .put(date(2012, 1, 1), 12) .put(date(2013, 1, 1), 13); assertEquals(test.get(date(2012, 1, 1)), OptionalDouble.of(12d)); assertEquals(test.get(date(2013, 1, 1)), OptionalDouble.of(13d)); assertEquals(test.get(date(2014, 1, 1)), OptionalDouble.of(14d)); assertEquals(test.get(date(2015, 1, 1)), OptionalDouble.empty()); }
public void test_seriesGetsSorted() { LocalDateDoubleTimeSeries test = LocalDateDoubleTimeSeries.builder() .put(date(2014, 1, 1), 14) .put(date(2012, 1, 1), 12) .put(date(2013, 1, 1), 13) .build(); assertEquals(test.size(), 3); assertEquals(test.getEarliestDate(), date(2012, 1, 1)); assertEquals(test.getLatestDate(), date(2014, 1, 1)); assertEquals(test.get(date(2012, 1, 1)), OptionalDouble.of(12d)); assertEquals(test.get(date(2013, 1, 1)), OptionalDouble.of(13d)); assertEquals(test.get(date(2014, 1, 1)), OptionalDouble.of(14d)); }
public void test_initialGuess() { FixedInflationSwapCurveNode node = FixedInflationSwapCurveNode.of(TEMPLATE, QUOTE_ID, SPREAD); LocalDate valuationDate = LocalDate.of(2015, 1, 22); double rate = 0.035; double lastPriceIndex = 123.4; LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.builder() .put(LocalDate.of(2024, 10, 31), lastPriceIndex).build(); MarketData marketData = ImmutableMarketData.builder(valuationDate).addValue(QUOTE_ID, rate) .addTimeSeries(IndexQuoteId.of(PriceIndices.EU_EXT_CPI), ts).build(); assertEquals(node.initialGuess(marketData, ValueType.ZERO_RATE), rate); double priceIndexGuess = lastPriceIndex * Math.pow(1.0d + rate, TENOR_10Y.get(ChronoUnit.YEARS)); assertEquals(node.initialGuess(marketData, ValueType.PRICE_INDEX), priceIndexGuess, TOLERANCE_GUESS); }
public void test_periodRatePointSensitivity_onholidaybeforepublication() { LocalDate lastFixingDate = LocalDate.of(2017, 6, 30); LocalDate gbdBeforeValDate = LocalDate.of(2017, 7, 3); LocalDate gbdAfterValDate = LocalDate.of(2017, 7, 5); double fixingValue = 0.0010; InterpolatedNodalCurve curve = InterpolatedNodalCurve.of(METADATA, DoubleArray.of(-1.0d, 10.0d), DoubleArray.of(0.01, 0.02), INTERPOLATOR); ZeroRateDiscountFactors df = ZeroRateDiscountFactors.of(USD, LocalDate.of(2017, 7, 4), curve); LocalDateDoubleTimeSeries series = LocalDateDoubleTimeSeries.builder() .put(lastFixingDate, fixingValue) .build(); DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(USD_FED_FUND, df, series); OvernightIndexObservation obs = OvernightIndexObservation.of(USD_FED_FUND, gbdBeforeValDate, REF_DATA); OvernightRateSensitivity expected = OvernightRateSensitivity.ofPeriod(obs, gbdAfterValDate, USD, 1d); assertEquals(test.periodRatePointSensitivity(obs, gbdAfterValDate), expected); }
public void test_presentValueSensitivity_finiteDifference_onholyday() { ResolvedSwapLeg expSwapLeg = OIS.getLegs().get(1); LocalDateDoubleTimeSeries ts = LocalDateDoubleTimeSeries.builder() .put(LocalDate.of(2017, 6, 30), 0.0010).build(); ImmutableRatesProvider multicurve = RatesProviderDataSets.multiUsd(LocalDate.of(2017, 7, 4)); multicurve = multicurve.toBuilder().timeSeries(USD_FED_FUND, ts).build(); PointSensitivities point = PRICER_LEG.presentValueSensitivity(expSwapLeg, multicurve).build(); CurrencyParameterSensitivities psAd = multicurve.parameterSensitivity(point); CurrencyParameterSensitivities psFd = FINITE_DIFFERENCE_CALCULATOR.sensitivity(multicurve, (p) -> PRICER_LEG.presentValue(expSwapLeg, p)); ImmutableList<CurrencyParameterSensitivity> listAd = psAd.getSensitivities(); ImmutableList<CurrencyParameterSensitivity> listFd = psFd.getSensitivities(); assertEquals(listAd.size(), 1); // Only ON sensitivity assertEquals(listFd.size(), 3); // Libor 6M sensitivity equal to 0 in Finite Difference assertTrue(psAd.equalWithTolerance(psFd, TOLERANCE_DELTA)); }
public void test_merge_dateValue() { LocalDateDoubleTimeSeriesBuilder test = LocalDateDoubleTimeSeries.builder(); test.put(date(2013, 1, 1), 2d); test.merge(date(2013, 1, 1), 3d, Double::sum); assertEquals(test.get(date(2013, 1, 1)), OptionalDouble.of(5d)); }
public void test_merge_point() { LocalDateDoubleTimeSeriesBuilder test = LocalDateDoubleTimeSeries.builder(); test.put(date(2013, 1, 1), 2d); test.merge(LocalDateDoublePoint.of(date(2013, 1, 1), 3d), Double::sum); assertEquals(test.get(date(2013, 1, 1)), OptionalDouble.of(5d)); }