/**
* 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.provider;
import com.opengamma.analytics.financial.interestrate.future.calculator.FuturesPriceBlackBondFuturesCalculator;
import com.opengamma.analytics.financial.interestrate.future.calculator.FuturesPriceBlackSensitivityBlackBondFuturesCalculator;
import com.opengamma.analytics.financial.interestrate.future.calculator.FuturesPriceCurveSensitivityBlackBondFuturesCalculator;
import com.opengamma.analytics.financial.interestrate.future.derivative.FuturesSecurity;
import com.opengamma.analytics.financial.interestrate.sensitivity.PresentValueBlackBondFuturesCubeSensitivity;
import com.opengamma.analytics.financial.provider.description.interestrate.BlackBondFuturesProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity;
/**
* Interface to generic futures security pricing method for multi-curve, issuer and Black on bond futures parameter provider.
*/
public class FuturesSecurityBlackBondFuturesMethod extends FuturesSecurityMethod {
/** The futures price Black sensitivity sensitivity calculator **/
private final FuturesPriceBlackBondFuturesCalculator _futuresPriceCalculator;
private final FuturesPriceCurveSensitivityBlackBondFuturesCalculator _futuresPriceCurveSensitivityCalculator;
private final FuturesPriceBlackSensitivityBlackBondFuturesCalculator _futuresPriceBlackSensitivityCalculator;
/**
* Default constructor.
*/
public FuturesSecurityBlackBondFuturesMethod() {
_futuresPriceCalculator = FuturesPriceBlackBondFuturesCalculator.getInstance();
_futuresPriceCurveSensitivityCalculator = FuturesPriceCurveSensitivityBlackBondFuturesCalculator.getInstance();
_futuresPriceBlackSensitivityCalculator = FuturesPriceBlackSensitivityBlackBondFuturesCalculator.getInstance();
}
/**
* Constructor with a specific bond future pricing method. The method is used for price, price curve sensitivity and
* price Black parameters sensitivity.
* @param methodFutures The bond futures method.
*/
public FuturesSecurityBlackBondFuturesMethod(FuturesSecurityIssuerMethod methodFutures) {
_futuresPriceCalculator = new FuturesPriceBlackBondFuturesCalculator(methodFutures);
_futuresPriceCurveSensitivityCalculator = new FuturesPriceCurveSensitivityBlackBondFuturesCalculator(methodFutures);
_futuresPriceBlackSensitivityCalculator = new FuturesPriceBlackSensitivityBlackBondFuturesCalculator(methodFutures);
}
/**
* Computes the quoted price of a futures from a multicurve provider.
* @param futures The futures security.
* @param multicurve The multicurve provider.
* @return The price.
*/
public double price(final FuturesSecurity futures, final BlackBondFuturesProviderInterface multicurve) {
return futures.accept(_futuresPriceCalculator, multicurve);
}
/**
* Computes the quoted price curve sensitivity of a futures from a multicurve provider.
* @param futures The futures security.
* @param multicurve The multicurve provider.
* @return The price curve sensitivity.
*/
public MulticurveSensitivity priceCurveSensitivity(final FuturesSecurity futures,
final BlackBondFuturesProviderInterface multicurve) {
return futures.accept(_futuresPriceCurveSensitivityCalculator, multicurve);
}
/**
* Computes the price sensitivity to the Black implied volatility (point sensitivity) from the curve and volatility provider.
* @param futures The futures security.
* @param multicurve The multicurve provider.
* @return The price Black sensitivity.
*/
public PresentValueBlackBondFuturesCubeSensitivity priceBlackSensitivity(final FuturesSecurity futures,
final BlackBondFuturesProviderInterface multicurve) {
return futures.accept(_futuresPriceBlackSensitivityCalculator, multicurve);
}
}