Package com.opengamma.analytics.financial.interestrate.future.method

Source Code of com.opengamma.analytics.financial.interestrate.future.method.InterestRateFutureDiscountingMethodTest

/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.future.method;

import static org.testng.AssertJUnit.assertEquals;

import org.testng.annotations.Test;
import org.threeten.bp.ZonedDateTime;

import com.opengamma.analytics.financial.instrument.index.IborIndex;
import com.opengamma.analytics.financial.instrument.index.IndexIborMaster;
import com.opengamma.analytics.financial.interestrate.InterestRateCurveSensitivity;
import com.opengamma.analytics.financial.interestrate.ParRateCalculator;
import com.opengamma.analytics.financial.interestrate.ParRateCurveSensitivityCalculator;
import com.opengamma.analytics.financial.interestrate.ParSpreadMarketQuoteCalculator;
import com.opengamma.analytics.financial.interestrate.ParSpreadRateCalculator;
import com.opengamma.analytics.financial.interestrate.PresentValueCalculator;
import com.opengamma.analytics.financial.interestrate.PresentValueCurveSensitivityCalculator;
import com.opengamma.analytics.financial.interestrate.TestsDataSetsSABR;
import com.opengamma.analytics.financial.interestrate.YieldCurveBundle;
import com.opengamma.analytics.financial.interestrate.future.calculator.PriceFromCurvesDiscountingCalculator;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureSecurity;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureTransaction;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.analytics.financial.schedule.ScheduleCalculator;
import com.opengamma.analytics.financial.util.AssertSensivityObjects;
import com.opengamma.analytics.util.time.TimeCalculator;
import com.opengamma.financial.convention.calendar.Calendar;
import com.opengamma.financial.convention.calendar.MondayToFridayCalendar;
import com.opengamma.util.money.CurrencyAmount;
import com.opengamma.util.time.DateUtils;

/**
* Tests for the methods related to interest rate securities pricing without convexity adjustment.
* @deprecated This class tests deprecated functionality
*/
@Deprecated
public class InterestRateFutureDiscountingMethodTest {
  // EURIBOR 3M Index
  private static final Calendar TARGET = new MondayToFridayCalendar("TARGET");
  private static final IborIndex EURIBOR3M = IndexIborMaster.getInstance().getIndex("EURIBOR3M");
  // Future
  private static final ZonedDateTime SPOT_LAST_TRADING_DATE = DateUtils.getUTCDate(2012, 9, 19);
  private static final ZonedDateTime LAST_TRADING_DATE = ScheduleCalculator.getAdjustedDate(SPOT_LAST_TRADING_DATE, -EURIBOR3M.getSpotLag(), TARGET);
  private static final ZonedDateTime FIXING_END_DATE = ScheduleCalculator.getAdjustedDate(SPOT_LAST_TRADING_DATE, EURIBOR3M, TARGET);
  private static final double NOTIONAL = 1000000.0; // 1m
  private static final double FUTURE_FACTOR = 0.25;
  private static final double REFERENCE_PRICE = 0.99;
  private static final String NAME = "ERU2";
  private static final int QUANTITY = 123;
  private static final ZonedDateTime REFERENCE_DATE = DateUtils.getUTCDate(2011, 5, 12);
  private static final double LAST_TRADING_TIME = TimeCalculator.getTimeBetween(REFERENCE_DATE, LAST_TRADING_DATE);
  private static final double FIXING_START_TIME = TimeCalculator.getTimeBetween(REFERENCE_DATE, SPOT_LAST_TRADING_DATE);
  private static final double FIXING_END_TIME = TimeCalculator.getTimeBetween(REFERENCE_DATE, FIXING_END_DATE);
  private static final double FIXING_ACCRUAL = EURIBOR3M.getDayCount().getDayCountFraction(SPOT_LAST_TRADING_DATE, FIXING_END_DATE);
  private static final String DISCOUNTING_CURVE_NAME = "Funding";
  private static final String FORWARD_CURVE_NAME = "Forward";
  private static final InterestRateFutureSecurity ERU2_SEC = new InterestRateFutureSecurity(LAST_TRADING_TIME, EURIBOR3M, FIXING_START_TIME, FIXING_END_TIME, FIXING_ACCRUAL, NOTIONAL,
      FUTURE_FACTOR, NAME, DISCOUNTING_CURVE_NAME, FORWARD_CURVE_NAME);
  private static final InterestRateFutureTransaction ERU2_TRA = new InterestRateFutureTransaction(ERU2_SEC, REFERENCE_PRICE, QUANTITY);

  private static final InterestRateFutureSecurityDiscountingMethod METHOD_FUT_SEC = InterestRateFutureSecurityDiscountingMethod.getInstance();
  private static final InterestRateFutureTransactionDiscountingMethod METHOD_FUT_TRA = InterestRateFutureTransactionDiscountingMethod.getInstance();

  private static final PriceFromCurvesDiscountingCalculator PRICE_CALCULATOR = PriceFromCurvesDiscountingCalculator.getInstance();
  private static final ParRateCurveSensitivityCalculator PRCSC = ParRateCurveSensitivityCalculator.getInstance();
  private static final PresentValueCalculator PVC = PresentValueCalculator.getInstance();
  private static final PresentValueCurveSensitivityCalculator PVCSC = PresentValueCurveSensitivityCalculator.getInstance();
  private static final ParSpreadMarketQuoteCalculator PSMQC = ParSpreadMarketQuoteCalculator.getInstance();
  private static final ParSpreadRateCalculator PSRC = ParSpreadRateCalculator.getInstance();

  private static final YieldCurveBundle CURVES = TestsDataSetsSABR.createCurves1();

  private static final double TOLERANCE_PV = 1.0E-2;
  private static final double TOLERANCE_PV_DELTA = 1.0E+2;
  private static final double TOLERANCE_PRICE = 1.0E-10;
  private static final double TOLERANCE_PRICE_DELTA = 1.0E-8;

  @Test
  /**
   * Test the price computed from the curves
   */
  public void price() {
    final double price = METHOD_FUT_SEC.price(ERU2_SEC, CURVES);
    final YieldAndDiscountCurve forwardCurve = CURVES.getCurve(FORWARD_CURVE_NAME);
    final double forward = (forwardCurve.getDiscountFactor(FIXING_START_TIME) / forwardCurve.getDiscountFactor(FIXING_END_TIME) - 1) / FIXING_ACCRUAL;
    final double expectedPrice = 1.0 - forward;
    assertEquals("Future price from curves", expectedPrice, price, TOLERANCE_PRICE);
  }

  @Test
  /**
   * Tests the method versus the calculator for the price.
   */
  public void priceMethodVsCalculator() {
    final double priceMethod = METHOD_FUT_SEC.price(ERU2_SEC, CURVES);
    final double priceCalculator = ERU2_SEC.accept(PRICE_CALCULATOR, CURVES);
    assertEquals("Bond future security Discounting: Method vs calculator", priceMethod, priceCalculator, TOLERANCE_PRICE);
  }

  @Test
  /**
   * Test the present value computed from the curves
   */
  public void presentValue() {
    final double price = METHOD_FUT_SEC.price(ERU2_SEC, CURVES);
    final double pvExpected = (price - ERU2_TRA.getReferencePrice()) * NOTIONAL * FUTURE_FACTOR * QUANTITY;
    final CurrencyAmount pvComputed = METHOD_FUT_TRA.presentValue(ERU2_TRA, CURVES);
    assertEquals("InterestRateFutureXXXDiscountingMethod: present value", pvComputed.getAmount(), pvExpected, TOLERANCE_PV);
  }

  @Test
  public void presentValueMethodVsCalculator() {
    final CurrencyAmount pvMethod = METHOD_FUT_TRA.presentValue(ERU2_TRA, CURVES);
    final double pvCalculator = ERU2_TRA.accept(PVC, CURVES);
    assertEquals("InterestRateFutureXXXDiscountingMethod: present value", pvMethod.getAmount(), pvCalculator, TOLERANCE_PV);
  }

  @Test
  public void presentValueCurveSensitivityMethodVsCalculator() {
    final InterestRateCurveSensitivity pvcsMethod = METHOD_FUT_TRA.presentValueCurveSensitivity(ERU2_TRA, CURVES);
    final InterestRateCurveSensitivity pvcsCalculator = new InterestRateCurveSensitivity(ERU2_TRA.accept(PVCSC, CURVES));
    AssertSensivityObjects.assertEquals("InterestRateFutureXXXDiscountingMethod: present value", pvcsMethod, pvcsCalculator, TOLERANCE_PV_DELTA);
  }

  @Test
  /**
   * Test the rate computed from the curves
   */
  public void parRate() {
    final double rate = METHOD_FUT_SEC.parRate(ERU2_SEC, CURVES);
    final YieldAndDiscountCurve forwardCurve = CURVES.getCurve(FORWARD_CURVE_NAME);
    final double expectedRate = (forwardCurve.getDiscountFactor(FIXING_START_TIME) / forwardCurve.getDiscountFactor(FIXING_END_TIME) - 1) / FIXING_ACCRUAL;
    assertEquals("Future price from curves", expectedRate, rate, TOLERANCE_PRICE);
  }

  @Test
  /**
   * Test the rate computed from the method and from the calculator.
   */
  public void parRateMethodVsCalculator() {
    final double rateMethod = METHOD_FUT_SEC.parRate(ERU2_SEC, CURVES);
    final ParRateCalculator calculator = ParRateCalculator.getInstance();
    final double rateCalculator = ERU2_SEC.accept(calculator, CURVES);
    assertEquals("Future price from curves", rateMethod, rateCalculator, TOLERANCE_PRICE);
  }

  @Test
  /**
   * Test the rate computed from the curves
   */
  public void parRateCurveSensitivityMethodVsCalculator() {
    final InterestRateCurveSensitivity prSensiMethod = METHOD_FUT_SEC.parRateCurveSensitivity(ERU2_SEC, CURVES);
    final InterestRateCurveSensitivity prSensiCalculator = new InterestRateCurveSensitivity(ERU2_SEC.accept(PRCSC, CURVES));
    AssertSensivityObjects.assertEquals("", prSensiMethod, prSensiCalculator, TOLERANCE_PV_DELTA);
    final InterestRateCurveSensitivity prSensiCalculator2 = new InterestRateCurveSensitivity(ERU2_TRA.accept(PRCSC, CURVES));
    AssertSensivityObjects.assertEquals("", prSensiMethod, prSensiCalculator2, TOLERANCE_PRICE_DELTA);
  }

  @Test
  /**
   * Test the par spread for market quote.
   */
  public void parSpreadMarketQuote() {
    final double parSpread = ERU2_TRA.accept(PSMQC, CURVES);
    final InterestRateFutureTransaction futures0 = new InterestRateFutureTransaction(LAST_TRADING_TIME, EURIBOR3M, FIXING_START_TIME, FIXING_END_TIME, FIXING_ACCRUAL,
        REFERENCE_PRICE + parSpread, NOTIONAL, FUTURE_FACTOR, QUANTITY, NAME, DISCOUNTING_CURVE_NAME, FORWARD_CURVE_NAME);
    final CurrencyAmount pv0 = METHOD_FUT_TRA.presentValue(futures0, CURVES);
    assertEquals("Future par spread market quote", pv0.getAmount(), 0, TOLERANCE_PV);
  }

  @Test
  /**
   * Test the par spread for rate.
   */
  public void parSpreadRate() {
    final double parSpread = ERU2_TRA.accept(PSRC, CURVES);
    final InterestRateFutureTransaction futures0 = new InterestRateFutureTransaction(LAST_TRADING_TIME, EURIBOR3M, FIXING_START_TIME, FIXING_END_TIME, FIXING_ACCRUAL,
        REFERENCE_PRICE - parSpread, NOTIONAL, FUTURE_FACTOR, QUANTITY, NAME, DISCOUNTING_CURVE_NAME, FORWARD_CURVE_NAME);
    final CurrencyAmount pv0 = METHOD_FUT_TRA.presentValue(futures0, CURVES);
    assertEquals("Future par spread rate", pv0.getAmount(), 0, TOLERANCE_PV);
    final double parSpreadMQ = ERU2_TRA.accept(PSMQC, CURVES);
    assertEquals("InterestRateFutureXXXDiscountingMethod: par spread", parSpread, -parSpreadMQ, TOLERANCE_PRICE);
  }

}
TOP

Related Classes of com.opengamma.analytics.financial.interestrate.future.method.InterestRateFutureDiscountingMethodTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.