Black-Scholes-Merton Model¶
-
class
Bsm
(sigma, intr=0.0, divr=0.0, is_fwd=False)[source] Black-Scholes-Merton (BSM) model for option pricing.
Underlying price is assumed to follow a geometric Brownian motion.
Examples
>>> import numpy as np >>> import pyfeng as pf >>> m = pf.Bsm(sigma=0.2, intr=0.05, divr=0.1) >>> m.price(np.arange(80, 121, 10), 100, 1.2) array([15.71361973, 9.69250803, 5.52948546, 2.94558338, 1.48139131]) >>> sigma = np.array([0.2, 0.3, 0.5])[:, None] >>> m = pf.Bsm(sigma, intr=0.05, divr=0.1) # sigma in axis=0 >>> m.price(np.array([90, 100, 110]), 100, 1.2, cp=np.array([-1,1,1])) array([[ 5.75927238, 5.52948546, 2.94558338], [ 9.4592961 , 9.3881245 , 6.45745004], [16.812035 , 17.10541288, 14.10354768]])
-
cdf
(strike, spot, texp, cp=1)[source] Cumulative distribution function of the final asset price.
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – -1 (default) for left-tail CDF, -1 for right-tail CDF (i.e., survival function)
- Returns
CDF value
-
d2_var
(strike, spot, texp, cp=1)[source] 2nd derivative w.r.t. variance (=sigma^2) Eq. (9) in Hull & White (1987)
- Parameters
strike – strike price
spot – spot (or forward)
texp – time to expiry
cp – 1/-1 for call/put option
Returns: d^2 price / d var^2
References
Hull J, White A (1987) The Pricing of Options on Assets with Stochastic Volatilities. The Journal of Finance 42:281–300. https://doi.org/10.1111/j.1540-6261.1987.tb02568.x
-
d3_var
(strike, spot, texp, cp=1)[source] 3rd derivative w.r.t. variance (=sigma^2) Eq. (9) in Hull & White (1987)
- Parameters
strike – strike price
spot – spot (or forward)
texp – time to expiry
cp – 1/-1 for call/put option
Returns: d^3 price / d var^3
References
Hull J, White A (1987) The Pricing of Options on Assets with Stochastic Volatilities. The Journal of Finance 42:281–300. https://doi.org/10.1111/j.1540-6261.1987.tb02568.x
-
delta
(strike, spot, texp, cp=1)[source] Option model delta (sensitivity to price).
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
- Returns
delta value
-
gamma
(strike, spot, texp, cp=1)[source] Option model gamma (2nd derivative to price).
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
- Returns
gamma value
-
impvol
(price, strike, spot, texp, cp=1, setval=False) BSM implied volatility with Newton’s method
- Parameters
price – option price
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
setval – if True, sigma is set with the solved implied volatility
- Returns
implied volatility
-
moments_vsk
(texp=1)[source] Variance, skewness, and ex-kurtosis. Assume mean=1.
- Parameters
texp – time-to-expiry
- Returns
(variance, skewness, and ex-kurtosis)
References
-
price_barrier
(strike, barrier, spot, texp, cp=1, io=- 1)[source] Barrier option price under the BSM model
- Parameters
strike – strike price
barrier – knock-in/out barrier price
spot – spot price
texp – time to expiry
cp – 1/-1 for call/put option
io – +1 for knock-in, -1 for knock-out
- Returns
Barrier option price
-
static
price_formula
(strike, spot, sigma, texp, cp=1, intr=0.0, divr=0.0, is_fwd=False)[source] Black-Scholes-Merton model call/put option pricing formula (static method)
- Parameters
strike – strike price
spot – spot (or forward)
sigma – model volatility
texp – time to expiry
cp – 1/-1 for call/put option
intr – interest rate (domestic interest rate)
divr – dividend/convenience yield (foreign interest rate)
is_fwd – if True, treat spot as forward price. False by default.
- Returns
Vanilla option price
-
theta
(strike, spot, texp, cp=1)[source] Option model theta (sensitivity to time-to-maturity).
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
- Returns
theta value
-
vega
(strike, spot, texp, cp=1)[source] Option model vega (sensitivity to volatility).
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
- Returns
vega value
-
vol_smile
(strike, spot, texp, cp=1, model='norm')[source] Equivalent volatility smile for a given model
- Parameters
strike – strike price
spot – spot price
texp – time to expiry
cp – 1/-1 for call/put option
model – {‘norm’ (default), ‘norm-approx’, ‘norm-grunspan’, ‘bsm’}
- Returns
volatility smile under the specified model
-
-
class
BsmDisp
(sigma, beta=1, pivot=0, *args, **kwargs)[source] Displaced Black-Scholes-Merton model for option pricing. Displace price,
D(F_t) = beta*F_t + (1-beta)*A
is assumed to follow a geometric Brownian motion with volatility beta*sigma.
Examples
>>> import numpy as np >>> import pyfeng as pf >>> m = pf.BsmDisp(sigma=0.2, beta=0.5, pivot=100, intr=0.05, divr=0.1) >>> m.price(np.arange(80, 121, 10), 100, 1.2) array([15.9543935 , 9.7886658 , 5.4274197 , 2.71430505, 1.22740381]) >>> beta = np.array([0.2, 0.6, 1])[:, None] >>> m = pf.BsmDisp(0.2, beta=beta, pivot=100) # beta in axis=0 >>> m.vol_smile(np.arange(80, 121, 10), 100, 1.2) array([[0.21915778, 0.20904587, 0.20038559, 0.19286293, 0.18625174], [0.20977955, 0.20461468, 0.20025691, 0.19652101, 0.19327567], [0.2 , 0.2 , 0.2 , 0.2 , 0.2 ]])
-
cdf
(strike, spot, texp, cp=1)[source] Cumulative distribution function of the final asset price.
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – -1 (default) for left-tail CDF, -1 for right-tail CDF (i.e., survival function)
- Returns
CDF value
-
delta
(strike, spot, texp, cp=1)[source] Option model delta (sensitivity to price) by finite difference
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
- Returns
delta value
-
disp_spot
(spot)[source] Displaced spot
- Parameters
spot – spot (or forward) price
- Returns
Displaces spot
-
disp_strike
(strike, texp)[source] Displaced strike
- Parameters
strike – strike price
texp – time to expiry
- Returns
Displace strike
-
gamma
(strike, spot, texp, cp=1)[source] Option model gamma (2nd derivative to price) by finite difference
- Parameters
strike – strike price
spot – spot price
texp – time to expiry
cp – 1/-1 for call/put
- Returns
Delta with numerical derivative
-
impvol
(price_in, strike, spot, texp, cp=1, setval=False)[source] Implied volatility using Brent’s method. Slow but robust implementation.
- Parameters
price – option price
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put
setval – if True, sigma is set with the solved implied volatility
- Returns
implied volatility
-
moments_vsk
(texp=1)[source] Variance, skewness, and ex-kurtosis. Assume mean=1.
- Parameters
texp – time-to-expiry
- Returns
(variance, skewness, and ex-kurtosis)
References
-
price
(strike, spot, texp, cp=1)[source] Call/put option price.
- Parameters
strike – strike price.
spot – spot (or forward) price.
texp – time to expiry.
cp – 1/-1 for call/put option.
- Returns
option price
-
price_barrier
(strike, barrier, spot, *args, **kwargs)[source] Barrier option price under the BSM model
- Parameters
strike – strike price
barrier – knock-in/out barrier price
spot – spot price
texp – time to expiry
cp – 1/-1 for call/put option
io – +1 for knock-in, -1 for knock-out
- Returns
Barrier option price
-
theta
(strike, spot, texp, cp=1)[source] Option model thegta (sensitivity to time-to-maturity) by finite difference
- Parameters
strike – strike price
spot – spot price
texp – time to expiry
cp – 1/-1 for call/put
- Returns
theta value
-
vega
(strike, spot, texp, cp=1)[source] Option model vega (sensitivity to volatility) by finite difference
- Parameters
strike – strike price
spot – spot (or forward) price
texp – time to expiry
cp – 1/-1 for call/put option
- Returns
vega value
-
vol_smile
(strike, spot, texp, cp=1, model='bsm')[source] Equivalent volatility smile for a given model
- Parameters
strike – strike price
spot – spot price
texp – time to expiry
cp – 1/-1 for call/put option
model – {‘bsm’, ‘norm’, ‘bsm-approx’, ‘norm-approx’}
- Returns
volatility smile under the specified model
-