/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.provider.calculator.discounting;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorDelegate;
import com.opengamma.analytics.financial.interestrate.future.derivative.FederalFundsFutureTransaction;
import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureTransaction;
import com.opengamma.analytics.financial.interestrate.future.provider.FederalFundsFutureSecurityDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.future.provider.InterestRateFutureSecurityDiscountingMethod;
import com.opengamma.analytics.financial.provider.description.interestrate.ParameterProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity;
/**
* Compute the spread to be added to the rate-like quote of the instrument for which the present value of the instrument is zero.
* The notion of "rate" will depend of each instrument. The "market quote" will be used for most instruments.
* The exceptions are: STIR futures, Fed Funds futres,
*/
public final class ParSpreadRateCurveSensitivityDiscountingCalculator
extends InstrumentDerivativeVisitorDelegate<ParameterProviderInterface, MulticurveSensitivity> {
/**
* The unique instance of the calculator.
*/
private static final ParSpreadRateCurveSensitivityDiscountingCalculator INSTANCE = new ParSpreadRateCurveSensitivityDiscountingCalculator();
/**
* Gets the calculator instance.
* @return The calculator.
*/
public static ParSpreadRateCurveSensitivityDiscountingCalculator getInstance() {
return INSTANCE;
}
/**
* Private constructor.
*/
private ParSpreadRateCurveSensitivityDiscountingCalculator() {
super(ParSpreadMarketQuoteCurveSensitivityDiscountingCalculator.getInstance());
}
/**
* The methods and calculators.
*/
private static final InterestRateFutureSecurityDiscountingMethod METHOD_STIR_FUT = InterestRateFutureSecurityDiscountingMethod.getInstance();
private static final FederalFundsFutureSecurityDiscountingMethod METHOD_FED_FUNDS = FederalFundsFutureSecurityDiscountingMethod.getInstance();
// ----- Futures -----
@Override
public MulticurveSensitivity visitInterestRateFutureTransaction(final InterestRateFutureTransaction futures, final ParameterProviderInterface multicurves) {
return METHOD_STIR_FUT.priceCurveSensitivity(futures.getUnderlyingSecurity(), multicurves).multipliedBy(-1);
}
@Override
public MulticurveSensitivity visitFederalFundsFutureTransaction(final FederalFundsFutureTransaction future, final ParameterProviderInterface multicurves) {
return METHOD_FED_FUNDS.priceCurveSensitivity(future.getUnderlyingSecurity(), multicurves).multipliedBy(-1);
}
}