/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.equity.variance;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import com.opengamma.analytics.financial.equity.variance.pricing.RealizedVariance;
import com.opengamma.analytics.financial.varianceswap.VarianceSwap;
import com.opengamma.analytics.math.FunctionUtils;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class RealizedVarianceTest {
// -------------------------------- SETUP ------------------------------------------
final RealizedVariance realVariance = new RealizedVariance();
// The derivative
private static final double varStrike = 0.05;
private static final double varNotional = 3150;
private static final double expiry = 5;
private static final int nObsExpected = 750;
private static final int noMktDisruptions = 0;
private static final double annualizationFactor = 252;
double[] noObs = {};
double[] defaultWeights = {};
final VarianceSwap swapNull = new VarianceSwap(0, expiry, expiry, varStrike, varNotional, Currency.EUR, annualizationFactor, nObsExpected, noMktDisruptions, noObs, defaultWeights);
double[] oneObs = {100.0 };
final VarianceSwap swapOneObs = new VarianceSwap(0, expiry, expiry, varStrike, varNotional, Currency.EUR, annualizationFactor, nObsExpected, noMktDisruptions, oneObs, defaultWeights);
double[] twoObs = {100.0, 150.0 };
final VarianceSwap swapTwoObs = new VarianceSwap(0, expiry, expiry, varStrike, varNotional, Currency.EUR, annualizationFactor, 2, noMktDisruptions, twoObs, defaultWeights);
double[] threeObs = {100.0, 150.0, 100.0 };
final VarianceSwap swapThreeObs = new VarianceSwap(0, expiry, expiry, varStrike, varNotional, Currency.EUR, annualizationFactor, 3, noMktDisruptions, threeObs, defaultWeights);
double[] obsWithZero = {100.0, 150.0, 0.0 };
final VarianceSwap swapWithZeroObs = new VarianceSwap(0, expiry, expiry, varStrike, varNotional, Currency.EUR, annualizationFactor, 3, noMktDisruptions, obsWithZero, defaultWeights);
// -------------------------------- TESTS ------------------------------------------
@Test
public void testNullObs() {
assertEquals(realVariance.evaluate(swapNull), 0.0, 1e-9);
}
@Test
public void testOneObs() {
assertEquals(realVariance.evaluate(swapOneObs), 0.0, 1e-9);
}
@Test
public void testTwoObs() {
assertEquals(realVariance.evaluate(swapTwoObs), annualizationFactor * FunctionUtils.square(Math.log(1.5)), 1e-9);
}
@Test
public void testThreeObs() {
assertEquals(realVariance.evaluate(swapThreeObs), annualizationFactor * FunctionUtils.square(Math.log(1.5)), 1e-9);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testZeroInTimeSeries() {
realVariance.evaluate(swapWithZeroObs);
}
}