/** * 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; /** * Calculator for bond future option's theta. */ public final class ThetaBlackBondFuturesCalculator extends InstrumentDerivativeVisitorAdapter<BlackBondFuturesProviderInterface, Double> { /** * The singleton. */ private static final ThetaBlackBondFuturesCalculator INSTANCE = new ThetaBlackBondFuturesCalculator(); /** * Returns a singleton of the calculator. * @return the calculator. */ public static ThetaBlackBondFuturesCalculator getInstance() { return INSTANCE; } /** * Singleton constructor. */ private ThetaBlackBondFuturesCalculator() { } /** * Pricing method for theta. */ 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) { return METHOD_FUTURE_OPTION_MARGIN.theta(option, data); } @Override public Double visitBondFuturesOptionMarginTransaction(BondFuturesOptionMarginTransaction option, BlackBondFuturesProviderInterface data) { return METHOD_FUTURE_OPTION_MARGIN.theta(option.getUnderlyingSecurity(), data); } @Override public Double visitBondFutureOptionPremiumSecurity(BondFuturesOptionPremiumSecurity option, BlackBondFuturesProviderInterface data) { return METHOD_FUTURE_OPTION_PREMIUM.theta(option, data); } @Override public Double visitBondFutureOptionPremiumTransaction(BondFuturesOptionPremiumTransaction option, BlackBondFuturesProviderInterface data) { return METHOD_FUTURE_OPTION_PREMIUM.theta(option.getUnderlyingOption(), data); } }