Class Bachelier
java.lang.Object
com.quantfinlib.pricing.Bachelier
Bachelier (normal) model for options on a forward: the forward follows
dF = σ_N dW, so it can go negative and σ_N is quoted in absolute rate units
(0.0080 = 80 basis points a year). Rates desks quote swaptions and caps in
normal vol since negative rates made the lognormal model unusable
(Bachelier 1900; for the modern use see Andersen and Piterbarg 2010,
Interest Rate Modeling, vol. 1, section 7.1).
call = df · [(F − K) Φ(d) + σ_N √T φ(d)], d = (F − K) / (σ_N √T) put = df · [(K − F) Φ(−d) + σ_N √T φ(d)]
Forward and strike may be any finite numbers, including negative.
rate is the continuously compounded discount rate to the payment
date (pass 0 and multiply by an annuity for swaptions).
-
Method Summary
Modifier and TypeMethodDescriptionstatic doubledelta(BlackScholes.OptionType type, double forward, double strike, double rate, double normalVol, double timeYears) Sensitivity to the forward: df·Φ(d) for a call, −df·Φ(−d) for a put.static doubleimpliedVol(BlackScholes.OptionType type, double price, double forward, double strike, double rate, double timeYears) Implied normal vol from a discounted price.static doubleprice(BlackScholes.OptionType type, double forward, double strike, double rate, double normalVol, double timeYears) Discounted normal-model price.static doublevega(double forward, double strike, double rate, double normalVol, double timeYears) Vega per 1.00 of normal vol: df·√T·φ(d).
-
Method Details
-
price
public static double price(BlackScholes.OptionType type, double forward, double strike, double rate, double normalVol, double timeYears) Discounted normal-model price. -
delta
public static double delta(BlackScholes.OptionType type, double forward, double strike, double rate, double normalVol, double timeYears) Sensitivity to the forward: df·Φ(d) for a call, −df·Φ(−d) for a put. -
vega
public static double vega(double forward, double strike, double rate, double normalVol, double timeYears) Vega per 1.00 of normal vol: df·√T·φ(d). -
impliedVol
public static double impliedVol(BlackScholes.OptionType type, double price, double forward, double strike, double rate, double timeYears) Implied normal vol from a discounted price. NaN for a price below intrinsic or for invalid inputs, 0 at intrinsic.Out of the money the time value is v = σ√T·h(u) with u = |F − K|/(σ√T) and h(u) = φ(u) − u·Φ(−u), h'(u) = −Φ(−u) (Jäckel 2017, "Implied normal volatility", Wilmott). The solver runs a bracketed Newton iteration on ln(h(u)/u) = ln(v/|F − K|), which is smooth and monotone; at the money σ = v·√(2π/T) exactly.
-