/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.volatility.discrete; import com.opengamma.analytics.financial.model.interestrate.curve.ForwardCurve; import com.opengamma.analytics.financial.model.volatility.smile.function.SABRFormulaData; import com.opengamma.analytics.financial.model.volatility.smile.function.SABRHaganVolatilityFunction; import com.opengamma.analytics.financial.model.volatility.smile.function.VolatilityFunctionProvider; import com.opengamma.analytics.math.function.DoublesVectorFunctionProvider; import com.opengamma.analytics.math.function.ParameterizedCurve; import com.opengamma.analytics.math.function.VectorFunction; /** * This is a concrete implementation of a ParameterizedSmileModelDiscreteVolatilityFunctionProvider where the * 'smile' model is Hagan's SABR formula */ public class ParameterizedSABRModelDiscreteVolatilityFunctionProvider extends ParameterizedSmileModelDiscreteVolatilityFunctionProvider<SABRFormulaData> { private static final int NUM_MODEL_PARMS = 4; private static final VolatilityFunctionProvider<SABRFormulaData> SABR = new SABRHaganVolatilityFunction(); /** * Set up a {@link DiscreteVolatilityFunctionProvider} backed by a SABR model * @param fwdCurve The forward curve * @param smileModelParameterProviders each of these providers represents a different smile parameter - <b>there * must be one for each smile model parameter</b>. Given a (common) set of expiries, each one provides a * {@link VectorFunction} that gives the corresponding smile model parameter at each expiry for a set of model * parameters. This gives a lot of flexibility as to how the (smile model) parameter term structures are represented. */ public ParameterizedSABRModelDiscreteVolatilityFunctionProvider(final ForwardCurve fwdCurve, final DoublesVectorFunctionProvider[] smileModelParameterProviders) { super(SABR, fwdCurve, smileModelParameterProviders); } /** * Set up the {@link DiscreteVolatilityFunctionProvider} backed by a SABR model * @param fwdCurve The forward curve * @param smileParameterTS each of these represents a different smile parameter term structure- <b>there * must be one for each smile model parameter</b>. */ public ParameterizedSABRModelDiscreteVolatilityFunctionProvider(final ForwardCurve fwdCurve, final ParameterizedCurve[] smileParameterTS) { super(SABR, fwdCurve, smileParameterTS); } @Override public int getNumSmileModelParameters() { return NUM_MODEL_PARMS; } @Override protected SABRFormulaData toSmileModelData(final double[] modelParameters) { //args are checked by SABRFormulaData return new SABRFormulaData(modelParameters); } }