py_vollib.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.
About LetsBeRational:¶
The source code of LetsBeRational resides at www.jaeckel.org/LetsBeRational.7z .
========================================================================================
Copyright © 2013-2014 Peter Jäckel.
Permission to use, copy, modify, and distribute this software is freely granted,
provided that this notice is preserved.
WARRANTY DISCLAIMER
The Software is provided "as is" without warranty of any kind, either express or implied,
including without limitation any implied warranties of condition, uninterrupted use,
merchantability, fitness for a particular purpose, or non-infringement.
========================================================================================
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.
>>> flag='c' >>> S=1000.0 >>> K=1000.0 >>> t=0.1 >>> r=0.05 >>> sigma=0.3
>>> epsilon = 0.01
>>> 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
Test PUT flag
>>> flag = 'p'
>>> 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