/** * 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.PresentValueBlackSTIRFuturesCubeSensitivity; import com.opengamma.analytics.financial.provider.calculator.singlevalue.FuturesPVBlackSTIRFuturesSensitivityFromPriceBlackSensitivityCalculator; import com.opengamma.analytics.financial.provider.calculator.singlevalue.FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator; import com.opengamma.analytics.financial.provider.description.interestrate.BlackSTIRFuturesProviderInterface; 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 FuturesTransactionBlackSTIRFuturesMethod 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 FuturesPVBlackSTIRFuturesSensitivityFromPriceBlackSensitivityCalculator PVBSIC = FuturesPVBlackSTIRFuturesSensitivityFromPriceBlackSensitivityCalculator.getInstance(); /** * Default constructor. */ public FuturesTransactionBlackSTIRFuturesMethod() { super(new FuturesSecurityBlackSTIRFuturesMethod()); } /** * Gets the securityMethod. * @return the securityMethod */ @Override public FuturesSecurityBlackSTIRFuturesMethod getSecurityMethod() { return (FuturesSecurityBlackSTIRFuturesMethod) 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 BlackSTIRFuturesProviderInterface 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 BlackSTIRFuturesProviderInterface 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 PresentValueBlackSTIRFuturesCubeSensitivity presentValueBlackSensitivity(final FuturesTransaction<?> futures, final BlackSTIRFuturesProviderInterface multicurve) { final PresentValueBlackSTIRFuturesCubeSensitivity priceSensitivity = getSecurityMethod().priceBlackSensitivity(futures.getUnderlyingSecurity(), multicurve); return futures.accept(PVBSIC, priceSensitivity); } }