install.packages("rmarkdown")
library(readxl)
ZeroPrices <- read_excel("C:/Users/Gaby/Desktop/ZeroPrices.xlsx", sheet="zero_prices")
View(ZeroPrices)
attach(ZeroPrices)
names(ZeroPrices)
QUESTION 1
#1. La madures (T) en anos y precios en dolares de bonos cupon cero se encuentran en el archivo ZeroPrices.txt. Los precios estan expresados en porcentajes del par value. El modelo NelsonSiegel con tasa de forward es: #r(T; ??1, ??2, ??3, ??4) = ??1 + (??2 + ??3T)exp(-??4T) #Realice una regresion no-lineal para estiamr los parametros ??1, ??2, ??3, ??4. #a) ¿Cuales son sus estimaciones para ??1,??2,??3 y ??4? #b) Grafique la curva de rendimientos empirica y la curva de rendimientos estimada en una misma figura.
install.packages("nls2")
install.packages("proto")
library(nls2)
library(proto)
c.0<- min(ZeroPrices$maturity1)*0.5
modelo1 <- lm(log(maturity1 - c.0) ~ periodo, data=ZeroPrices)
pred1<-predict(modelo1)
start <- list(a=0.0001, d=-0.0001)
nonlin_mod=
nonlin_mod1<-nls2(maturity1~a+(pred1)*exp(-d*periodo),start=start, data=ZeroPrices, trace = FALSE, algorithm="port")
summary(modelo1)
"Podemos observar que los valores a=0.78785, b=4.0416, c=-1.1422, d=0.22799 obteniendo estos resultados, Podemos aplicar estas tecnicas de aproximacion de la siguiente manera: maturity1~0.78785+(4.0416-1.1422periodo)exp(-0.22799*periodo) Que seria la ecuacion de regresion nolineal de mejor ajuste. Con un valor del coeficiente de determinacion de bajo ajuste pero es la mejor dado que este tipo de algortimos usan metodologia de aproximacion sucesivas de Taylor, por regla matematica mejor se ajusta a los datos."
install.packages("ggplot2")
library(ggplot2)
p1<-ggplot(data.frame(x=c(5, 7)), aes(x)) +stat_function(fun=function(x) 0.78785+(4.0416-1.1422*x)*exp(-0.22799*x))
p1 + geom_point(data=ZeroPrices, aes(x = periodo, y = maturity1))
“Podemos observar en la grafica que la curva presentada tiene un buen ajuste a lOS datos y este tiende a convexar al origen.”
QUESTION 2
#2. Un bono cupon cero con valor nominal $ 1 000 y madures a 5 anos se vende a $ 828.
#Asuma que existe una tasa forward r de capitalizacion continua y constante. #a) Determine el valor de r.
VN=1000
P=828
t=5
P=VN*exp(-r^t)
r=(-1/t)*log(P/VN)/log(exp(1))
r
“Nos da como el valor de r es 0.03774842.”
#b) Suponga que en 1 ano la tasa r cambia a 4.25 %. ¿Cual es el precio del bono?
VN=1000
r=0.0425
t=1
P=VN*exp(-r^t)
P
“Si el r cambiara en un ano el precio del bono seria de $958.39”
#c) Si compro el bono a $ 828 y lo vendio 1 ano despues al precio determinado en (b). Determine el retorno neto.
VN=1000
P=958.3905
t=2
P=VN*exp(-r^t)
r=(-1/t)*log(P/VN)/log(exp(1))
r
“Tomando el valor del preciode de b valor del retorno es 0.09%.”
QUESTION 3
#3. Suponga que la tasa forward es r(t) = 0,028 + 0,00042t
#a) Cual es el rendimiento al vencimiento de un bono a 20 anos.
t=20
r=0.028 + 0.00042*t
r
“Haciendo el (r(t))nos da rendimiento es de 3.64%.”
#b) Cual es el precio de un bono cupon cero con valor nominal $ 1 000 y madures a 15 anos.
t=15
r=0.028 + 0.00042*t
r
VN=1000
P=VN/(1+r)^t
P
“La tasa de madurez es 3.43% y el precio del bono con cupon cero es 602.98.”
QUESTION 4
#4. Suponga que la tasa forward es r(t) = 0,028 + 0,0002t - 0,0003t2 #a) Cual es el rendimiento al vencimiento de un bono a 8 anos.
t=8
r=0.028 + 0.0002*t -0.0003*t^2
r
“Para este resultado el valor del rendimiento es 1.04%” #b) Cual es el precio de un bono cupon cero con valor nominal $ 1000 y madures a 5 anos.
t=5
r=0.028 + 0.0002*t - 0.0003*t^2
r
VN=1000
P=VN/(1+r)^t
P
“La tasa de madurez es 2.15%. El precio del bono con cupon cero es 899.10.”
#c) Grafique la curva de rendimiento y tasas forward. ¿Cuales son concavas y cuales son convexas? ¿Como se diferencian?
install.packages("ggplot2")
library(ggplot2)
ggplot(data.frame(x=c(0, 100)), aes(x)) +stat_function(fun=function(x) 0.028 + 0.0002*x - 0.0003*x^2)
“La grafica que se forma con los datos tiende a hacer unaa parbola es decreciente y es concava al origen.”
#d) Suponga que compra un bono cupon cero con vencimiento a 10 anos y los vende un ano despues. #¿Cual seria el retorno si la tasa forward no cambia en ese ano?
t=10
r=0.028 + 0.0002*t - 0.0003*t^2
r
t=11
r=0.028 + 0.0002*t - 0.0003*t^2
r
“Con los siguientes datos el valor de la tasa de retorno es cero. En el siguiente ano es naegativa.”
QUESTION 5
#5. El siguiente codigo calcula el precio de un bono dado el pago del cupon, madurez del bono,retorno a la madurez y valor nominal.
bondvalue = function (c, T , r , par)
{
# Computes bv = bond values ( current prices ) corresponding
# to all values of yield to maturity in the
# input vector r
#
# INPUT
# c = coupon payment ( semiannual )
# T = time to maturity (in years )
# r = vector of yields to maturity ( semiannual rates )
# par = par value
#
bv = c / r + (par - c / r ) * (1 + r )^( -2 * T )
bv
}
#a) Utilice la funcion uniroot() para encontrar la madurez de un bono con madurez a 30 #anos y valor nominal de $ 1 000 con cupones de $ 40 que se vende a $ 1200
c=40
T=30
r=0
par=1000
bv=1200
uniroot(function(r) bv-(c/r+(par-c/r)*(1+r)^(-2*T)), interval= c(0.0001, 1), tol = 1e-9)$root
“Nos muestra el valor de la madurez de 3.23981%”
#c) Utlice la funcion uniroot() para hallar el retorno a la madurez de un bono a 20 anos con #valor nominal $ 1 000 y cupon semi-anual de $ 35 que se vende a $ 1 050.
c=35
T=20
r=0
par=1000
bv=1050
uniroot(function(r) bv-(c/r+(par-c/r)*(1+r)^(-2*T)), interval= c(0.0001, 1), tol = 1e-9)$root
“Para el iten C nos da un valor de la madurez es 3.2740%”
#d) El retorno a la madurez de un bono es 0,035 en un bono con valor nominal de 1 000, #un precio de $ 950,10 y madurez a 5 anos. ¿Cual es el valor del cupon?
c=0
T=5
r=0.035
par=1000
bv=950.10
uniroot(function(c) bv-(c/r+(par-c/r)*(1+r)^(-2*T)), interval= c(0, 100), tol = 1e-9)$root
“El valor del cupon es $29.” “Podemos definir que con cada cambio en el precio, tiempo y tasa frente a los bonos tendra un impacto en consecuencia a su resultado”