py_vollib.ref_python.black_scholes.greeks.numerical

A library for option pricing, implied volatility, and greek calculation. py_vollib is based on lets_be_rational, a Python wrapper for LetsBeRational by Peter Jaeckel as described below.

copyright:

© 2023 Larry Richards

license:

MIT, see LICENSE for more details.

Module Contents

Functions

delta(flag, S, K, t, r, sigma)

Return Black-Scholes delta of an option.

theta(flag, S, K, t, r, sigma)

Return Black-Scholes theta of an option.

vega(flag, S, K, t, r, sigma)

Return Black-Scholes vega of an option.

rho(flag, S, K, t, r, sigma)

Return Black-Scholes rho of an option.

gamma(flag, S, K, t, r, sigma)

Return Black-Scholes gamma of an option.

test()

Test by comparing analytical and numerical values.

hull_book_tests()

Example 17.1, page 355, Hull:

Attributes

f

f
delta(flag, S, K, t, r, sigma)[source]

Return Black-Scholes delta of an option.

Parameters:
  • S (float) – underlying asset price

  • K (float) – strike price

  • sigma (float) – annualized standard deviation, or volatility

  • t (float) – time to expiration in years

  • r (float) – risk-free interest rate

  • flag (str) – ‘c’ or ‘p’ for call or put.

theta(flag, S, K, t, r, sigma)[source]

Return Black-Scholes theta of an option.

Parameters:
  • S (float) – underlying asset price

  • K (float) – strike price

  • sigma (float) – annualized standard deviation, or volatility

  • t (float) – time to expiration in years

  • r (float) – risk-free interest rate

  • flag (str) – ‘c’ or ‘p’ for call or put.

vega(flag, S, K, t, r, sigma)[source]

Return Black-Scholes vega of an option.

Parameters:
  • S (float) – underlying asset price

  • K (float) – strike price

  • sigma (float) – annualized standard deviation, or volatility

  • t (float) – time to expiration in years

  • r (float) – risk-free interest rate

  • flag (str) – ‘c’ or ‘p’ for call or put.

rho(flag, S, K, t, r, sigma)[source]

Return Black-Scholes rho of an option.

Parameters:
  • S (float) – underlying asset price

  • K (float) – strike price

  • sigma (float) – annualized standard deviation, or volatility

  • t (float) – time to expiration in years

  • r (float) – risk-free interest rate

  • flag (str) – ‘c’ or ‘p’ for call or put.

gamma(flag, S, K, t, r, sigma)[source]

Return Black-Scholes gamma of an option.

Parameters:
  • S (float) – underlying asset price

  • K (float) – strike price

  • sigma (float) – annualized standard deviation, or volatility

  • t (float) – time to expiration in years

  • r (float) – risk-free interest rate

  • flag (str) – ‘c’ or ‘p’ for call or put.

test()[source]

Test by comparing analytical and numerical values.

>>> S =  49
>>> K = 50
>>> r = .05
>>> t = 0.3846
>>> sigma = 0.2
>>> flag = 'c'
>>> epsilon = .0001
>>> v1 = delta(flag, S, K, t, r, sigma)
>>> v2 = adelta(flag, S, K, t, r, sigma)
>>> abs(v1-v2)<epsilon
True
>>> v1 = gamma(flag, S, K, t, r, sigma)
>>> v2 = agamma(flag, S, K, t, r, sigma)
>>> abs(v1-v2)<epsilon
True
>>> v1 = rho(flag, S, K, t, r, sigma)
>>> v2 = arho(flag, S, K, t, r, sigma)
>>> abs(v1-v2)<epsilon
True
>>> v1 = vega(flag, S, K, t, r, sigma)
>>> v2 = avega(flag, S, K, t, r, sigma)
>>> abs(v1-v2)<epsilon
True
>>> v1 = theta(flag, S, K, t, r, sigma)
>>> v2 = atheta(flag, S, K, t, r, sigma)
>>> abs(v1-v2)<epsilon
True
hull_book_tests()[source]

Example 17.1, page 355, Hull:

>>> S = 49
>>> K = 50
>>> r = .05
>>> t = 0.3846
>>> sigma = 0.2
>>> flag = 'c'
>>> delta_calc = delta(flag, S, K, t, r, sigma)
>>> # 0.521601633972
>>> delta_text_book = 0.522
>>> abs(delta_calc - delta_text_book) < .01
True

Example 17.2, page 359, Hull:

>>> S = 49
>>> K = 50
>>> r = .05
>>> t = 0.3846
>>> sigma = 0.2
>>> flag = 'c'
>>> annual_theta_calc = theta(flag, S, K, t, r, sigma) * 365
>>> # -4.30538996455
>>> annual_theta_text_book = -4.31
>>> abs(annual_theta_calc - annual_theta_text_book) < .01
True

Example 17.4, page 364, Hull:

>>> S = 49
>>> K = 50
>>> r = .05
>>> t = 0.3846
>>> sigma = 0.2
>>> flag = 'c'
>>> gamma_calc = gamma(flag, S, K, t, r, sigma)
>>> # 0.0655453772525
>>> gamma_text_book = 0.066
>>> abs(gamma_calc - gamma_text_book) < .001
True

Example 17.6, page 367, Hull:

>>> S = 49
>>> K = 50
>>> r = .05
>>> t = 0.3846
>>> sigma = 0.2
>>> flag = 'c'
>>> vega_calc = vega(flag, S, K, t, r, sigma)
>>> # 0.121052427542
>>> vega_text_book = 0.121
>>> abs(vega_calc - vega_text_book) < .01
True

Example 17.7, page 368, Hull:

>>> S = 49
>>> K = 50
>>> r = .05
>>> t = 0.3846
>>> sigma = 0.2
>>> flag = 'c'
>>> rho_calc = rho(flag, S, K, t, r, sigma)
>>> # 0.089065740988
>>> rho_text_book = 0.0891
>>> abs(rho_calc - rho_text_book) < .0001
True