R中二项式树的双循环

时间:2015-01-13 01:53:12

标签: r for-loop

我想在二叉树中建立一个利率模型。利率取决于路径。我想要在所有情景中的每一步返回利率(折扣因子和支付)(2 ^ N)。我想要回报每一个利率的原因是我想要使用利率是计算折扣因子。我知道如何以复杂的方式做到这一点。在这里,我想使用双循环(或更简单的东西)来获得结果。

w代表所有情景的“0”或“1”虚拟变量矩阵 r是利率。如果有头(1),则r1 = r0 + u = r0 + 0.005;如果有尾(0),则r1 = r0-d。 D是折扣因子。 D1 = 1 /(1 + r0),D2 = D1 /(1 + r1)...... P是收益。

在这种情况下,周期N是10.因此,我可以逐步计算。但是,如果N越来越大,我就无法使用我的方法。我想用一种简单的方法来计算它。谢谢。

#Real Price
N <- 10
r0 <- 0.06
K <- 0.05
u <- 0.005
d <- 0.004
q <- 0.5

w <- expand.grid(rep(list(0:1),N))
r <- D <- P <- matrix(0,0,nrow=2^N,ncol=N)

for(i in 1:dim(w)[1])
{
  r[i,1] <- r0 + u*w[i,1] - d*(1-w[i,1])  
  r[i,2] <- r[i,1] + u*w[i,2] - d*(1-w[i,2])
  r[i,3] <- r[i,2]+u*w[i,3]-d*(1-w[i,3])
  r[i,4] <- r[i,3]+u*w[i,4]-d*(1-w[i,4])
  r[i,5] <- r[i,4]+u*w[i,5]-d*(1-w[i,5])
  r[i,6] <- r[i,5]+u*w[i,6]-d*(1-w[i,6])
  r[i,7] <- r[i,6]+u*w[i,7]-d*(1-w[i,7])
  r[i,8] <- r[i,7]+u*w[i,8]-d*(1-w[i,8])
  r[i,9] <- r[i,8]+u*w[i,9]-d*(1-w[i,9])
  r[i,10] <- r[i,9]*+u*w[i,10]-d*(1-w[i,10])

  D[i,1] <- 1/(1+r0)
  D[i,2] <- D[i,1]/(1+r[i,1])
  D[i,3] <- D[i,2]/(1+r[i,2])
  D[i,4] <- D[i,3]/(1+r[i,3])
  D[i,5] <- D[i,4]/(1+r[i,4])
  D[i,6] <- D[i,5]/(1+r[i,5])
  D[i,7] <- D[i,6]/(1+r[i,6])
  D[i,8] <- D[i,7]/(1+r[i,7])
  D[i,9] <- D[i,8]/(1+r[i,8])
  D[i,10] <- D[i,9]/(1+r[i,9])

  P[i,1] <- D[i,1]*pmax(K-r0,0)*(0.5^N)
  P[i,2] <- D[i,2]*pmax(K-r[i,1],0)*(0.5^N)
  P[i,3] <- D[i,3]*pmax(K-r[i,2],0)*(0.5^N)
  P[i,4] <- D[i,4]*pmax(K-r[i,3],0)*(0.5^N)
  P[i,5] <- D[i,5]*pmax(K-r[i,4],0)*(0.5^N)
  P[i,6] <- D[i,6]*pmax(K-r[i,5],0)*(0.5^N)
  P[i,7] <- D[i,7]*pmax(K-r[i,6],0)*(0.5^N)
  P[i,8] <- D[i,8]*pmax(K-r[i,7],0)*(0.5^N)
  P[i,9] <- D[i,9]*pmax(K-r[i,8],0)*(0.5^N)
  P[i,10] <- D[i,10]*pmax(K-r[i,9],0)*(0.5^N)
}
true.price <- sum(P)
#> true.price
# > true.price
# [1] 0.00292045

1 个答案:

答案 0 :(得分:1)

您可以使用嵌套循环,在2:(ncol(w))循环中循环i

for(i in 1:nrow(w)) {
  r[i, 1] <-  r0 + u*w[i, 1] - d*(1-w[i, 1])  
  D[i, 1] <- 1/(1+r0)
  P[i, 1] <- D[i, 1]*pmax(K-r0, 0)*(0.5^N)

  for (j in 2:(ncol(w))) {
    r[i,j] <- r[i, j-1] + u*w[i, j] - d*(1-w[i, j])    
    D[i,j] <- D[i, j-1]/(1+r[i, j-1])
    P[i,j] <- D[i, j]*pmax(K-r[i, j-1], 0)*(0.5^N)
  }
}

true.price <- sum(P)