@ImmutablePreBuild private static void preBuild(Builder builder) { if (builder.index != null) { if (builder.dayCount == null) { builder.dayCount = builder.index.getDayCount(); } } }
private static double approximatedInterest( OvernightIndexObservation observation, LocalDate endDate, OvernightIndexRates rates) { DayCount dayCount = observation.getIndex().getDayCount(); double remainingFixingAccrualFactor = dayCount.yearFraction(observation.getEffectiveDate(), endDate); double forwardRate = rates.periodRate(observation, endDate); return Math.log(1.0 + forwardRate * remainingFixingAccrualFactor); }
@Override public double periodRate(OvernightIndexObservation startDateObservation, LocalDate endDate) { LocalDate effectiveDate = startDateObservation.getEffectiveDate(); ArgChecker.inOrderNotEqual(effectiveDate, endDate, "startDate", "endDate"); double accrualFactor = startDateObservation.getIndex().getDayCount().yearFraction(effectiveDate, endDate); return simplyCompoundForwardRate(effectiveDate, endDate, accrualFactor); }
public void test_usdFedFund3m() { OvernightIndex test = OvernightIndex.of("USD-FED-FUND"); assertEquals(test.getCurrency(), USD); assertEquals(test.getName(), "USD-FED-FUND"); assertEquals(test.getFixingCalendar(), USNY); assertEquals(test.getPublicationDateOffset(), 1); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.getDefaultFixedLegDayCount(), ACT_360); assertEquals(test.toString(), "USD-FED-FUND"); }
public void test_dkkOis() { OvernightIndex test = OvernightIndex.of("DKK-TNR"); assertEquals(test.getName(), "DKK-TNR"); assertEquals(test.getCurrency(), DKK); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), DKCO); assertEquals(test.getPublicationDateOffset(), 1); assertEquals(test.getEffectiveDateOffset(), 1); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.getDefaultFixedLegDayCount(), ACT_360); assertEquals(test.toString(), "DKK-TNR"); }
public void test_sekOis() { OvernightIndex test = OvernightIndex.of("SEK-SIOR"); assertEquals(test.getName(), "SEK-SIOR"); assertEquals(test.getCurrency(), SEK); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), SEST); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 1); assertEquals(test.getDayCount(), ACT_360); assertEquals(test.getDefaultFixedLegDayCount(), ACT_360); assertEquals(test.toString(), "SEK-SIOR"); }
public void test_zarSabor() { OvernightIndex test = OvernightIndex.of("ZAR-SABOR"); assertEquals(test.getName(), "ZAR-SABOR"); assertEquals(test.getCurrency(), ZAR); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), ZAJO); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.toString(), "ZAR-SABOR"); }
public void test_inrOis() { OvernightIndex test = OvernightIndex.of("INR-OMIBOR"); assertEquals(test.getName(), "INR-OMIBOR"); assertEquals(test.getCurrency(), INR); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), HolidayCalendarId.of("INMU")); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.toString(), "INR-OMIBOR"); }
public void test_audAonia() { OvernightIndex test = OvernightIndex.of("AUD-AONIA"); assertEquals(test.getName(), "AUD-AONIA"); assertEquals(test.getCurrency(), AUD); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), AUSY); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.toString(), "AUD-AONIA"); }
public void test_plnOis() { OvernightIndex test = OvernightIndex.of("PLN-POLONIA"); assertEquals(test.getName(), "PLN-POLONIA"); assertEquals(test.getCurrency(), PLN); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), PLWA); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.toString(), "PLN-POLONIA"); }
public void test_brlCdi() { OvernightIndex test = OvernightIndex.of("BRL-CDI"); assertEquals(test.getName(), "BRL-CDI"); assertEquals(test.getCurrency(), BRL); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), BRBD); assertEquals(test.getPublicationDateOffset(), 1); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), DayCount.ofBus252(BRBD)); assertEquals(test.toString(), "BRL-CDI"); }
public void test_sgdSonar() { HolidayCalendarId SGSI = HolidayCalendarId.of("SGSI"); OvernightIndex test = OvernightIndex.of("SGD-SONAR"); assertEquals(test.getName(), "SGD-SONAR"); assertEquals(test.getCurrency(), SGD); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), SGSI); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.toString(), "SGD-SONAR"); }
public void test_nzdOis() { OvernightIndex test = OvernightIndex.of("NZD-NZIONA"); assertEquals(test.getName(), "NZD-NZIONA"); assertEquals(test.getCurrency(), NZD); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), HolidayCalendarId.of("NZBD")); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.toString(), "NZD-NZIONA"); }
public void test_gbpSonia() { OvernightIndex test = OvernightIndex.of("GBP-SONIA"); assertEquals(test.getName(), "GBP-SONIA"); assertEquals(test.getCurrency(), GBP); assertEquals(test.isActive(), true); assertEquals(test.getFixingCalendar(), GBLO); assertEquals(test.getPublicationDateOffset(), 0); assertEquals(test.getEffectiveDateOffset(), 0); assertEquals(test.getDayCount(), ACT_365F); assertEquals(test.getDefaultFixedLegDayCount(), ACT_365F); assertEquals(test.getFloatingRateName(), FloatingRateName.of("GBP-SONIA")); assertEquals(test.toString(), "GBP-SONIA"); }
private static PointSensitivityBuilder approximatedInterestSensitivity( OvernightIndexObservation observation, LocalDate endDate, OvernightIndexRates rates) { DayCount dayCount = observation.getIndex().getDayCount(); double remainingFixingAccrualFactor = dayCount.yearFraction(observation.getEffectiveDate(), endDate); double forwardRate = rates.periodRate(observation, endDate); PointSensitivityBuilder forwardRateSensitivity = rates.periodRatePointSensitivity(observation, endDate); double rateExp = 1.0 + forwardRate * remainingFixingAccrualFactor; forwardRateSensitivity = forwardRateSensitivity.multipliedBy(remainingFixingAccrualFactor / rateExp); return forwardRateSensitivity; }
public void test_periodRate() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES); double accrualFactor = GBP_SONIA.getDayCount().yearFraction(DATE_AFTER, DATE_AFTER_END); double expected = (DFCURVE.discountFactor(DATE_AFTER) / DFCURVE.discountFactor(DATE_AFTER_END) - 1) / accrualFactor; assertEquals(test.periodRate(GBP_SONIA_AFTER, DATE_AFTER_END), expected, 1e-8); }
public void test_periodRate_publication_1() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(USD_FED_FUND, DFCURVE, SERIES); double accrualFactor = USD_FED_FUND.getDayCount().yearFraction(DATE_BEFORE, DATE_VAL); double expected = (DFCURVE.discountFactor(DATE_BEFORE) / DFCURVE.discountFactor(DATE_VAL) - 1) / accrualFactor; assertEquals(test.periodRate(USD_FEDFUND_BEFORE, DATE_VAL), expected, 1e-8); }
private ObservationDetails(OvernightCompoundedAnnualRateComputation computation, OvernightIndexRates rates) { this.computation = computation; this.rates = rates; this.indexFixingDateSeries = rates.getFixings(); this.dayCount = computation.getIndex().getDayCount(); this.firstFixing = computation.getStartDate(); this.lastFixingP1 = computation.getEndDate(); this.lastFixing = computation.getFixingCalendar().previous(lastFixingP1); LocalDate startUnderlyingPeriod = computation.calculateEffectiveFromFixing(firstFixing); LocalDate endUnderlyingPeriod = computation.calculateMaturityFromFixing(lastFixing); this.accrualFactorTotal = dayCount.yearFraction(startUnderlyingPeriod, endUnderlyingPeriod); }
public void test_rate_onPublication_noFixing() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES_EMPTY); LocalDate startDate = GBP_SONIA_VAL.getEffectiveDate(); LocalDate endDate = GBP_SONIA_VAL.getMaturityDate(); double accrualFactor = GBP_SONIA.getDayCount().yearFraction(startDate, endDate); double expected = (DFCURVE.discountFactor(startDate) / DFCURVE.discountFactor(endDate) - 1) / accrualFactor; assertEquals(test.rate(GBP_SONIA_VAL), expected, 1e-4); }
public void test_rate_afterPublication() { DiscountOvernightIndexRates test = DiscountOvernightIndexRates.of(GBP_SONIA, DFCURVE, SERIES); LocalDate startDate = GBP_SONIA_AFTER.getEffectiveDate(); LocalDate endDate = GBP_SONIA_AFTER.getMaturityDate(); double accrualFactor = GBP_SONIA.getDayCount().yearFraction(startDate, endDate); double expected = (DFCURVE.discountFactor(startDate) / DFCURVE.discountFactor(endDate) - 1) / accrualFactor; assertEquals(test.rate(GBP_SONIA_AFTER), expected, 1e-8); }