/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.future.calculator;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter;
import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesOptionMarginSecurity;
import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesOptionMarginTransaction;
import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesOptionPremiumSecurity;
import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesOptionPremiumTransaction;
import com.opengamma.analytics.financial.interestrate.future.provider.BondFutureOptionMarginSecurityBlackPriceMethod;
import com.opengamma.analytics.financial.interestrate.future.provider.BondFuturesOptionPremiumSecurityBlackBondFuturesMethod;
import com.opengamma.analytics.financial.provider.description.interestrate.BlackBondFuturesProviderInterface;
import com.opengamma.util.ArgumentChecker;
/**
* Computes the delta for bond future options.
*/
public final class DeltaBlackBondFuturesCalculator extends InstrumentDerivativeVisitorAdapter<BlackBondFuturesProviderInterface, Double> {
/**
* The singleton.
*/
private static final DeltaBlackBondFuturesCalculator INSTANCE = new DeltaBlackBondFuturesCalculator();
/**
* Returns the calculator instance.
* @return the calculator.
*/
public static DeltaBlackBondFuturesCalculator getInstance() {
return INSTANCE;
}
/**
* Singleton constructor.
*/
private DeltaBlackBondFuturesCalculator() {
}
/** The method used to compute the future option price */
private static final BondFutureOptionMarginSecurityBlackPriceMethod METHOD_FUTURE_OPTION_MARGIN =
BondFutureOptionMarginSecurityBlackPriceMethod.getInstance();
private static final BondFuturesOptionPremiumSecurityBlackBondFuturesMethod METHOD_FUTURE_OPTION_PREMIUM =
BondFuturesOptionPremiumSecurityBlackBondFuturesMethod.getInstance();
@Override
public Double visitBondFuturesOptionMarginSecurity(BondFuturesOptionMarginSecurity option,
BlackBondFuturesProviderInterface data) {
ArgumentChecker.notNull(option, "security");
ArgumentChecker.notNull(data, "data");
return METHOD_FUTURE_OPTION_MARGIN.delta(option, data);
}
@Override
public Double visitBondFuturesOptionMarginTransaction(BondFuturesOptionMarginTransaction option,
BlackBondFuturesProviderInterface data) {
ArgumentChecker.notNull(option, "security");
ArgumentChecker.notNull(data, "data");
return METHOD_FUTURE_OPTION_MARGIN.delta(option.getUnderlyingSecurity(), data);
}
@Override
public Double visitBondFutureOptionPremiumSecurity(BondFuturesOptionPremiumSecurity option,
BlackBondFuturesProviderInterface data) {
ArgumentChecker.notNull(option, "security");
ArgumentChecker.notNull(data, "data");
return METHOD_FUTURE_OPTION_PREMIUM.delta(option, data);
}
@Override
public Double visitBondFutureOptionPremiumTransaction(BondFuturesOptionPremiumTransaction option,
BlackBondFuturesProviderInterface data) {
ArgumentChecker.notNull(option, "security");
ArgumentChecker.notNull(data, "data");
return METHOD_FUTURE_OPTION_PREMIUM.delta(option.getUnderlyingOption(), data);
}
}