/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.instrument;
import java.util.ArrayList;
import java.util.List;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.Period;
import org.threeten.bp.ZoneId;
import org.threeten.bp.ZoneOffset;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.analytics.financial.forex.definition.ForexDefinition;
import com.opengamma.analytics.financial.forex.definition.ForexNonDeliverableForwardDefinition;
import com.opengamma.analytics.financial.instrument.cash.CashDefinition;
import com.opengamma.analytics.financial.instrument.cash.DepositIborDefinition;
import com.opengamma.analytics.financial.instrument.fra.ForwardRateAgreementDefinition;
import com.opengamma.analytics.financial.instrument.index.GeneratorSwapFixedIbor;
import com.opengamma.analytics.financial.instrument.index.GeneratorSwapIborIbor;
import com.opengamma.analytics.financial.instrument.index.IborIndex;
import com.opengamma.analytics.financial.instrument.payment.CouponFixedDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborGearingDefinition;
import com.opengamma.analytics.financial.instrument.payment.CouponIborSpreadDefinition;
import com.opengamma.analytics.financial.instrument.payment.PaymentFixedDefinition;
import com.opengamma.analytics.financial.instrument.swap.SwapFixedIborDefinition;
import com.opengamma.analytics.financial.instrument.swap.SwapFixedIborSpreadDefinition;
import com.opengamma.analytics.financial.instrument.swap.SwapIborIborDefinition;
import com.opengamma.analytics.financial.schedule.NoHolidayCalendar;
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.daycount.AbstractDayCount;
import com.opengamma.financial.convention.daycount.DayCount;
import com.opengamma.timeseries.DoubleTimeSeries;
import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.DateUtils;
/**
*
*/
public class InstrumentTestHelper {
public static final Calendar NO_HOLIDAY = new NoHolidayCalendar();
public static final DayCount SEMI_ANNUAL_DAY_COUNT = new SemiAnnualDayCount();
public static final DayCount QUARTERLY_DAY_COUNT = new QuarterlyDayCount();
public static final BusinessDayConvention NONE = BusinessDayConventions.NONE;
public static final Currency FIXED_INCOME_CURRENCY = Currency.EUR;
public static final IborIndex USD_IBOR_INDEX1 = new IborIndex(FIXED_INCOME_CURRENCY, Period.ofMonths(6), 0, SEMI_ANNUAL_DAY_COUNT, NONE, false,
"f");
public static final IborIndex USD_IBOR_INDEX2 = new IborIndex(FIXED_INCOME_CURRENCY, Period.ofMonths(3), 0, QUARTERLY_DAY_COUNT, NONE, false, "f");
public static final ZonedDateTime CASH_START = ZonedDateTime.of(LocalDateTime.of(2012, 6, 1, 11, 0, 0, 0), ZoneOffset.UTC);
public static final ZonedDateTime CASH_MATURITY = ZonedDateTime.of(LocalDateTime.of(2012, 12, 1, 11, 0, 0, 0), ZoneOffset.UTC);
public static final double CASH_NOTIONAL = 234000;
public static final double CASH_RATE = 0.002;
public static final ZonedDateTime PAYMENT_MATURITY = zdt(2011, 1, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final double PAYMENT_AMOUNT = 34500;
public static final ZonedDateTime FIXED_COUPON_START = zdt(2011, 1, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final ZonedDateTime FIXED_COUPON_MATURITY = zdt(2011, 2, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final double FIXED_COUPON_NOTIONAL = 45600;
public static final double FIXED_COUPON_RATE = 0.0001;
public static final double IBOR_COUPON_SPREAD = 0.00023;
public static final ZonedDateTime FRA_START = zdt(2011, 6, 3, 11, 0, 0, 0, ZoneOffset.UTC);
public static final ZonedDateTime FRA_END = zdt(2011, 12, 3, 11, 0, 0, 0, ZoneOffset.UTC);
public static final double FRA_NOTIONAL = 567000;
public static final double FRA_RATE = 0.004;
public static final ZonedDateTime SWAP_START = zdt(2001, 1, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final ZonedDateTime SWAP_MATURITY = zdt(2031, 1, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final GeneratorSwapFixedIbor SWAP_GENERATOR = new GeneratorSwapFixedIbor("a", Period.ofMonths(6), SEMI_ANNUAL_DAY_COUNT, USD_IBOR_INDEX1, NO_HOLIDAY);
public static final double SWAP_NOTIONAL = 789000;
public static final double SWAP_FIXED_RATE = 0.04;
public static final double IBOR_SPREAD = 0.01;
public static final Currency FX_PAY_CURRENCY = Currency.GBP;
public static final Currency FX_RECEIVE_CURRENCY = Currency.EUR;
public static final ZonedDateTime FX_MATURITY = DateUtils.getUTCDate(2013, 1, 1);
public static final double FX_PAY_AMOUNT = -12345;
public static final double FX_RECEIVE_AMOUNT = 23456;
public static final GeneratorSwapIborIbor IBOR_IBOR_GENERATOR = new GeneratorSwapIborIbor("s", USD_IBOR_INDEX1, USD_IBOR_INDEX2, NO_HOLIDAY, NO_HOLIDAY);
public static final ZonedDateTime DEPOSIT_START = zdt(2012, 1, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final double DEPOSIT_NOTIONAL = -12300;
public static final double DEPOSIT_RATE = 0.002;
public static final ZonedDateTime IBOR_COUPON_FIXING_DATE = zdt(2011, 1, 1, 11, 0, 0, 0, ZoneOffset.UTC);
public static final double IBOR_COUPON_NOTIONAL = -45600;
public static final double GEARING = 3.;
public static final CashDefinition PAY_CASH = new CashDefinition(FIXED_INCOME_CURRENCY, CASH_START, CASH_MATURITY, -CASH_NOTIONAL, CASH_RATE, 0.5);
public static final CashDefinition RECEIVE_CASH = new CashDefinition(FIXED_INCOME_CURRENCY, CASH_START, CASH_MATURITY, CASH_NOTIONAL, CASH_RATE, 0.5);
public static final CouponFixedDefinition PAY_FIXED_COUPON = CouponFixedDefinition.from(FIXED_INCOME_CURRENCY, FIXED_COUPON_MATURITY, FIXED_COUPON_START,
FIXED_COUPON_MATURITY, 1. / 12, -FIXED_COUPON_NOTIONAL, FIXED_COUPON_RATE);
public static final CouponFixedDefinition RECEIVE_FIXED_COUPON = CouponFixedDefinition.from(FIXED_INCOME_CURRENCY, FIXED_COUPON_MATURITY, FIXED_COUPON_START,
FIXED_COUPON_MATURITY, 1. / 12, FIXED_COUPON_NOTIONAL, FIXED_COUPON_RATE);
public static final CouponIborDefinition PAY_IBOR_COUPON = CouponIborDefinition.from(-FIXED_COUPON_NOTIONAL, FIXED_COUPON_MATURITY, USD_IBOR_INDEX1, NO_HOLIDAY);
public static final CouponIborDefinition RECEIVE_IBOR_COUPON = CouponIborDefinition.from(FIXED_COUPON_NOTIONAL, FIXED_COUPON_MATURITY, USD_IBOR_INDEX1, NO_HOLIDAY);
public static final CouponIborGearingDefinition PAY_IBOR_GEARING_COUPON = CouponIborGearingDefinition.from(PAY_IBOR_COUPON, IBOR_COUPON_SPREAD, GEARING);
public static final CouponIborGearingDefinition RECEIVE_IBOR_GEARING_COUPON = CouponIborGearingDefinition.from(RECEIVE_IBOR_COUPON, IBOR_COUPON_SPREAD, GEARING);
public static final CouponIborSpreadDefinition PAY_IBOR_SPREAD_COUPON = CouponIborSpreadDefinition.from(PAY_IBOR_COUPON, IBOR_COUPON_SPREAD);
public static final CouponIborSpreadDefinition RECEIVE_IBOR_SPREAD_COUPON = CouponIborSpreadDefinition.from(RECEIVE_IBOR_COUPON, IBOR_COUPON_SPREAD);
public static final DepositIborDefinition PAY_IBOR_DEPOSIT = DepositIborDefinition.fromStart(DEPOSIT_START, DEPOSIT_NOTIONAL, DEPOSIT_RATE, USD_IBOR_INDEX1, NO_HOLIDAY);
public static final DepositIborDefinition RECEIVE_IBOR_DEPOSIT = DepositIborDefinition.fromStart(DEPOSIT_START, -DEPOSIT_NOTIONAL, DEPOSIT_RATE, USD_IBOR_INDEX1, NO_HOLIDAY);
public static final ForexDefinition FX_PAY_GBP = ForexDefinition.fromAmounts(FX_PAY_CURRENCY, FX_RECEIVE_CURRENCY, FX_MATURITY, FX_PAY_AMOUNT, FX_RECEIVE_AMOUNT);
public static final ForexDefinition FX_PAY_EUR = ForexDefinition.fromAmounts(FX_PAY_CURRENCY, FX_RECEIVE_CURRENCY, FX_MATURITY, -FX_PAY_AMOUNT, -FX_RECEIVE_AMOUNT);
public static final ForexNonDeliverableForwardDefinition LONG_NDF = new ForexNonDeliverableForwardDefinition(FX_PAY_CURRENCY, FX_RECEIVE_CURRENCY, -FX_PAY_AMOUNT,
-FX_RECEIVE_AMOUNT / FX_PAY_AMOUNT, FX_MATURITY, FX_MATURITY);
public static final ForexNonDeliverableForwardDefinition SHORT_NDF = new ForexNonDeliverableForwardDefinition(FX_PAY_CURRENCY, FX_RECEIVE_CURRENCY, FX_PAY_AMOUNT,
-FX_RECEIVE_AMOUNT / FX_PAY_AMOUNT, FX_MATURITY, FX_MATURITY);
public static final ForwardRateAgreementDefinition PAYER_FRA = ForwardRateAgreementDefinition.from(FRA_START, FRA_END, FRA_NOTIONAL, USD_IBOR_INDEX1, FRA_RATE, NO_HOLIDAY);
public static final ForwardRateAgreementDefinition RECEIVER_FRA = ForwardRateAgreementDefinition.from(FRA_START, FRA_END, -FRA_NOTIONAL, USD_IBOR_INDEX1, FRA_RATE, NO_HOLIDAY);
public static final PaymentFixedDefinition PAY_FIXED_PAYMENT = new PaymentFixedDefinition(FIXED_INCOME_CURRENCY, PAYMENT_MATURITY, -PAYMENT_AMOUNT);
public static final PaymentFixedDefinition RECEIVE_FIXED_PAYMENT = new PaymentFixedDefinition(FIXED_INCOME_CURRENCY, PAYMENT_MATURITY, PAYMENT_AMOUNT);
public static final SwapFixedIborDefinition PAYER_SWAP = SwapFixedIborDefinition.from(SWAP_START, SWAP_MATURITY, SWAP_GENERATOR, SWAP_NOTIONAL, SWAP_FIXED_RATE, true);
public static final SwapFixedIborDefinition RECEIVER_SWAP = SwapFixedIborDefinition.from(SWAP_START, SWAP_MATURITY, SWAP_GENERATOR, SWAP_NOTIONAL, SWAP_FIXED_RATE,
false);
public static final SwapFixedIborSpreadDefinition PAYER_SWAP_WITH_SPREAD = SwapFixedIborSpreadDefinition.from(SWAP_START, SWAP_MATURITY, SWAP_GENERATOR, SWAP_NOTIONAL,
SWAP_NOTIONAL, SWAP_FIXED_RATE, IBOR_SPREAD, true);
public static final SwapFixedIborSpreadDefinition RECEIVER_SWAP_WITH_SPREAD = SwapFixedIborSpreadDefinition.from(SWAP_START, SWAP_MATURITY, SWAP_GENERATOR,
SWAP_NOTIONAL, SWAP_NOTIONAL, SWAP_FIXED_RATE, IBOR_SPREAD, false);
public static final SwapIborIborDefinition PAY_SPREAD_IBOR_IBOR_SWAP = SwapIborIborDefinition.from(SWAP_START, Period.ofYears(50), IBOR_IBOR_GENERATOR,
SWAP_NOTIONAL, IBOR_SPREAD, true);
public static final SwapIborIborDefinition RECEIVE_SPREAD_IBOR_IBOR_SWAP = SwapIborIborDefinition.from(SWAP_START, Period.ofYears(50), IBOR_IBOR_GENERATOR,
SWAP_NOTIONAL, IBOR_SPREAD, false);
public static final DoubleTimeSeries<LocalDate> IBOR_FIXING_SERIES;
public static final double FIXING_RATE = 0.03;
public static final LocalDate TODAY = LocalDate.of(2012, 8, 1);
static {
final List<LocalDate> dates = new ArrayList<>();
final List<Double> fixings = new ArrayList<>();
LocalDate date = LocalDate.of(2000, 1, 1);
while (date.isBefore(TODAY)) {
dates.add(date);
fixings.add(FIXING_RATE);
date = date.plusDays(1);
}
IBOR_FIXING_SERIES = ImmutableLocalDateDoubleTimeSeries.of(dates, fixings);
}
public static final class SemiAnnualDayCount extends AbstractDayCount {
public SemiAnnualDayCount() {
}
@Override
public double getDayCountFraction(final LocalDate firstDate, final LocalDate secondDate) {
return 0.5;
}
@Override
public double getAccruedInterest(final LocalDate previousCouponDate, final LocalDate date, final LocalDate nextCouponDate, final double coupon,
final double paymentsPerYear) {
return 0;
}
@Override
public String getName() {
return null;
}
}
public static final class QuarterlyDayCount extends AbstractDayCount {
public QuarterlyDayCount() {
}
@Override
public double getDayCountFraction(final LocalDate firstDate, final LocalDate secondDate) {
return 0.25;
}
@Override
public double getAccruedInterest(final LocalDate previousCouponDate, final LocalDate date, final LocalDate nextCouponDate, final double coupon,
final double paymentsPerYear) {
return 0;
}
@Override
public String getName() {
return null;
}
}
//-------------------------------------------------------------------------
private static ZonedDateTime zdt(final int y, final int m, final int d, final int hr, final int min, final int sec, final int nanos, final ZoneId zone) {
return LocalDateTime.of(y, m, d, hr, min, sec, nanos).atZone(zone);
}
}