/**
* 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.derivative.FuturesTransaction;
import com.opengamma.analytics.financial.interestrate.sensitivity.PresentValueBlackBondFuturesCubeSensitivity;
import com.opengamma.analytics.financial.provider.calculator.singlevalue.FuturesPVBlackBondFuturesSensitivityFromPriceBlackSensitivityCalculator;
import com.opengamma.analytics.financial.provider.calculator.singlevalue.FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator;
import com.opengamma.analytics.financial.provider.description.interestrate.BlackBondFuturesProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity;
import com.opengamma.util.money.MultipleCurrencyAmount;
/**
* Generic futures transaction pricing method.
*/
public class FuturesTransactionBlackBondFuturesMethod extends FuturesTransactionMethod {
/** The calculator used to compute the present value curve sensitivity from the price curve sensitivity **/
private static final FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator PVCSIC =
FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator.getInstance();
/** The calculator used to compute the present value Black sensitivity from the price Black sensitivity **/
private static final FuturesPVBlackBondFuturesSensitivityFromPriceBlackSensitivityCalculator PVBSIC =
FuturesPVBlackBondFuturesSensitivityFromPriceBlackSensitivityCalculator.getInstance();
/**
* Default constructor.
*/
public FuturesTransactionBlackBondFuturesMethod() {
super(new FuturesSecurityBlackBondFuturesMethod());
}
/**
* Constructor from futures method.
* @param methodFutures The method to compute price and price curve sensitivity of futures.
*/
public FuturesTransactionBlackBondFuturesMethod(FuturesSecurityIssuerMethod methodFutures) {
super(new FuturesSecurityBlackBondFuturesMethod(methodFutures));
}
/**
* Gets the securityMethod.
* @return the securityMethod
*/
@Override
public FuturesSecurityBlackBondFuturesMethod getSecurityMethod() {
return (FuturesSecurityBlackBondFuturesMethod) super.getSecurityMethod();
}
/**
* Compute the present value of a future transaction from a curve provider.
* @param futures The futures.
* @param multicurve The multicurve and parameters provider.
* @return The present value.
*/
public MultipleCurrencyAmount presentValue(final FuturesTransaction<?> futures, final BlackBondFuturesProviderInterface multicurve) {
double price = getSecurityMethod().price(futures.getUnderlyingSecurity(), multicurve);
return presentValueFromPrice(futures, price);
}
/**
* Compute the present value curve sensitivity to rates of a future transaction.
* @param futures The futures.
* @param multicurve The multicurve and parameters provider.
* @return The present value rate sensitivity.
*/
public MultipleCurrencyMulticurveSensitivity presentValueCurveSensitivity(final FuturesTransaction<?> futures, final BlackBondFuturesProviderInterface multicurve) {
final MulticurveSensitivity priceSensitivity = getSecurityMethod().priceCurveSensitivity(futures.getUnderlyingSecurity(), multicurve);
return futures.accept(PVCSIC, priceSensitivity);
}
/**
* Compute the present value Black sensitivity of a future transaction.
* @param futures The futures.
* @param multicurve The multicurve and parameters provider.
* @return The present value Black parameters sensitivity.
*/
public PresentValueBlackBondFuturesCubeSensitivity presentValueBlackSensitivity(final FuturesTransaction<?> futures, final BlackBondFuturesProviderInterface multicurve) {
final PresentValueBlackBondFuturesCubeSensitivity priceSensitivity = getSecurityMethod().priceBlackSensitivity(futures.getUnderlyingSecurity(), multicurve);
return futures.accept(PVBSIC, priceSensitivity);
}
}