Inputs in Black-Scholes Option Pricing Model Formula

  • S0 = underlying price
  • X = strike price
  • σ = volatility
  • r = continuously compounded risk-free interest rate
  • q = continuously compounded dividend yield
  • t = time to expiration

For,

  • σ = Volatility = India VIX has been taken.
  • r = 10% (As per NSE Website, it is fixed.)
  • q = 0.00% (Assumed No Dividend)

Note: In many resources, you can find different symbols for some of these parameters in the Black Scholes Formula. For example,

  • The strike price is often denoted K (here it is X).
  • Underlying price is often denoted S (without the zero)
  • Time to expiration is often denoted T – t (difference between expiration and now).

In the original Black and Scholes paper (The Pricing of Options and Corporate Liabilities, 1973) the parameters were denoted x (underlying price), c (strike price), v (volatility), r (interest rate), and t* – t (time to expiration) in Black Scholes Formula. The dividend yield was only added by Merton in Theory of Rational Option Pricing, 1973.

Python Code

This python code patch is written for NSEPython Library first time. It will match with Zerodha’s Black Scholes Calculator perfectly.

  import math from scipy.stats import norm def black_scholes_dexter(S0,X,t,σ=,r=10,q=0.0,td=365): if(σ==):σ =indiavix() S0,X,σ,r,q,t = float(S0),float(X),float(σ/100),float(r/100),float(q/100),float(t/td) #https://unofficed.com/black-scholes-model-options-calculator-google-sheet/ d1 = (math.log(S0/X)+(r-q+0.5*σ**2)*t)/(σ*math.sqrt(t)) #stackoverflow.com/questions/34258537/python-typeerror-unsupported-operand-types-for-float-and-int #stackoverflow.com/questions/809362/how-to-calculate-cumulative-normal-distribution Nd1 = (math.exp((-d1**2)/2))/math.sqrt(2*math.pi) d2 = d1-σ*math.sqrt(t) Nd2 = norm.cdf(d2) call_theta =(-((S0*σ*math.exp(-q*t))/(2*math.sqrt(t))*(1/(math.sqrt(2*math.pi)))*math.exp(-(d1*d1)/2))-(r*X*math.exp(-r*t)*norm.cdf(d2))+(q*math.exp(-q*t)*S0*norm.cdf(d1)))/td put_theta =(-((S0*σ*math.exp(-q*t))/(2*math.sqrt(t))*(1/(math.sqrt(2*math.pi)))*math.exp(-(d1*d1)/2))+(r*X*math.exp(-r*t)*norm.cdf(-d2))-(q*math.exp(-q*t)*S0*norm.cdf(-d1)))/td call_premium =math.exp(-q*t)*S0*norm.cdf(d1)-X*math.exp(-r*t)*norm.cdf(d1-σ*math.sqrt(t)) put_premium =X*math.exp(-r*t)*norm.cdf(-d2)-math.exp(-q*t)*S0*norm.cdf(-d1) call_delta =math.exp(-q*t)*norm.cdf(d1) put_delta =math.exp(-q*t)*(norm.cdf(d1)-1) gamma =(math.exp(-r*t)/(S0*σ*math.sqrt(t)))*(1/(math.sqrt(2*math.pi)))*math.exp(-(d1*d1)/2) vega = ((1/100)*S0*math.exp(-r*t)*math.sqrt(t))*(1/(math.sqrt(2*math.pi))*math.exp(-(d1*d1)/2)) call_rho =(1/100)*X*t*math.exp(-r*t)*norm.cdf(d2) put_rho =(-1/100)*X*t*math.exp(-r*t)*norm.cdf(-d2) return call_theta,put_theta,call_premium,put_premium,call_delta,put_delta,gamma,vega,call_rho,put_rho  

Usage

  S0 = 34950.60 X = 35000.00 σ = 14.72 t = 3 call_theta,put_theta,call_premium,put_premium,call_delta,put_delta,gamma,vega,call_rho,put_rho=black_scholes_dexter(S0,X,t,σ=,r=10,q=0.0,td=365) print(call_theta) print(put_theta) print(call_premium) print(put_premium) print(call_delta) print(put_delta) print(gamma) print(vega) print(call_rho) print(put_rho)  

Output

  -35.57594968706057 -25.994786756764814 175.92468507293597 196.56938065246504 0.4850057898780081 -0.514994210121992 0.0008543132102275919 12.621618527502404 1.378793315723619 -1.495555563365108  

Call and Put Option Price Formulas

Call option C and put option P prices are calculated using the following formulas:

width=316 width=341

where N(x) is the standard normal cumulative distribution function.

The formulas for d1 and d2 are:

width=261 width=141

Original Black-Scholes vs. Merton’s Formulas

In the original Black-Scholes model, which doesn’t account for dividends, the equations are the same as above except:

  • There is just S0 in place of S0 e-qt
  • There is no q in the formula for d1

Therefore, if the dividend yield is zero, then e-qt = 1 and the models are identical.

Black-Scholes Formulas for Option Greeks

Delta

width=227 width=272

Theta

width=572 width=598

… where T is the number of days per year (calendar or trading days, depending on what you are using).

Join The Conversation?

Tell us about you

Find us at the office

Kajioka- Constanza street no. 39, 50889 Kuala Lumpur, Malaysia

Give us a ring

Deunte Staunton
+59 850 269 756
Mon - Fri, 10:00-14:00

Reach out