/** 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);
}
예제 #2
0
 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());
  }
}