Appendix B. Call Option Class
Example B-1 contains a class definition for a European call option in the Black-Scholes-
Merton (1973) model (cf. Chapter 3, and in particular Example 3-1).
Example B-1. Implementation of a Black-Scholes-Merton call option class
Valuation of European call options in Black-Scholes-Merton Model
incl. Vega function and implied volatility estimation
— class-based implementation
bsm_option_class.py
from math import log, sqrt, exp
from scipy import stats
class call_option(object):
”’ Class for European call options in BSM model.
Attributes
==========
S0 : float
initial stock/index level
K : float
strike price
T : float
maturity (in year fractions)
r : float
constant risk-free short rate
sigma : float
volatility factor in diffusion term
Methods
=======
value : float
return present value of call option
vega : float
return Vega of call option
imp_vol: float
return implied volatility given option quote
”’
def init(self, S0, K, T, r, sigma):
self.S0 = float(S0)
self.K = K
self.T = T
self.r = r
self.sigma = sigma
def value(self):
”’ Returns option value. ”’
d1 = ((log(self.S0 / self.K)
- (self.r + 0.5 * self.sigma * 2 ) self.T)
/ (self.sigma * sqrt(self.T)))
d2 = ((log(self.S0 / self.K) - (self.r - 0.5 * self.sigma * 2 ) self.T)
/ (self.sigma sqrt(self.T)))
value = (self.S0 stats.norm.cdf(d1, 0.0, 1.0)
- self.K * exp(-self.r * self.T) * stats.norm.cdf(d2, 0.0, 1.0))
return value
def vega(self):
”’ Returns Vega of option. ”’
d1 = ((log(self.S0 / self.K)
- (self.r + 0.5 * self.sigma * 2 ) self.T)
/ (self.sigma sqrt(self.T)))
vega = self.S0 stats.norm.cdf(d1, 0.0, 1.0) * sqrt(self.T)
return vega
def imp_vol(self, C0, sigma_est=0.2, it= 100 ):
”’ Returns implied volatility given option price. ”’