/**
* 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.FuturesPriceADHullWhiteIssuerCalculator;
import com.opengamma.analytics.financial.interestrate.future.calculator.FuturesPriceCurveSensitivityHullWhiteIssuerCalculator;
import com.opengamma.analytics.financial.interestrate.future.calculator.FuturesPriceHullWhiteIssuerCalculator;
import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesSecurity;
import com.opengamma.analytics.financial.interestrate.future.derivative.FuturesSecurity;
import com.opengamma.analytics.financial.provider.description.interestrate.HullWhiteIssuerProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity;
import com.opengamma.util.tuple.Pair;
/**
* Interface to generic futures security pricing method for multi-curve, issuer and Hull-White one factor parameter provider.
*/
public class FuturesSecurityHullWhiteIssuerMethod extends FuturesSecurityMethod {
/** The futures price calculator **/
private static final FuturesPriceHullWhiteIssuerCalculator FPHWIC = FuturesPriceHullWhiteIssuerCalculator.getInstance();
/** The futures price curve sensitivity calculator **/
private static final FuturesPriceCurveSensitivityHullWhiteIssuerCalculator FPCSHWIC = FuturesPriceCurveSensitivityHullWhiteIssuerCalculator.getInstance();
/** The futures price and price curve sensitivity (simultaneous) calculator **/
private static final FuturesPriceADHullWhiteIssuerCalculator FPADHWIC = FuturesPriceADHullWhiteIssuerCalculator.getInstance();
/**
* 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 HullWhiteIssuerProviderInterface multicurve) {
return futures.accept(FPHWIC, 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 HullWhiteIssuerProviderInterface multicurve) {
return futures.accept(FPCSHWIC, multicurve);
}
/**
* Computes the future price and the price curve sensitivity simultaneously (Algorithmic differentiation).
* @param futures The future security.
* @param multicurve The multicurve provider.
* @return The price and price curve sensitivity as a pair.
*/
public Pair<Double, MulticurveSensitivity> priceAD(final BondFuturesSecurity futures, final HullWhiteIssuerProviderInterface multicurve) {
return futures.accept(FPADHWIC, multicurve);
}
}