2015-01-13 27 views
0

我想設置一個二叉樹中的利率模型。利率取決於路徑。我希望在所有情況下(2^N)的每一步都要返還利息(貼現因子和回報)。我想要返回每一個單一利率的原因是我想使用利率是計算折扣因子。我知道如何以複雜的方式做到這一點。在這裏我想使用雙循環(或更簡單的)來獲得結果。R中的二叉樹中的雙循環

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

你可以只使用一個嵌套的循環,在循環i內遍歷2:(ncol(w))

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)