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.
py_vollib.ref_python is a pure python version of py_vollib without any dependence on LetsBeRational. It is provided purely as a reference implementation for sanity checking. It is not recommended for industrial use.¶
Module Contents¶
Functions¶
|
Return Black-Scholes delta of an option. |
|
Return Black-Scholes theta of an option. |
|
Return Black-Scholes vega of an option. |
|
Return Black-Scholes rho of an option. |
|
Return Black-Scholes gamma of an option. |
|
Test by comparing analytical and numerical values. |
Example 17.1, page 355, Hull: |
Attributes¶
- 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