diff options
| -rw-r--r-- | python/analytics/black.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/python/analytics/black.py b/python/analytics/black.py index 647c92b2..d489ba2d 100644 --- a/python/analytics/black.py +++ b/python/analytics/black.py @@ -1,15 +1,21 @@ -import numpy as np +import math from scipy.stats import norm def d1(F, K, sigma, T): - return (np.log(F / K) + sigma**2 * T / 2) / (sigma * np.sqrt(T)) + return (math.log(F / K) + sigma**2 * T / 2) / (sigma * math.sqrt(T)) def d2(F, K, sigma, T): - return d1(F, K, sigma, T) - sigma * np.sqrt(T) + return d1(F, K, sigma, T) - sigma * math.sqrt(T) + +def d12(F, K, sigma, T): + sigmaT = sigma * math.sqrt(T) + d1 = (math.log(F / K) + sigma**2 * T / 2) / sigmaT + d2 = d1 - sigmaT + return d1, d2 def black(F, K, T, sigma, option_type = "payer"): - chi = 1 if option_type == "payer" else -1 + d1, d2 = d12(F, K, sigma, T) if option_type == "payer": - return F * norm.cdf(d1(F, K, sigma, T)) - K * norm.cdf(d2(F, K, sigma, T)) + return F * norm.cdf(d1) - K * norm.cdf(d2) else: - return K * norm.cdf(- d2(F, K, sigma, T)) - F * norm.cdf(- d1(F, K, sigma, T)) + return K * norm.cdf(-d2) - F * norm.cdf(-d1) |
