/**
* Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.product.swap.type;
import static com.opengamma.strata.basics.date.DayCounts.ACT_360;
import static com.opengamma.strata.basics.date.DayCounts.ACT_365F;
import static com.opengamma.strata.basics.index.IborIndices.GBP_LIBOR_3M;
import static com.opengamma.strata.basics.index.IborIndices.USD_LIBOR_3M;
import static com.opengamma.strata.basics.index.OvernightIndices.GBP_SONIA;
import static com.opengamma.strata.basics.index.OvernightIndices.USD_FED_FUND;
import static com.opengamma.strata.basics.schedule.Frequency.P12M;
import static com.opengamma.strata.basics.schedule.Frequency.P3M;
import static com.opengamma.strata.product.swap.OvernightAccrualMethod.AVERAGED;
import static com.opengamma.strata.product.swap.OvernightAccrualMethod.COMPOUNDED;
import com.opengamma.strata.basics.date.DayCount;
import com.opengamma.strata.basics.date.DaysAdjustment;
import com.opengamma.strata.basics.date.HolidayCalendarId;
import com.opengamma.strata.basics.index.IborIndex;
import com.opengamma.strata.basics.index.OvernightIndex;
import com.opengamma.strata.basics.schedule.Frequency;
import com.opengamma.strata.basics.schedule.StubConvention;
import com.opengamma.strata.product.swap.OvernightAccrualMethod;
/**
* Market standard Fixed-Overnight swap conventions.
* <p>
* http://www.opengamma.com/sites/default/files/interest-rate-instruments-and-market-conventions.pdf
*/
final class StandardOvernightIborSwapConventions {
/**
* USD Fed Fund AA v LIBOR 3M swap .
* <p>
* Both legs use day count 'Act/360'.
* The spot date offset is 2 days and the cut-off period is 2 days.
*/
public static final OvernightIborSwapConvention USD_FED_FUND_AA_LIBOR_3M =
makeConvention("USD-FED-FUND-AA-LIBOR-3M", USD_FED_FUND, USD_LIBOR_3M, ACT_360, P3M, 0, 2, AVERAGED, 2);
/**
* GBP Sonia compounded 1Y v LIBOR 3M .
* <p>
* Both legs use day count 'Act/365F'.
* The spot date offset is 0 days and payment offset is 0 days.
*/
public static final OvernightIborSwapConvention GBP_SONIA_OIS_1Y_LIBOR_3M =
makeConvention("GBP-SONIA-OIS-1Y-LIBOR-3M", GBP_SONIA, GBP_LIBOR_3M, ACT_365F, P12M, 0, 0, COMPOUNDED, 0);
//-------------------------------------------------------------------------
// build conventions
private static OvernightIborSwapConvention makeConvention(
String name,
OvernightIndex onIndex,
IborIndex iborIndex,
DayCount dayCount,
Frequency frequency,
int paymentLag,
int cutOffDays,
OvernightAccrualMethod accrual,
int spotLag) {
HolidayCalendarId calendarOn = onIndex.getFixingCalendar();
DaysAdjustment paymentDateOffset = DaysAdjustment.ofBusinessDays(paymentLag, calendarOn);
DaysAdjustment spotDateOffset = DaysAdjustment.ofBusinessDays(spotLag, calendarOn);
return ImmutableOvernightIborSwapConvention.of(
name,
OvernightRateSwapLegConvention.builder()
.index(onIndex)
.accrualMethod(accrual)
.accrualFrequency(frequency)
.paymentFrequency(frequency)
.paymentDateOffset(paymentDateOffset)
.stubConvention(StubConvention.SHORT_INITIAL)
.rateCutOffDays(cutOffDays)
.build(),
IborRateSwapLegConvention.of(iborIndex),
spotDateOffset);
}
//-------------------------------------------------------------------------
/**
* Restricted constructor.
*/
private StandardOvernightIborSwapConventions() {
}
}