/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.irfutureoption;
import java.util.Collections;
import java.util.Set;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivative;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureOptionMarginTransaction;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureOptionPremiumTransaction;
import com.opengamma.analytics.financial.interestrate.future.method.InterestRateFutureOptionMarginTransactionBlackSurfaceMethod;
import com.opengamma.analytics.financial.interestrate.future.method.InterestRateFutureOptionPremiumTransactionBlackSurfaceMethod;
import com.opengamma.analytics.financial.model.option.definition.YieldCurveWithBlackCubeBundle;
import com.opengamma.engine.value.ComputedValue;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.value.ValueSpecification;
/**
* Calculates the value theta ({@link ValueRequirementNames#VALUE_THETA}) of an interest rate future option.
* The underlying Futures price is computed from the futures curve.
* @deprecated The parent is deprecated
*/
@Deprecated
public class InterestRateFutureOptionBlackValueThetaFunction extends InterestRateFutureOptionBlackFunction {
/** Calculates theta */
private static final InterestRateFutureOptionMarginTransactionBlackSurfaceMethod MARGINED_TRANSACTION_METHOD = InterestRateFutureOptionMarginTransactionBlackSurfaceMethod.getInstance();
/** Calculates theta */
private static final InterestRateFutureOptionPremiumTransactionBlackSurfaceMethod PREMIUM_TRANSACTION_METHOD = InterestRateFutureOptionPremiumTransactionBlackSurfaceMethod.getInstance();
/**
* Sets the value requirement name to {@link ValueRequirementNames#VALUE_THETA}
*/
public InterestRateFutureOptionBlackValueThetaFunction() {
super(ValueRequirementNames.VALUE_THETA, true);
}
@Override
protected Set<ComputedValue> getResult(final InstrumentDerivative derivative, final YieldCurveWithBlackCubeBundle data, final ValueSpecification spec, final Set<ValueRequirement> desiredValues) {
// Get scaling and adjust properties to reflect
final double theta;
if (derivative instanceof InterestRateFutureOptionMarginTransaction) {
final InterestRateFutureOptionMarginTransaction transaction = (InterestRateFutureOptionMarginTransaction) derivative;
theta = MARGINED_TRANSACTION_METHOD.theta(transaction, data);
} else if (derivative instanceof InterestRateFutureOptionPremiumTransaction) {
final InterestRateFutureOptionPremiumTransaction transaction = (InterestRateFutureOptionPremiumTransaction) derivative;
theta = PREMIUM_TRANSACTION_METHOD.theta(transaction, data);
} else {
throw new OpenGammaRuntimeException("Could not handle derivatives of type " + derivative.getClass());
}
final Double valueTheta = theta / 365.25;
return Collections.singleton(new ComputedValue(spec, valueTheta));
}
}