aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/black.py18
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)