Example #1
0
        private ImmutableRatesProvider createProvider(double rateStart, double rateStartInterp, double rateEnd, double rateEndInterp)
        {
            LocalDateDoubleTimeSeries timeSeries = LocalDateDoubleTimeSeries.of(VAL_DATE.with(lastDayOfMonth()), 300);
            InterpolatedNodalCurve    curve      = InterpolatedNodalCurve.of(Curves.prices("GB-RPIX"), DoubleArray.of(4, 5, 16, 17), DoubleArray.of(rateStart, rateStartInterp, rateEnd, rateEndInterp), INTERPOLATOR);

            return(ImmutableRatesProvider.builder(VAL_DATE).priceIndexCurve(GB_RPIX, curve).timeSeries(GB_RPIX, timeSeries).build());
        }
Example #2
0
        public virtual void test_rate()
        {
            SimpleRatesProvider       prov       = new SimpleRatesProvider();
            LocalDateDoubleTimeSeries timeSeries = LocalDateDoubleTimeSeries.of(FIXING_DATE, RATE);
            IborIndexRates            mockIbor   = new TestingIborIndexRates(GBP_LIBOR_3M, FIXING_DATE, LocalDateDoubleTimeSeries.empty(), timeSeries);

            prov.IborRates = mockIbor;

            ForwardIborRateComputationFn obsFn = ForwardIborRateComputationFn.DEFAULT;

            assertEquals(obsFn.rate(GBP_LIBOR_3M_COMP, ACCRUAL_START_DATE, ACCRUAL_END_DATE, prov), RATE);

            // explain
            ExplainMapBuilder builder = ExplainMap.builder();

            assertEquals(obsFn.explainRate(GBP_LIBOR_3M_COMP, ACCRUAL_START_DATE, ACCRUAL_END_DATE, prov, builder), RATE);

            ExplainMap built = builder.build();

            assertEquals(built.get(ExplainKey.OBSERVATIONS).Present, true);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().size(), 1);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.FIXING_DATE), FIXING_DATE);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.INDEX), GBP_LIBOR_3M);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.INDEX_VALUE), RATE);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.FROM_FIXING_SERIES), true);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.FORWARD_RATE_START_DATE), FORWARD_START_DATE);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.FORWARD_RATE_END_DATE), FORWARD_END_DATE);
            assertEquals(built.get(ExplainKey.COMBINED_RATE), RATE);
        }
        //-------------------------------------------------------------------------
        public virtual void test_builder()
        {
            LocalDateDoubleTimeSeries ts   = LocalDateDoubleTimeSeries.of(PREV_DATE, 0.62d);
            ImmutableRatesProvider    test = ImmutableRatesProvider.builder(VAL_DATE).timeSeries(GBP_USD_WM, ts).build();

            assertEquals(test.ValuationDate, VAL_DATE);
            assertEquals(ImmutableRatesProvider.meta().timeSeries().get(test), ImmutableMap.of(GBP_USD_WM, ts));
            assertSame(test.toImmutableRatesProvider(), test);
        }
        //-------------------------------------------------------------------------
        public virtual void test_fxIndexRates()
        {
            LocalDateDoubleTimeSeries ts   = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d);
            ImmutableRatesProvider    test = ImmutableRatesProvider.builder(VAL_DATE).fxRateProvider(FX_MATRIX).discountCurve(GBP, DISCOUNT_CURVE_GBP).discountCurve(USD, DISCOUNT_CURVE_USD).timeSeries(GBP_USD_WM, ts).build();

            assertEquals(test.fxIndexRates(GBP_USD_WM).Index, GBP_USD_WM);
            assertEquals(test.fxIndexRates(GBP_USD_WM).Fixings, ts);
            assertEquals(test.TimeSeriesIndices, ImmutableSet.of(GBP_USD_WM));
        }
        //-------------------------------------------------------------------------
        public virtual void test_priceIndexValues()
        {
            LocalDateDoubleTimeSeries ts   = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d);
            ImmutableRatesProvider    test = ImmutableRatesProvider.builder(VAL_DATE).priceIndexCurve(GB_RPI, GBPRI_CURVE).timeSeries(GB_RPI, ts).build();

            assertEquals(test.priceIndexValues(GB_RPI).Index, GB_RPI);
            assertEquals(test.priceIndexValues(GB_RPI).Fixings, ts);
            assertEquals(test.PriceIndices, ImmutableSet.of(GB_RPI));
            assertEquals(test.TimeSeriesIndices, ImmutableSet.of(GB_RPI));
        }
        //-------------------------------------------------------------------------
        public virtual void test_overnightIndexRates()
        {
            LocalDateDoubleTimeSeries ts   = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d);
            ImmutableRatesProvider    test = ImmutableRatesProvider.builder(VAL_DATE).overnightIndexCurve(USD_FED_FUND, FED_FUND_CURVE).timeSeries(USD_FED_FUND, ts).build();

            assertEquals(test.overnightIndexRates(USD_FED_FUND).Index, USD_FED_FUND);
            assertEquals(test.overnightIndexRates(USD_FED_FUND).Fixings, ts);
            assertEquals(test.OvernightIndices, ImmutableSet.of(USD_FED_FUND));
            assertEquals(test.TimeSeriesIndices, ImmutableSet.of(USD_FED_FUND));
        }
        //-------------------------------------------------------------------------
        public virtual void test_iborIndexRates()
        {
            LocalDateDoubleTimeSeries ts   = LocalDateDoubleTimeSeries.of(VAL_DATE, 0.62d);
            ImmutableRatesProvider    test = ImmutableRatesProvider.builder(VAL_DATE).iborIndexCurve(USD_LIBOR_3M, USD_LIBOR_CURVE).timeSeries(USD_LIBOR_3M, ts).build();

            assertEquals(test.iborIndexRates(USD_LIBOR_3M).Index, USD_LIBOR_3M);
            assertEquals(test.iborIndexRates(USD_LIBOR_3M).Fixings, ts);
            assertEquals(test.IborIndices, ImmutableSet.of(USD_LIBOR_3M));
            assertEquals(test.TimeSeriesIndices, ImmutableSet.of(USD_LIBOR_3M));
        }
        public virtual void test_rate()
        {
            RatesProvider             mockProv    = mock(typeof(RatesProvider));
            LocalDateDoubleTimeSeries timeSeries  = LocalDateDoubleTimeSeries.of(FIXING_DATE, RATE3TS);
            IborIndexRates            mockRates3M = new TestingIborIndexRates(GBP_LIBOR_3M, FIXING_DATE, LocalDateDoubleTimeSeries.empty(), timeSeries);
            IborIndexRates            mockRates6M = new TestingIborIndexRates(GBP_LIBOR_6M, FIXING_DATE, LocalDateDoubleTimeSeries.of(FIXING_DATE, RATE6), LocalDateDoubleTimeSeries.empty());

            when(mockProv.iborIndexRates(GBP_LIBOR_3M)).thenReturn(mockRates3M);
            when(mockProv.iborIndexRates(GBP_LIBOR_6M)).thenReturn(mockRates6M);

            IborInterpolatedRateComputation          ro  = IborInterpolatedRateComputation.of(GBP_LIBOR_3M, GBP_LIBOR_6M, FIXING_DATE, REF_DATA);
            ForwardIborInterpolatedRateComputationFn obs = ForwardIborInterpolatedRateComputationFn.DEFAULT;
            LocalDate fixingEndDate3M = GBP_LIBOR_3M_OBS.MaturityDate;
            LocalDate fixingEndDate6M = GBP_LIBOR_6M_OBS.MaturityDate;
            double    days3M          = fixingEndDate3M.toEpochDay() - FIXING_DATE.toEpochDay(); //nb days in 3M fixing period
            double    days6M          = fixingEndDate6M.toEpochDay() - FIXING_DATE.toEpochDay(); //nb days in 6M fixing period
            double    daysCpn         = ACCRUAL_END_DATE.toEpochDay() - FIXING_DATE.toEpochDay();
            double    weight3M        = (days6M - daysCpn) / (days6M - days3M);
            double    weight6M        = (daysCpn - days3M) / (days6M - days3M);
            double    rateExpected    = (weight3M * RATE3TS + weight6M * RATE6);
            double    rateComputed    = obs.rate(ro, ACCRUAL_START_DATE, ACCRUAL_END_DATE, mockProv);

            assertEquals(rateComputed, rateExpected, TOLERANCE_RATE);

            // explain
            ExplainMapBuilder builder = ExplainMap.builder();

            assertEquals(obs.explainRate(ro, ACCRUAL_START_DATE, ACCRUAL_END_DATE, mockProv, builder), rateExpected, TOLERANCE_RATE);

            ExplainMap built = builder.build();

            assertEquals(built.get(ExplainKey.OBSERVATIONS).Present, true);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().size(), 2);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.FIXING_DATE), FIXING_DATE);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.INDEX), GBP_LIBOR_3M);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.INDEX_VALUE), RATE3TS);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.WEIGHT), weight3M);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(0).get(ExplainKey.FROM_FIXING_SERIES), true);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(1).get(ExplainKey.FIXING_DATE), FIXING_DATE);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(1).get(ExplainKey.INDEX), GBP_LIBOR_6M);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(1).get(ExplainKey.INDEX_VALUE), RATE6);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(1).get(ExplainKey.WEIGHT), weight6M);
            assertEquals(built.get(ExplainKey.OBSERVATIONS).get().get(1).get(ExplainKey.FROM_FIXING_SERIES), null);
            assertEquals(built.get(ExplainKey.COMBINED_RATE), rateExpected);
        }
        public virtual void test_currentCash_onPaymentDate()
        {
            LocalDate              paymentDate   = RFRA.PaymentDate;
            double                 publishedRate = 0.025;
            ResolvedFraTrade       trade         = FraTrade.builder().info(TradeInfo.builder().tradeDate(paymentDate).build()).product(FRA).build().resolve(REF_DATA);
            ImmutableRatesProvider ratesProvider = RatesProviderDataSets.multiGbp(paymentDate).toBuilder().timeSeries(GBP_LIBOR_3M, LocalDateDoubleTimeSeries.of(paymentDate, publishedRate)).build();

            assertEquals(PRICER_TRADE.currentCash(trade, ratesProvider), CurrencyAmount.of(FRA.Currency, (publishedRate - FRA.FixedRate) / (1d + publishedRate * RFRA.YearFraction) * RFRA.YearFraction * RFRA.Notional));
        }
 /// <summary>
 /// Create a yield curve bundle with three curves.
 /// One called "Discounting EUR" with a constant rate of 2.50%, one called "Discounting USD"
 /// with a constant rate of 1.00% and one called "Discounting GBP" with a constant rate of 2.00%;
 /// "Discounting KRW" with a constant rate of 3.21%;
 /// </summary>
 /// <param name="valuationDate">  the valuation date </param>
 /// <param name="fxIndex">  the FX index </param>
 /// <param name="spotRate">  the spot rate for the index </param>
 /// <returns> the provider </returns>
 public static RatesProvider createProvider(LocalDate valuationDate, FxIndex fxIndex, double spotRate)
 {
     return(ImmutableRatesProvider.builder(valuationDate).discountCurve(EUR, EUR_DSC).discountCurve(USD, USD_DSC).discountCurve(GBP, GBP_DSC).discountCurve(KRW, KRW_DSC).fxRateProvider(FX_MATRIX).timeSeries(fxIndex, LocalDateDoubleTimeSeries.of(fxIndex.calculateFixingFromMaturity(valuationDate, REF_DATA), spotRate)).build());
 }
Example #11
0
        //-------------------------------------------------------------------------
        public virtual void coverage()
        {
            SimplePriceIndexValues instance1 = SimplePriceIndexValues.of(US_CPI_U, VAL_DATE, CURVE_NOFIX, USCPI_TS);

            coverImmutableBean(instance1);
            SimplePriceIndexValues test2 = SimplePriceIndexValues.of(GB_HICP, VAL_DATE.plusMonths(1), CURVE_NOFIX, LocalDateDoubleTimeSeries.of(VAL_MONTH.minusMonths(2).atEndOfMonth(), 100d));

            coverBeanEquals(instance1, test2);
        }