10.12.2019 Views

Python for Finance

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Black-Scholes-Merton option model on

non-dividend paying stocks

The Black-Scholes-Merton option model is a closed-form solution to price a

Chapter 10

European option on a stock which does not pay any dividends before its maturity

date. If we use or the price today, X for the exercise price, r for the continuously

compounded risk-free rate, T for the maturity in years, for the volatility of the

stock, the closed-form formulae for a European call (c) and put (p) are:

Here, N() is the cumulative standard normal distribution. The following Python

codes represent the preceding equations to evaluate a European call:

from scipy import log,exp,sqrt,stats

def bs_call(S,X,T,r,sigma):

d1=(log(S/X)+(r+sigma*sigma/2.)*T)/(sigma*sqrt(T))

d2 = d1-sigma*sqrt(T)

return S*stats.norm.cdf(d1)-X*exp(-r*T)*stats.norm.cdf(d2)

In the preceding program, the stats.norm.cdf() is the cumulative normal

distribution, that is, N() in the Black-Scholes-Merton option model. The current stock

price is $40, the strike price is $42, the time to maturity is six months, the risk-free

rate is 1.5% compounded continuously, and the volatility of the underlying stock is

20% (compounded continuously). Based on the preceding codes, the European call is

worth $1.56:

>>>c=bs_call(40.,42.,0.5,0.015,0.2)

>>>round(c,2)

1.56

[ 347 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!