/* * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.security.irs; import java.util.HashSet; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.opengamma.analytics.financial.instrument.annuity.CompoundingMethod; import com.opengamma.analytics.financial.instrument.annuity.DateRelativeTo; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.financial.convention.FixedInterestRateSwapLegConvention; import com.opengamma.financial.convention.FloatingInterestRateSwapLegConvention; import com.opengamma.financial.convention.businessday.BusinessDayConvention; import com.opengamma.financial.convention.businessday.BusinessDayConventions; import com.opengamma.financial.convention.daycount.DayCounts; import com.opengamma.financial.convention.frequency.SimpleFrequency; import com.opengamma.financial.convention.rolldate.RollConvention; import com.opengamma.financial.security.swap.FloatingRateType; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.util.money.Currency; import com.opengamma.util.test.AbstractFudgeBuilderTestCase; import com.opengamma.util.test.TestGroup; /** * Test for IRS fudge encoding & decoding. */ @Test(groups = TestGroup.UNIT) public class InterestRateSwapSecurityFudgeTest extends AbstractFudgeBuilderTestCase { private static HashSet<ExternalId> GBLO = Sets.newHashSet(ExternalSchemes.isdaHoliday("GBLO")); private static HashSet<ExternalId> USNYGBLO = Sets.newHashSet(ExternalSchemes.isdaHoliday("USNY,GBLO")); private static FixedInterestRateSwapLegConvention USD_FIXED_3M_EOM_CONVENTION; private static FixedInterestRateSwapLeg USD_FIX_LEG; private static FloatingInterestRateSwapLegConvention USD_LIBOR_3M_EOM_CONVENTION; private static FloatingInterestRateSwapLeg USD_FLOAT_LEG; private static final BusinessDayConvention MF = BusinessDayConventions.MODIFIED_FOLLOWING; static { USD_FIXED_3M_EOM_CONVENTION = new FixedInterestRateSwapLegConvention("Test1", ExternalIdBundle.of("Scheme", "TEST FIXED")); USD_FIXED_3M_EOM_CONVENTION.setDayCountConvention(DayCounts.ACT_360); USD_FIXED_3M_EOM_CONVENTION.setCalculationCalendars(USNYGBLO); USD_FIXED_3M_EOM_CONVENTION.setMaturityCalendars(USNYGBLO); USD_FIXED_3M_EOM_CONVENTION.setPaymentCalendars(USNYGBLO); USD_FIXED_3M_EOM_CONVENTION.setPaymentFrequency(SimpleFrequency.QUARTERLY); USD_FIXED_3M_EOM_CONVENTION.setPaymentRelativeTo(DateRelativeTo.END); USD_FIXED_3M_EOM_CONVENTION.setSettlementDays(2); USD_FIXED_3M_EOM_CONVENTION.setPaymentDayConvention(MF); USD_FIXED_3M_EOM_CONVENTION.setCalculationBusinessDayConvention(MF); USD_FIXED_3M_EOM_CONVENTION.setCalculationFrequency(SimpleFrequency.QUARTERLY); USD_FIXED_3M_EOM_CONVENTION.setMaturityBusinessDayConvention(MF); USD_FIXED_3M_EOM_CONVENTION.setRollConvention(RollConvention.EOM); USD_FIXED_3M_EOM_CONVENTION.setCompoundingMethod(CompoundingMethod.NONE); USD_LIBOR_3M_EOM_CONVENTION = new FloatingInterestRateSwapLegConvention("Test2", ExternalIdBundle.of("Scheme", "USD_LIBOR_3M FIXED")); USD_LIBOR_3M_EOM_CONVENTION.setDayCountConvention(DayCounts.ACT_360); USD_LIBOR_3M_EOM_CONVENTION.setCalculationCalendars(USNYGBLO); USD_LIBOR_3M_EOM_CONVENTION.setMaturityCalendars(USNYGBLO); USD_LIBOR_3M_EOM_CONVENTION.setPaymentCalendars(USNYGBLO); USD_LIBOR_3M_EOM_CONVENTION.setPaymentFrequency(SimpleFrequency.QUARTERLY); USD_LIBOR_3M_EOM_CONVENTION.setPaymentRelativeTo(DateRelativeTo.END); USD_LIBOR_3M_EOM_CONVENTION.setSettlementDays(2); USD_LIBOR_3M_EOM_CONVENTION.setPaymentDayConvention(MF); USD_LIBOR_3M_EOM_CONVENTION.setCalculationBusinessDayConvention(MF); USD_LIBOR_3M_EOM_CONVENTION.setCalculationFrequency(SimpleFrequency.QUARTERLY); USD_LIBOR_3M_EOM_CONVENTION.setMaturityBusinessDayConvention(MF); USD_LIBOR_3M_EOM_CONVENTION.setFixingCalendars(GBLO); USD_LIBOR_3M_EOM_CONVENTION.setFixingBusinessDayConvention(BusinessDayConventions.NONE); USD_LIBOR_3M_EOM_CONVENTION.setResetFrequency(SimpleFrequency.QUARTERLY); USD_LIBOR_3M_EOM_CONVENTION.setResetCalendars(USNYGBLO); USD_LIBOR_3M_EOM_CONVENTION.setResetBusinessDayConvention(MF); USD_LIBOR_3M_EOM_CONVENTION.setResetRelativeTo(DateRelativeTo.START); USD_LIBOR_3M_EOM_CONVENTION.setRollConvention(RollConvention.EOM); USD_LIBOR_3M_EOM_CONVENTION.setRateType(FloatingRateType.IBOR); USD_LIBOR_3M_EOM_CONVENTION.setCompoundingMethod(CompoundingMethod.NONE); USD_FIX_LEG = USD_FIXED_3M_EOM_CONVENTION.toLeg(InterestRateSwapNotional.of(Currency.USD, Lists.newArrayList(LocalDate.MIN, LocalDate.MAX), Lists.newArrayList(1e6, 1e5)), PayReceiveType.PAY, new Rate(0.01234)); USD_FLOAT_LEG = USD_LIBOR_3M_EOM_CONVENTION.toLeg(new InterestRateSwapNotional(Currency.USD, 1e6), PayReceiveType.RECEIVE); } @Test public void testSwapSecurity() { final InterestRateSwapSecurity security = new InterestRateSwapSecurity(ExternalIdBundle.EMPTY, "a swap", LocalDate.now(), LocalDate.now(), Sets.newHashSet(USD_FIX_LEG, USD_FLOAT_LEG)); assertEncodeDecodeCycle(InterestRateSwapSecurity.class, security); } }