/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import org.threeten.bp.Period;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.analytics.financial.instrument.bond.BondFixedSecurityDefinition;
import com.opengamma.analytics.financial.instrument.index.IborIndex;
import com.opengamma.analytics.financial.interestrate.annuity.derivative.AnnuityCouponFixed;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondFixedSecurity;
import com.opengamma.analytics.financial.interestrate.cash.derivative.Cash;
import com.opengamma.analytics.financial.interestrate.fra.derivative.ForwardRateAgreement;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureSecurity;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureTransaction;
import com.opengamma.financial.convention.businessday.BusinessDayConvention;
import com.opengamma.financial.convention.businessday.BusinessDayConventions;
import com.opengamma.financial.convention.calendar.Calendar;
import com.opengamma.financial.convention.calendar.MondayToFridayCalendar;
import com.opengamma.financial.convention.daycount.DayCount;
import com.opengamma.financial.convention.daycount.DayCounts;
import com.opengamma.financial.convention.yield.SimpleYieldConvention;
import com.opengamma.financial.convention.yield.YieldConvention;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.DateUtils;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class RateReplacingVisitorTest {
private static final double R1 = 0.05;
private static final double R2 = 0.04;
private static final RateReplacingVisitor VISITOR = RateReplacingVisitor.getInstance();
private static final Currency CUR = Currency.EUR;
@Test
public void testBondFixedSecurity() {
final ZonedDateTime maturityDate = DateUtils.getUTCDate(2020, 1, 1);
final ZonedDateTime firstAccrualDate = DateUtils.getUTCDate(2010, 1, 1);
final Period paymentPeriod = Period.ofMonths(6);
final Calendar calendar = new MondayToFridayCalendar("A");
final DayCount dayCount = DayCounts.ACT_360;
final BusinessDayConvention businessDay = BusinessDayConventions.FOLLOWING;
final YieldConvention yieldConvention = SimpleYieldConvention.TRUE;
final ZonedDateTime date = DateUtils.getUTCDate(2011, 1, 1);
final BondFixedSecurity b1 = BondFixedSecurityDefinition.from(CUR, maturityDate, firstAccrualDate, paymentPeriod, R1, 0, calendar, dayCount, businessDay, yieldConvention, false, "I")
.toDerivative(date);
final BondFixedSecurity b2 = BondFixedSecurityDefinition.from(CUR, maturityDate, firstAccrualDate, paymentPeriod, R2, 0, calendar, dayCount, businessDay, yieldConvention, false, "I")
.toDerivative(date);
assertEquals(b2, VISITOR.visitBondFixedSecurity(b1, R2));
}
@Test
public void testCash() {
final Cash c1 = new Cash(CUR, 0, 1, 1, R1, 1);
final Cash c2 = new Cash(CUR, 0, 1, 1, R2, 1);
assertEquals(c1.accept(VISITOR, R2), c2);
}
@Test
public void testFixedCouponAnnuity() {
final AnnuityCouponFixed c1 = new AnnuityCouponFixed(CUR, new double[] {1, 2 }, R1, true);
final AnnuityCouponFixed c2 = new AnnuityCouponFixed(CUR, new double[] {1, 2 }, R2, true);
assertEquals(c1.accept(VISITOR, R2), c2);
}
@Test
public void testFRA() {
final IborIndex index = new IborIndex(CUR, Period.ofMonths(1), 2, DayCounts.ACT_365,
BusinessDayConventions.FOLLOWING, true, "Ibor");
final ForwardRateAgreement fra1 = new ForwardRateAgreement(CUR, 0.5, 0.5, 1, index, 0.5, 0.5, 1, 0.5, R1);
final ForwardRateAgreement fra2 = new ForwardRateAgreement(CUR, 0.5, 0.5, 1, index, 0.5, 0.5, 1, 0.5, R2);
assertEquals(fra1.accept(VISITOR, R2), fra2);
}
@Test
public void testIRFuture() {
final IborIndex iborIndex = new IborIndex(CUR, Period.ofMonths(3), 2, DayCounts.ACT_365,
BusinessDayConventions.FOLLOWING, true, "Ibor");
final double lastTradingTime = 1.473;
final double fixingPeriodStartTime = 1.467;
final double fixingPeriodEndTime = 1.75;
final double fixingPeriodAccrualFactor = 0.267;
final double paymentAccrualFactor = 0.25;
final int quantity = 123;
final InterestRateFutureSecurity sec = new InterestRateFutureSecurity(lastTradingTime, iborIndex, fixingPeriodStartTime, fixingPeriodEndTime, fixingPeriodAccrualFactor, 1.0, paymentAccrualFactor,
"K");
final InterestRateFutureTransaction ir1 = new InterestRateFutureTransaction(sec, 1 - R1, quantity);
final InterestRateFutureTransaction ir2 = new InterestRateFutureTransaction(sec, 1 - R2, quantity);
assertEquals(ir1.accept(VISITOR, R2), ir2);
}
}