/** * 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.apache.commons.lang.Validate; import org.testng.annotations.Test; import org.threeten.bp.Period; import com.opengamma.analytics.financial.instrument.index.IborIndex; import com.opengamma.analytics.financial.interestrate.cash.derivative.Cash; import com.opengamma.analytics.financial.interestrate.fra.derivative.ForwardRateAgreement; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.model.interestrate.curve.YieldCurve; import com.opengamma.analytics.math.curve.FunctionalDoublesCurve; import com.opengamma.analytics.math.function.Function1D; import com.opengamma.financial.convention.businessday.BusinessDayConventions; import com.opengamma.financial.convention.daycount.DayCounts; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; /** * @deprecated This class tests deprecated functionality. */ @Deprecated @Test(groups = TestGroup.UNIT) public class GammaPV01CalculatorTest { private final static YieldAndDiscountCurve FUNDING_CURVE = YieldCurve.from(FunctionalDoublesCurve.from(new MyFunction(-0.04, 0.006, 0.1, 0.05))); private final static YieldAndDiscountCurve LIBOR_CURVE = YieldCurve.from(FunctionalDoublesCurve.from(new MyFunction(-0.04, 0.005, 0.11, 0.055))); private final static GammaPV01Calculator GAMMA_PV01 = GammaPV01Calculator.getInstance(); private final static PV01Calculator PV01 = PV01Calculator.getInstance(); private final static PresentValueCalculator PV = PresentValueCalculator.getInstance(); private final static double EPS = 1e-4; private static final String FUNDING_CURVE_NAME = "funding curve"; private static final String LIBOR_CURVE_NAME = "libor"; private static YieldCurveBundle CURVES; private static final Currency CUR = Currency.EUR; static { CURVES = new YieldCurveBundle(); CURVES.setCurve(FUNDING_CURVE_NAME, FUNDING_CURVE); CURVES.setCurve(LIBOR_CURVE_NAME, LIBOR_CURVE); } @Test public void testCash() { final double t = 7 / 365.0; final YieldAndDiscountCurve curve = CURVES.getCurve(FUNDING_CURVE_NAME); final double df = curve.getDiscountFactor(t); final double r = 1 / t * (1 / df - 1); final Cash cash = new Cash(CUR, 0, t, 1, r, t, FUNDING_CURVE_NAME); final Double gammaPV01 = cash.accept(GAMMA_PV01, CURVES); assertEquals(0., gammaPV01, EPS); //linear instrument } @Test public void testFRA() { final double paymentTime = 0.5; final double paymentYearFraction = 30. / 360; final double fixingTime = paymentTime - 2. / 365; final double fixingPeriodStart = paymentTime; final double fixingPeriodEnd = 7. / 12; final double fixingYearFraction = 31. / 365; final double rate = 0.15; final IborIndex index = new IborIndex(CUR, Period.ofMonths(1), 2, DayCounts.ACT_365, BusinessDayConventions.FOLLOWING, true); final ForwardRateAgreement fra = new ForwardRateAgreement(CUR, paymentTime, FUNDING_CURVE_NAME, paymentYearFraction, 1, index, fixingTime, fixingPeriodStart, fixingPeriodEnd, fixingYearFraction, rate, LIBOR_CURVE_NAME); final Double gammaPV01 = fra.accept(GAMMA_PV01, CURVES); assertEquals(0., gammaPV01, EPS); //linear instrument } private static class MyFunction extends Function1D<Double, Double> { private final double _a; private final double _b; private final double _c; private final double _d; public MyFunction(final double a, final double b, final double c, final double d) { Validate.isTrue(a + d > 0, "a+d>0"); Validate.isTrue(d > 0, "d>0"); Validate.isTrue(c > 0, "c>0"); _a = a; _b = b; _c = c; _d = d; } @Override public Double evaluate(final Double t) { return (_a + _b * t) * Math.exp(-_c * t) + _d; } } }