Я пытаюсь создать два класса для определения цены опциона. Первый класс фиксирует параметры опции, а второй генерирует путь. Мне нужно передать некоторые переменные (начальную точку базовой волатильности) из первого класса во второй. Однако в том, что я имею в виду в первом классе, что-то не так. Буду признателен за некоторые рекомендации.
Вот код (я использую VSCode (1.43.2) и Python (3.7.3)):
class bsEuroParam(object):
# model parameters of a European option
# pc = put/call
#type = vanila, lookback, asian
def __init__(self,pc,type,So,K,T,Vol,r):
self.pc = pc
self.type = type
self.So = So
self.K = K
self.T = T
self.Vol = Vol
self.r = r
class mcPaths(OptParam):
def __init__(self,numPaths=None,numSteps=None):
***OptParam.__init__(self)***
self.numPaths = numPaths
self.numSteps = numSteps
def paths(self):
dt=self.So/self.numSteps
S=np.zeros((self.numSteps,self.numPaths+1))
S[0]=self.So
for t in range(1,self.numSteps+1):
S[t]=S[t-1]*np.exp((self.r - 0.5 * self.Vol **2) * dt + self.Vol * math.sqrt(dt)*npr.standard_normal(self.numPaths+1))
self.results = np.array(S)
Я делать что-то не так в третьей строке из верхней части класса mcPaths
. Я не совсем уверен, каким будет правильный способ ссылки на первый класс.
Перед запуском кода я получаю следующее предупреждение pylint
:
Нет значения для аргумента «X» в несвязанном вызове метода »для каждого из аргументов, определенных в классе OptParam.
Pylint выделяет optParam
из строки под классом mcPaths
, указывая, что это источник ошибки .
Когда я запускаю код следующим образом:
myopt = OptParam('c','eur',100,100,1,0.75,0.02)
mySims = mcPaths(10,50)
Первая строка работает нормально. Вторая строка, mySims=mcPaths(10,50)
, возвращает:
TypeError Traceback (most recent call last)
filepath\pytest12.py in
----> 9 mySims = mcPaths(10,50)
filepath\pytest12.py in __init__(self, numPaths, numSteps)
30 class mcPaths(OptParam):
31 def __init__(self,numPaths=None,numSteps=None):
---> 32 OptParam.__init__(self)
33 self.numPaths = numPaths
34 self.numSteps = numSteps
TypeError: __init__() missing 7 required positional arguments: 'pc', 'type', 'So', 'K', 'T', 'Vol', and 'r'
- -------------- изменения кода, основанные на обсуждениях с Деленой
Class OptParam(object):
# model parameters of a European option
# pc = put/call
#type = vanila, lookback, asian
def __init__(self,pc,type,So,K,T,Vol,r):
self.pc = pc
self.type = type
self.So = So
self.K = K
self.T = T
self.Vol = Vol
self.r = r
#myopt=bsEuroParam('c','eur',100,100,1,0.75,0.02)
class mcPaths(OptParam):
def __init__(self,numPaths=None,numSteps=None,optPrm_val=None):
#OptParam.__init__(self)
self.numPaths = numPaths
self.numSteps = numSteps
self.So = optPrm_val.So
self.Vol = optPrm_val.Vol
self.r = optPrm_val.r
def paths(self):
dt=self.So/self.numSteps
S=np.zeros((self.numSteps,self.numPaths+1))
S[0]=self.So
for t in range(1,self.numSteps+1):
S[t]=S[t-1]*np.exp((self.r - 0.5 * self.Vol **2) * dt + self.Vol * math.sqrt(dt)*npr.standard_normal(self.numPaths+1))
self.results = np.array(S)
Для вызова:
myopt=OptParam('c','eur',100,100,1,0.75,0.02)
mysim = mcPaths(10,50,myopt)
ошибка: 11 mysim = mcPaths (10 , 50, myopt) init () принимает от 1 до 3 позиционных аргументов, но 4 получили