Метод класса в Python не видит определенной переменной - PullRequest
0 голосов
/ 09 апреля 2020

Я впервые использую класс 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' не определено

...