使用uniroot的日到期收益率

使用uniroot的日到期收益率,r,finance,quantitative-finance,computational-finance,R,Finance,Quantitative Finance,Computational Finance,因此,我试图根据从Datastream检索到的数据来计算每天的yielt到成熟度。数据包括欧洲货币联盟国债,包括价格、票面和到期日。在R中,矩阵被构造成每天所有的价格、息票和到期时间都与它们的日期相对应。到期时,所有三个变量均为0(零) 使用bondvalue函数: bondvalue = function(c,T,r,par) { bv = c/r + (par - c/r) * (1+r)^(-2*T) #from (3.3) bv } 我主要使用: Yields = c(Yield

因此,我试图根据从Datastream检索到的数据来计算每天的yielt到成熟度。数据包括欧洲货币联盟国债,包括价格、票面和到期日。在R中,矩阵被构造成每天所有的价格、息票和到期时间都与它们的日期相对应。到期时,所有三个变量均为0(零)

使用bondvalue函数:

bondvalue = function(c,T,r,par) 
{
bv = c/r + (par - c/r) * (1+r)^(-2*T)   #from (3.3)
bv
}
我主要使用:

Yields = c(Yields, 
uniroot(function(r) bondvalue(Coupon*100, Prices, r, 100) - Prices, 
c(-1, 1))$root)
寻找到期收益率。 然而,如前所述,我想计算到期日收益率。因此,我使用for循环:

daily_ytm <- matrix(NA,ncol = ncol(Prices), nrow = nrow(Prices))
for (i in 1:nrow(Prices)) {
for (j in 1:ncol(Prices)) {
if (Prices[i,j] == 0){
  daily_ytm[i,j]=0
}  
else if (Prices > 0){
daily_ytm[i,j]=c(daily_ytm, 
                   uniroot(function(r) bondvalue(Coupon*100, Prices, r, 100) - Prices, 
                           c(-1, 1))$root)

}
}
}
我做错了什么

> head(Prices)
              PTOTEAOE0013 PTOTEMOE0001 DE0004109103 PTOTEOOE0009
1999-12-31       105.88       100.13      120.033        108.4   
2000-01-03       105.75       100.13      120.033        108.4 
2000-01-04       105.85       100.13      120.033        108.4          
2000-01-05       105.92       100.13      120.033        108.4          
2000-01-06       105.92       100.13      120.033        108.4          
2000-01-07       106.20       100.13      120.033        108.4          

> head(Coupon[,1:4])
       PTOTEUOE0001 PTOTEAOE0013 PTOTEMOE0001 DE0004109103
1999-12-31       0.0875     0.048125      0.10625      0.07125
2000-01-03       0.0875     0.048125      0.10625      0.07125
2000-01-04       0.0875     0.048125      0.10625      0.07125
2000-01-05       0.0875     0.048125      0.10625      0.07125
2000-01-06       0.0875     0.048125      0.10625      0.07125
2000-01-07       0.0875     0.048125      0.10625      0.07125


> head(ttm_y[,1:4])
PTOTEUOE0001 PTOTEAOE0013 PTOTEMOE0001 DE0004109103
1      1.16667         3.25      3.41667      3.50000
2      1.16667         3.25      3.41667      3.41667
3      1.16667         3.25      3.41667      3.41667
4      1.16667         3.25      3.41667      3.41667
5      1.16667         3.25      3.41667      3.41667
6      1.16667         3.25      3.41667      3.41667

干杯

如果(Prices[I,j]>0){您当前正在检查整个数据帧,而不是特定的值,那么它可能应该是
else。也许最好继续询问
> head(Prices)
              PTOTEAOE0013 PTOTEMOE0001 DE0004109103 PTOTEOOE0009
1999-12-31       105.88       100.13      120.033        108.4   
2000-01-03       105.75       100.13      120.033        108.4 
2000-01-04       105.85       100.13      120.033        108.4          
2000-01-05       105.92       100.13      120.033        108.4          
2000-01-06       105.92       100.13      120.033        108.4          
2000-01-07       106.20       100.13      120.033        108.4          

> head(Coupon[,1:4])
       PTOTEUOE0001 PTOTEAOE0013 PTOTEMOE0001 DE0004109103
1999-12-31       0.0875     0.048125      0.10625      0.07125
2000-01-03       0.0875     0.048125      0.10625      0.07125
2000-01-04       0.0875     0.048125      0.10625      0.07125
2000-01-05       0.0875     0.048125      0.10625      0.07125
2000-01-06       0.0875     0.048125      0.10625      0.07125
2000-01-07       0.0875     0.048125      0.10625      0.07125


> head(ttm_y[,1:4])
PTOTEUOE0001 PTOTEAOE0013 PTOTEMOE0001 DE0004109103
1      1.16667         3.25      3.41667      3.50000
2      1.16667         3.25      3.41667      3.41667
3      1.16667         3.25      3.41667      3.41667
4      1.16667         3.25      3.41667      3.41667
5      1.16667         3.25      3.41667      3.41667
6      1.16667         3.25      3.41667      3.41667