我需要在第二个for循环内生成一组不同的随机数。但是每次第二个for循环运行时,它都会生成相同的一组随机数。
class pricing_lookback:
def __init__(self,spot,rate,sigma,time,sims,steps):
self.spot = spot
self.rate = rate
self.sigma = sigma
self.time = time
self.sims = sims
self.steps = steps
self.dt = self.time/self.steps
def call_floatingstrike(self):
pathwiseminS = np.array([])
simulationS = np.array([])
simulationSt = np.array([])
call2 = np.array([])
tst1 = np.array([])
for j in range(self.sims):
sT = self.spot
for i in range(self.steps):
phi= np.random.rand()
sT *= np.exp((self.rate-0.5*self.sigma*self.sigma)*self.dt + self.sigma*phi*np.sqrt(self.dt))
pathwiseminS = np.append(pathwiseminS, sT)
tst1 = np.append(tst1, pathwiseminS[1])
call2 = np.append(call2, np.max((pathwiseminS[self.steps-1]-self.spot),0))
simulationSt = np.append(simulationS,pathwiseminS[self.steps-1])
simulationS = np.append(simulationS,min(pathwiseminS))
call = np.average(simulationSt) - np.average(simulationS)
return call,call2, tst1
pricelookback = pricing_lookback(110,0.05,0.2,1,200,252)
clookback, call2, t1 = pricelookback.call_floatingstrike()
print(clookback,t1)
答案 0 :(得分:0)
正如@ user3483203所指出的,您的错误在其他地方。所有变量在第二个for循环中都是随机的:变量phi
和sT
在每个循环中都是随机的。每次都将pathwiseminS[1]
(恒定的非随机值)附加到tst1
或t1
,这是sT
的第一个元素或第一个循环值。您应该尝试刷新/清空pathwiseminS
(因为我认为这是您要尝试的操作),如下所示:
def call_floatingstrike(self):
simulationS = np.array([])
simulationSt = np.array([])
call2 = np.array([])
tst1 = []
for j in range(self.sims):
sT = self.spot
pathwiseminS = np.array([]) #notice the placement here
for i in range(self.steps):
phi= np.random.rand()
sT *= np.exp((self.rate-0.5*self.sigma*self.sigma)*self.dt + self.sigma*phi*np.sqrt(self.dt))
pathwiseminS = np.append(pathwiseminS, sT)
tst1 = np.append(tst1, pathwiseminS[1])
call2 = np.append(call2, np.max((pathwiseminS[self.steps-1]-self.spot),0))
simulationSt = np.append(simulationS,pathwiseminS[self.steps-1])
simulationS = np.append(simulationS,min(pathwiseminS))
call = np.average(simulationSt) - np.average(simulationS)
return call,call2, tst1