public final class SabrHaganNormalVolatilityFormula extends Object implements SabrVolatilityFormula
Only the "beta = 0" versions take strike/forward with negative values. The other formulas have a barrier at 0.
Reference: Hagan, P.; Kumar, D.; Lesniewski, A. & Woodward, D. "Managing smile risk", Wilmott Magazine, 2002, September, 84-108 Note: Formula references are related to the preprint version, e.g. available at https://www.researchgate.net/publication/235622441_Managing_Smile_Risk
| Modifier and Type | Field and Description |
|---|---|
static SabrHaganNormalVolatilityFormula |
DEFAULT
Default implementation.
|
| Modifier and Type | Method and Description |
|---|---|
ValueType |
getVolatilityType()
Gets the type of volatility returned by the
SabrVolatilityFormula.volatility(double, double, double, double, double, double, double) method. |
double |
volatility(double forward,
double strike,
double timeToExpiry,
double alpha,
double beta,
double rho,
double nu)
Calculates the volatility.
|
ValueDerivatives |
volatilityAdjoint(double forward,
double strike,
double timeToExpiry,
double alpha,
double beta,
double rho,
double nu)
Calculates volatility and the adjoint (volatility sensitivity to forward, strike and model parameters).
|
double |
volatilityBeta0(double forward,
double strike,
double timeToExpiry,
double alpha,
double rho,
double nu)
Calculates the normal implied volatility for the special case of beta=0.
|
ValueDerivatives |
volatilityBeta0Adjoint(double forward,
double strike,
double timeToExpiry,
double alpha,
double rho,
double nu)
Calculates the normal implied volatility and its derivatives (w.r.t.
|
double |
volatilityBetaNonZero(double forward,
double strike,
double timeToExpiry,
double alpha,
double beta,
double rho,
double nu)
Returns the volatility using the generic formula with barrier at 0.
|
ValueDerivatives |
volatilityBetaNonZeroAdjoint(double forward,
double strike,
double timeToExpiry,
double alpha,
double beta,
double rho,
double nu)
Returns the volatility using the generic formula with barrier at 0 at its derivatives.
|
protected double |
zetaOverXhat(double zeta,
double rho)
Computes the ratio zeta over xHat.
|
protected ValueDerivatives |
zetaOverXhatAdjoint(double zeta,
double rho)
Computes the ratio zeta over xHat and its derivatives.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waithaganpublic static final SabrHaganNormalVolatilityFormula DEFAULT
public ValueType getVolatilityType()
SabrVolatilityFormulaSabrVolatilityFormula.volatility(double, double, double, double, double, double, double) method.getVolatilityType in interface SabrVolatilityFormulapublic double volatility(double forward,
double strike,
double timeToExpiry,
double alpha,
double beta,
double rho,
double nu)
SabrVolatilityFormulavolatility in interface SabrVolatilityFormulaforward - the forward value of the underlyingstrike - the strike value of the optiontimeToExpiry - the time to expiry of the optionalpha - the SABR alpha valuebeta - the SABR beta valuerho - the SABR rho valuenu - the SABR nu valuepublic ValueDerivatives volatilityAdjoint(double forward, double strike, double timeToExpiry, double alpha, double beta, double rho, double nu)
SabrVolatilityFormulaBy default the derivatives are computed by central finite difference approximation. This should be overridden in each subclass.
volatilityAdjoint in interface SabrVolatilityFormulaforward - the forward value of the underlyingstrike - the strike value of the optiontimeToExpiry - the time to expiry of the optionalpha - the SABR alpha valuebeta - the SABR beta valuerho - the SABR rho valuenu - the SABR nu valuepublic double volatilityBetaNonZero(double forward,
double strike,
double timeToExpiry,
double alpha,
double beta,
double rho,
double nu)
forward - the forward value of the underlyingstrike - the strike value of the optiontimeToExpiry - the time to expiry of the optionalpha - the SABR alpha valuebeta - the SABR beta valuerho - the SABR rho valuenu - the SABR nu valuepublic ValueDerivatives volatilityBetaNonZeroAdjoint(double forward, double strike, double timeToExpiry, double alpha, double beta, double rho, double nu)
forward - the forward value of the underlyingstrike - the strike value of the optiontimeToExpiry - the time to expiry of the optionalpha - the SABR alpha valuebeta - the SABR beta valuerho - the SABR rho valuenu - the SABR nu valuepublic double volatilityBeta0(double forward,
double strike,
double timeToExpiry,
double alpha,
double rho,
double nu)
The case beta=0 removes the barrier for forward/strike at 0 and lead to significant simplification in the implementation.
Formula B.70a in the preprint version. Note that the preprint version has a typo (missing the zeta/xhat term).
forward - the forward value of the underlyingstrike - the strike value of the optiontimeToExpiry - the time to expiry of the optionalpha - the SABR alpha valuerho - the SABR rho valuenu - the SABR nu valuepublic ValueDerivatives volatilityBeta0Adjoint(double forward, double strike, double timeToExpiry, double alpha, double rho, double nu)
The case beta=0 removes the barrier for forward/strike at 0 and lead to significant simplification in the implementation.
forward - the forward value of the underlyingstrike - the strike value of the optiontimeToExpiry - the time to expiry of the optionalpha - the SABR alpha valuerho - the SABR rho valuenu - the SABR nu valueprotected double zetaOverXhat(double zeta,
double rho)
zeta - the zeta valuerho - the rho parameter valueprotected ValueDerivatives zetaOverXhatAdjoint(double zeta, double rho)
zeta - the zeta valuerho - the rho parameter valueCopyright 2009-Present by OpenGamma Inc. and individual contributors
Apache v2 licensed
Additional documentation can be found at strata.opengamma.io.