/**
* 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.sabrswaption;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter;
import com.opengamma.analytics.financial.interestrate.swaption.derivative.SwaptionCashFixedIbor;
import com.opengamma.analytics.financial.interestrate.swaption.derivative.SwaptionPhysicalFixedIbor;
import com.opengamma.analytics.financial.interestrate.swaption.provider.SwaptionCashFixedIborSABRMethod;
import com.opengamma.analytics.financial.interestrate.swaption.provider.SwaptionPhysicalFixedIborSABRMethod;
import com.opengamma.analytics.financial.provider.description.interestrate.SABRSwaptionProviderInterface;
/**
* Interpolates, for interest rate instruments using SABR model, and returns the implied volatility required.
*/
public final class ImpliedVolatilitySABRSwaptionCalculator extends InstrumentDerivativeVisitorAdapter<SABRSwaptionProviderInterface, Double> {
/**
* The method unique instance.
*/
private static final ImpliedVolatilitySABRSwaptionCalculator INSTANCE = new ImpliedVolatilitySABRSwaptionCalculator();
/**
* Return the unique instance of the class.
* @return The instance.
*/
public static ImpliedVolatilitySABRSwaptionCalculator getInstance() {
return INSTANCE;
}
/** Private Constructor */
private ImpliedVolatilitySABRSwaptionCalculator() {
}
// The Pricing Methods
/** The implied volatility calculator for physically-settled swaptions */
private static final SwaptionPhysicalFixedIborSABRMethod METHOD_SWAPTION_PHYSICAL = SwaptionPhysicalFixedIborSABRMethod.getInstance();
/** The implied volatility calculator for cash-settled swaptions */
private static final SwaptionCashFixedIborSABRMethod METHOD_SWAPTION_CASH = SwaptionCashFixedIborSABRMethod.getInstance();
@Override
public Double visitSwaptionPhysicalFixedIbor(final SwaptionPhysicalFixedIbor swaption, final SABRSwaptionProviderInterface curves) {
return METHOD_SWAPTION_PHYSICAL.impliedVolatility(swaption, curves);
}
@Override
public Double visitSwaptionCashFixedIbor(final SwaptionCashFixedIbor swaption, final SABRSwaptionProviderInterface curves) {
return METHOD_SWAPTION_CASH.impliedVolatility(swaption, curves);
}
}