/** Tests related to the discounting method for bond security. */ public class BondSecurityFRDiscountingMethodTest { // Calculators private static final PresentValueCalculator PVC = PresentValueCalculator.getInstance(); private static final BondSecurityDiscountingMethod METHOD = BondSecurityDiscountingMethod.getInstance(); private static final double TOLERANCE_PRICE = 1.0E-8; private static final String REPO_TYPE = "General collateral"; private static final Currency EUR = Currency.EUR; private static final Calendar TARGET = new MondayToFridayCalendar("TARGET"); private static final DayCount DAY_COUNT_ACTACTICMA = DayCountFactory.INSTANCE.getDayCount("Actual/Actual ICMA"); private static final BusinessDayConvention BUSINESS_DAY_FOL = BusinessDayConventionFactory.INSTANCE.getBusinessDayConvention("Following"); private static final boolean IS_EOM_FIXED = false; // To derivatives private static final DayCount ACT_ACT = DayCountFactory.INSTANCE.getDayCount("Actual/Actual ISDA"); private static final String CREDIT_CURVE_NAME = "Credit"; private static final String REPO_CURVE_NAME = "Repo"; private static final String FORWARD_CURVE_NAME = "Forward"; private static final String[] CURVES_NAME = { CREDIT_CURVE_NAME, REPO_CURVE_NAME, FORWARD_CURVE_NAME }; private static final YieldCurveBundle CURVES = TestsDataSetsSABR.createCurvesBond1(); // FRTR 4 1/2 04/25/41 - ISIN: FR0010773192 private static final String ISSUER_FR = "FRANCE (GOVT OF)"; private static final YieldConvention YIELD_CONVENTION_FRANCE = SimpleYieldConvention.FRANCE_COMPOUND_METHOD; private static final int SETTLEMENT_DAYS_FR = 3; private static final Period PAYMENT_TENOR_FR = Period.ofMonths(12); // private static final int COUPON_PER_YEAR_FR = 1; private static final ZonedDateTime BOND_START_FR = DateUtils.getUTCDate(2009, 4, 25); private static final ZonedDateTime BOND_MATURITY_FR = DateUtils.getUTCDate(2041, 4, 25); private static final ZonedDateTime BOND_FIRSTCPN_FR = DateUtils.getUTCDate(2010, 4, 25); private static final double RATE_FR = 0.0450; private static final BondFixedSecurityDefinition BOND_FR_SECURITY_DEFINITION = BondFixedSecurityDefinition.from( EUR, BOND_START_FR, BOND_FIRSTCPN_FR, BOND_MATURITY_FR, PAYMENT_TENOR_FR, RATE_FR, SETTLEMENT_DAYS_FR, TARGET, DAY_COUNT_ACTACTICMA, BUSINESS_DAY_FOL, YIELD_CONVENTION_FRANCE, IS_EOM_FIXED, ISSUER_FR); }
static { for (int loopbasket = 0; loopbasket < NB_BOND; loopbasket++) { MATURITY_DATE[loopbasket] = START_ACCRUAL_DATE[loopbasket].plus(BOND_TENOR[loopbasket]); BASKET_DEFINITION[loopbasket] = BondFixedSecurityDefinition.from( CUR, MATURITY_DATE[loopbasket], START_ACCRUAL_DATE[loopbasket], PAYMENT_TENOR, RATE[loopbasket], SETTLEMENT_DAYS, CALENDAR, DAY_COUNT, BUSINESS_DAY, YIELD_CONVENTION, IS_EOM, ISSUER_NAME); } }
/** * Test related to the description of a bond total return swap with an underlying bond and a funding * leg. */ public class BondTotalReturnSwapTest { private static final ZonedDateTime EFFECTIVE_DATE_1 = DateUtils.getUTCDate(2012, 2, 9); private static final ZonedDateTime TERMINATION_DATE_1 = DateUtils.getUTCDate(2012, 5, 9); private static final ZonedDateTime REFERENCE_DATE_1 = DateUtils.getUTCDate(2012, 2, 2); // Before effective date. private static final double EFFECTIVE_TIME_1_1 = TimeCalculator.getTimeBetween(REFERENCE_DATE_1, EFFECTIVE_DATE_1); private static final double TERMINATION_TIME_1_1 = TimeCalculator.getTimeBetween(REFERENCE_DATE_1, TERMINATION_DATE_1); private static final double NOTIONAL_TRS = 123456000; // Bond (UKT) private static final double NOTIONAL_BND = 100000000; private static final BondFixedSecurityDefinition UKT14_DEFINITION = BondDataSetsGbp.bondUKT5_20140907(); private static final BondFixedSecurity UKT14_1_1 = UKT14_DEFINITION.toDerivative(REFERENCE_DATE_1, EFFECTIVE_DATE_1); // Funding: unique fixed coupon in GBP: receive TRS bond, pay funding private static final double RATE = 0.0043; private static final CouponFixedDefinition FUNDING_FIXED_CPN_REC_DEFINITION = new CouponFixedDefinition( UKT14_DEFINITION.getCurrency(), TERMINATION_DATE_1, EFFECTIVE_DATE_1, TERMINATION_DATE_1, 0.25, NOTIONAL_TRS, RATE); private static final AnnuityDefinition<? extends PaymentDefinition> FUNDING_LEG_FIXED_REC_DEFINITION = new AnnuityDefinition<>( new CouponFixedDefinition[] {FUNDING_FIXED_CPN_REC_DEFINITION}, UKT14_DEFINITION.getCalendar()); private static final Annuity<? extends Payment> FUNDING_LEG_FIXED_REC_1 = FUNDING_LEG_FIXED_REC_DEFINITION.toDerivative(REFERENCE_DATE_1); private static final BondTotalReturnSwap TRS_PAY_FIXED_REC_1 = new BondTotalReturnSwap( EFFECTIVE_TIME_1_1, TERMINATION_TIME_1_1, FUNDING_LEG_FIXED_REC_1, UKT14_1_1, -NOTIONAL_BND); @Test(expectedExceptions = IllegalArgumentException.class) public void nullFundingLeg() { new BondTotalReturnSwap( EFFECTIVE_TIME_1_1, TERMINATION_TIME_1_1, null, UKT14_1_1, -NOTIONAL_BND); } @Test(expectedExceptions = IllegalArgumentException.class) public void nullBond() { new BondTotalReturnSwap( EFFECTIVE_TIME_1_1, TERMINATION_TIME_1_1, FUNDING_LEG_FIXED_REC_1, null, -NOTIONAL_BND); } @Test public void getter() { assertEquals( "BondTotalReturnSwap: getter", EFFECTIVE_TIME_1_1, TRS_PAY_FIXED_REC_1.getEffectiveTime()); assertEquals( "BondTotalReturnSwap: getter", TERMINATION_TIME_1_1, TRS_PAY_FIXED_REC_1.getTerminationTime()); assertEquals( "BondTotalReturnSwap: getter", FUNDING_LEG_FIXED_REC_1, TRS_PAY_FIXED_REC_1.getFundingLeg()); assertEquals("BondTotalReturnSwap: getter", UKT14_1_1, TRS_PAY_FIXED_REC_1.getAsset()); assertEquals("BondTotalReturnSwap: getter", -NOTIONAL_BND, TRS_PAY_FIXED_REC_1.getQuantity()); } }