我将尝试解释我的问题。所以我有两个DataFrame,Df1和Df2。 它们每个都有3列和4行。 我将使用np.polyfit解决二次函数。
M=3
for t in range(M-1,0,-1):
regs = np.polyfit(Df1[:,t],Df2[:,t+1],2)
C = np.polyval(regs,Df1[:,t])
但是我只想使用小于1.1的值
Df1[Df1 < 1.1]
现在我有类似的东西
[1. , 1.09, 1.08, NaN]
[1. , 1., 1.07, 1.04]
[1. , NaN, 1.01, NaN]
[1. , 0.78, NaN,0.95]
我的Df2看起来像
[0.1 , 0., 0.08, 0.]
[0.1 , 0.11, 0., 0.09]
[0.1 , 0.33, 0.22, 0.]
[0.1 , 0.09, 0.108, 0.]
所以我要对Df1中的每一列进行操作,如果Df1具有NaN 那我就不想计算了。
这就是我要解释的内容:
X =[1.08,1.07,1.01]
Y =[0.,0.09,0]
答案 0 :(得分:0)
我尝试了这个
S = [[1.,1.09,1.08,1.34],[1.,1.16,1.26,1.54],[1.,1.22,1.07,1.03],[1.,0.93,0.97,0.92],[1.,1.11,1.56,1.52],
[1.,0.76,0.77,0.9],[1.,0.92,0.84,1.01],[1.,0.88,1.22,1.34]]
K= 1.1
Sn = np.asarray(S)
r = 0.06
T=1
M=3
dt = T/M
h= np.maximum(K-Sn,0)
V = np.copy(h)
disk = np.exp(-r*dt)
for i in range(M-1,0,-1):
reg = np.polyfit(Sn[:,i],V[:,i+1]*disk,2)
C = np.polyval(reg,Sn[:,i])
V[:,i] = np.where(C > h[:,i],V[:,i+1]*disk,h[:,i])
C0 = disk* 1/8 * np.sum(V[:,1])
我的C0结果是0.11973。.
这是Longstaff Schwartz蒙特卡洛算法,用于为美式期权定价。
但是在Longstaff Schwartz的论文中,他们得到了一些不同的结果
(第120页)
他们得到0.114。但是我看不到我的错误