Я впервые использую класс Python, и хотя я определил переменную в " init ", метод класса все еще дает мне сообщение о том, что я не определил цените любые советы.
import numpy as np
import scipy.stats as si
import pandas as pd
from math import sqrt, exp, log, pi
class Option:
def __init__ (self, S, K, T, r, price, option):
self.S = S
self.K = K
self.T = T
self.r = r
self.price = price
self.option = option
self.sigma = self.bs_implied_vol()
@classmethod
def bs_price (self, sigma):
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))
if option == 'call':
result = (S * si.norm.cdf(d1, 0.0, 1.0) - K * np.exp(-r * T) * si.norm.cdf(d2, 0.0, 1.0))
if option == 'put':
result = (K * np.exp(-r * T) * si.norm.cdf(-d2, 0.0, 1.0) - S * si.norm.cdf(-d1, 0.0, 1.0))
return result
@classmethod
def bs_implied_vol (self):
vol = 0.5
epsilon = 1.0
abstol = 1e-4
i = 0
max_iter = 1e3
while epsilon > abstol:
if i > max_iter:
break
i = i + 1
orig = vol
function_value = self.bs_price(vol) - price
vega = S * si.norm.pdf(d1) * sqrt(T)
vol = -function_value/vega + vol
epsilon = abs(function_value)
return vol
option = Option (99.4,99.5,0.2,0.001,0.09683,'call')
Я получаю ошибку:
NameError: имя 'S' не определено