Я определил уравнение Блэка-Шоулза в Python следующим образом:
import numpy as np
import scipy.stats as si
def black_scholes(S, K, T, r, sigma, ratio):
d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
d2 = (np.log(S / K) + (r - 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
result = (S * si.norm.cdf(d1, 0.0, 1.0) - K * np.exp(-r * T) * si.norm.cdf(d2, 0.0, 1.0)) * ratio
return result
В то же время у меня есть фрейм данных, который содержит «наблюдаемые» цены опционов на рынке, такие как:
S = [230, 231, 232, 233, 234, 235]
results = [0.21, 0.22, 0.23, 0.24, 0.25, 0.25]
df = pd.to_DataFrame(list(zip(S, results))
Устанавливая известные переменные как S = 230, K = 248, T = 82/365 and ratio = 0.02
, я надеюсь использовать функцию black_scholes
для поиска значений переменных r
и sigma
, которые будут выводить результаты, видимые в df
(округлено до 2 знаков после запятой).
Обратите внимание, что df
имеет больше точек в действительности, чтобы обеспечить более точное решение. Любая помощь очень ценится. Спасибо!