/** * 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.provider.calculator.singlevalue.FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator; import com.opengamma.analytics.financial.provider.description.interestrate.HullWhiteOneFactorProviderInterface; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity; import com.opengamma.util.money.MultipleCurrencyAmount; /** * Interface to generic futures security pricing method. */ public class FuturesTransactionHullWhiteMethod extends FuturesTransactionMethod { /** The calculator used to compute the present value curve sensitivity from the price curve sensitivity **/ private static final FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator PVCSIC = FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator.getInstance(); /** * Constructor. */ public FuturesTransactionHullWhiteMethod() { super(new FuturesSecurityHullWhiteMethod()); } /** * Gets the securityMethod. * @return the securityMethod */ @Override public FuturesSecurityHullWhiteMethod getSecurityMethod() { return (FuturesSecurityHullWhiteMethod) 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 HullWhiteOneFactorProviderInterface multicurve) { double price = getSecurityMethod().price(futures.getUnderlyingSecurity(), multicurve); return presentValueFromPrice(futures, price); } /** * Compute the present value curve sensitivity to rates of a future. * @param futures The futures. * @param multicurve The multicurve and parameters provider. * @return The present value rate sensitivity. */ public MultipleCurrencyMulticurveSensitivity presentValueCurveSensitivity(final FuturesTransaction<?> futures, final HullWhiteOneFactorProviderInterface multicurve) { final MulticurveSensitivity priceSensitivity = getSecurityMethod().priceCurveSensitivity(futures.getUnderlyingSecurity(), multicurve); return futures.accept(PVCSIC, priceSensitivity); } }