Python for Finance: Analyze Big Financial Data

(Elle) #1

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. ”’

Free download pdf