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