为期权定价创建 python 类 时出错
Errors while creating python classes for option pricing
我正在尝试创建两个 classes 来为选项定价。第一个 class 捕获选项的参数,第二个生成路径。我需要将一些变量(基础波动率的起点)从第一个 class 传递到第二个。然而,我提到第一个 class 的方式有些不对劲。我将不胜感激。
这是代码(我正在使用 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)
我在 class mcPaths
顶部的第三行做错了。我不太确定引用第一个 class 的正确方法是什么。
在 运行 代码之前,我收到以下 pylint
警告:
No value for argument "X" in unbound method call" for each of the
arguments defined in class OptParam.
Pylint 突出显示 mcPaths
class 下方行中的 optParam
,表明这是错误的来源。
当我运行代码如下:
myopt = OptParam('c','eur',100,100,1,0.75,0.02)
mySims = mcPaths(10,50)
第一行运行没问题。第二行,mySims=mcPaths(10,50)
,returns:
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'
----------------根据与 Delena 的讨论进行的代码编辑
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 个
如果我对你的理解正确,在下面的代码中,你希望能够从 mcPaths
的 __init__
函数中获取你用来创建 myopt
的值,当你创建 mySims
:
myopt = OptParam('c','eur',100,100,1,0.75,0.02)
mySims = mcPaths(10,50)
您可以将参数添加到 __init__
函数 mcPaths
以获取您希望能够访问的 OptParam
:
class mcPaths(OptParam):
def __init__(self, numPaths=None, numSteps=None, opt_param_value=None):
当您创建 mySims
时,您可以将 myopt
作为参数传递给 mcPaths
:
mySims = mcPaths(10, 50, myopt)
然后您将能够从 __init__
:
中的 opt_param_value
中获取这些值
class mcPaths(OptParam):
def __init__(self, numPaths=None, numSteps=None, opt_param_value=None):
self.r = opt_param_value.r
我正在尝试创建两个 classes 来为选项定价。第一个 class 捕获选项的参数,第二个生成路径。我需要将一些变量(基础波动率的起点)从第一个 class 传递到第二个。然而,我提到第一个 class 的方式有些不对劲。我将不胜感激。
这是代码(我正在使用 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)
我在 class mcPaths
顶部的第三行做错了。我不太确定引用第一个 class 的正确方法是什么。
在 运行 代码之前,我收到以下 pylint
警告:
No value for argument "X" in unbound method call" for each of the arguments defined in class OptParam.
Pylint 突出显示 mcPaths
class 下方行中的 optParam
,表明这是错误的来源。
当我运行代码如下:
myopt = OptParam('c','eur',100,100,1,0.75,0.02)
mySims = mcPaths(10,50)
第一行运行没问题。第二行,mySims=mcPaths(10,50)
,returns:
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'
----------------根据与 Delena 的讨论进行的代码编辑
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 个
如果我对你的理解正确,在下面的代码中,你希望能够从 mcPaths
的 __init__
函数中获取你用来创建 myopt
的值,当你创建 mySims
:
myopt = OptParam('c','eur',100,100,1,0.75,0.02)
mySims = mcPaths(10,50)
您可以将参数添加到 __init__
函数 mcPaths
以获取您希望能够访问的 OptParam
:
class mcPaths(OptParam):
def __init__(self, numPaths=None, numSteps=None, opt_param_value=None):
当您创建 mySims
时,您可以将 myopt
作为参数传递给 mcPaths
:
mySims = mcPaths(10, 50, myopt)
然后您将能够从 __init__
:
opt_param_value
中获取这些值
class mcPaths(OptParam):
def __init__(self, numPaths=None, numSteps=None, opt_param_value=None):
self.r = opt_param_value.r