我有以下代码:
import numpy as np
from scipy.stats import norm
class European_Option:
def __init__(self, **kwargs):
self.S = kwargs.get("S")
self.X = params.get("X")
self.sigma = params.get("sigma")
self.r = params.get("r")
self.T = params.get("T")
self.d1 = (np.log(self.S / self.X) + (self.r + 0.5 * self.sigma ** 2) * (self.T)) / (
self.sigma * np.sqrt(self.T)
)
self.d2 = (np.log(self.S / self.X) + (self.r - 0.5 * self.sigma ** 2) * (self.T)) / (
self.sigma * np.sqrt(self.T)
)
def call(self):
C = norm.cdf(self.d1) * self.S - norm.cdf(self.d2) * self.X * np.exp(-self.r * self.T)
return C
def put(self):
P = -norm.cdf(-self.d1) * self.S + norm.cdf(-self.d2) * self.X * np.exp(-self.r * self.T)
return P
params = {"S": 50, "X": 100, "sigma": 0.25, "T": 1, "r": 0.05}
print(European_Option(**params).call())
现在,我想遍历具有多个值的字典并调用我的European_Option.call()
方法。
params2={"S":[50,100], "X":[100,200],"sigma":0.25,"T":1,"r":0.05}
print(European_Option(**params2).call())
显然,这将导致错误。我该怎么办?
答案 0 :(得分:1)
您可以使用itertools.product
将所有 S 值与所有 X 值组合,例如:
s_list = [50, 100]
x_list = [100, 200]
for s, x in itertools.product(s_list, x_list):
params = {"S": s, "X": x, "sigma": 0.25, "T": 1, "r": 0.05}
print(European_Option(**params).call())
输出:
0.027352509369436673
1.922075153371893e-07
12.335998930368717
0.054705018738873346
答案 1 :(得分:1)
尝试:
params2={"S":np.array([50,100]), "X":np.array([100,200]),"sigma":0.25,"T":1,"r":0.05}
print(European_Option(**params2).call())
您不能将常规python list
除以标量(您可以相乘,但这意味着其他的意思)。