2015-01-13 2 views
0

이항 트리에서 이자율 모델을 설정하고 싶습니다. 이자율은 경로에 따라 다릅니다. 나는 모든 시나리오 (2^N)에서 매 단계마다 이자율 (할인율과 보수)을 원한다. 모든 단일 이자율을 반환하려는 이유는 이자율을 계산 할인 요인으로 사용하고 싶다는 것입니다. 복잡한 방식으로이 작업을 수행하는 방법을 알고 있습니다. 여기에 이중 루프 (또는 더 간단한)를 사용하여 결과를 얻고 싶습니다.이중 회귀 식의 이중 고리를 두 번 반복 R

w는 모든 시나리오를 나타내는 "0"또는 "1"더미 변수 행렬에 대한 것입니다.
r은 이자율입니다. head (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)