La madures (T) en años y precios en dólares de bonos cupón cero se encuentran en el archivo ZEROPRICES.txt. Los precios están expresados en porcentajes del par value. El modelo Nelson Siegel con tasa de forward es: \[r(T; θ1, θ2, θ3, θ4) = θ1 + (θ2 + θ3T)exp(−θ4T)\]
Realice una regresión no-lineal para estiamr los parámetros θ1, θ2, θ3, θ4.
Se importa los datos a trabajar del archivo ZEROPRICES.txt.:
zEROPRICES <- read.table("C:/Unidad 3/semana 9/ZeroPrices.txt", header = TRUE, sep = "")
names(zEROPRICES)
## [1] "maturity" "price"
El nombre de los datos a utilizar de denominan “maturity” y “price”
De la basa de datos importante se tiene dos variables. Estas son:
Se tiene a \(\theta\) inicial como único factor que se muestra como dependiente de los datos.
Se debe de asumir a \(\theta_1\) como un valor determinado debido a que de esta suposición se puede realizar lad estimaciones porteriores.
NSiegel_pt1 = nls (
price ~ 100 * exp (- theta1 * maturity),
data = zEROPRICES,
start = list (theta1 = 0.01))
theta1_estimado = summary(NSiegel_pt1)$coef[,1]
theta1_estimado
## [1] 0.05179561
Al tener al \(\theta\) inicial se puede obtener los \(\theta s\) siguientes. Estos se hallan con la ecuación para las tasas forward pero debe de modificar para que no incluya \(\theta_2\).
Se da un valor de 0.5 para \(\theta_3\) y \(\theta_4\).
Se ejecuta los siguientes comandos para calcular el valor de los parámetros de \(\theta_1\), \(\theta_2\) y \(\theta_3\)
NSiegel_pt2 = nls(
price ~ 100 * exp( - ( theta1 + (theta3/theta4) * (1 - exp(-theta4*maturity)) / (theta4*maturity) - (theta3/theta4)*exp(-theta4*maturity) ) * maturity ),
data=zEROPRICES,
start=list(theta1=theta1_estimado,theta3=0.5,theta4=0.5))
coefs = summary(NSiegel_pt2)$coef[,1]
theta1_estimado = coefs[1]
theta3_estimado = coefs[2]
theta4_estimado = coefs[3]
theta1_estimado
## theta1
## 0.04216902
theta3_estimado
## theta3
## 0.01826462
theta4_estimado
## theta4
## 0.3479543
Se ejecutan los siguientes comandos para calcular el último parámetro con toda la ecución desarrollada:
NSiegel_pt3 = nls(
price ~ 100 * exp( - ( theta1 + (theta2 + theta3/theta4) * (1 - exp(-theta4*maturity)) / (theta4*maturity) - (theta3/theta4)*exp(-theta4*maturity) ) * maturity ),
data=zEROPRICES,
start=list(theta1=theta1_estimado,theta2=0.,theta3=theta3_estimado,theta4=theta4_estimado))
coefs = summary(NSiegel_pt3)$coef[,1]
coefs
## theta1 theta2 theta3 theta4
## 0.009860962 0.049479902 0.002103318 0.056456328
theta1 = coefs[1]
theta2 = coefs[2]
theta3 = coefs[3]
theta4 = coefs[4]
Un bono cupón cero con valor nominal \(\$1000\) y madurez a \(5\) años se vende a \(\$828\). Asuma que existe una tasa forward \(r\) de capitalización continua y constante.
Determine el valor de \(r\)
Se tiene:
Despejando \(r_n\)
\[log(exp(n*r_n)) = log\left(\frac{P_{(n-1)}}{P_{(n)}}\right)\]
Por lo tanto el valor de \(r_n\) es:
\[r_n = \frac{log\left(\frac{P_{(n-1)}}{P_{(n)}}\right)}{n}\]
Se ejecutan los siguientes códigos para calcular \(r\):
Precio_bono <- 828
Valor_Nominal <- 1000
n <- 5
r <- (log(Valor_Nominal/Precio_bono))/5
r_porciento <- r*100 ; r_porciento
## [1] 3.774842
El valor de \(r\) es \(3,77\%\)
Suponga que en 1 año la tasa \(r\) cambia a \(4,25 \%\). ¿ Cuál es el precio del bono?
Se tiene la siguiente ecuación:
\[P(n)= \frac {FV}{exp \space (n \space r_n)}\] La tasa forward pasado 1 año tendrá un período de 4 años.
Reemplazando valores en la ecuacion:
\[P(4)= \frac {1000}{exp \space (4 \times (0.0425))}\]
Valor_Nominal_1 <- 1000
n_1 <- 4
r1 <- 0.0425
Precio_bono_1 <- (Valor_Nominal_1/exp(n_1*r1)) ; Precio_bono_1
## [1] 843.6648
Se obtiene que el precio del bono es es \(843.664\) cuando cambia \(r\) a \(4.95\%\).
Si se compra el a bono al precio de \(\$828\) y lo vende 1 año después al precio determinado en (b)
Determine el retorno neto.
Se tiene la siguiente fórmula para el cálculo del retorno neto:
\[R_t = \frac {P_t - P_{t-1}}{P_{t-1}}\] Reemplazando los valores en la ecuación:
\[R_t = \frac {843.6648 - 828}{828}\]
Precio_bono_0 <- 828
Retorno_neto <- (Precio_bono_1 - Precio_bono_0) / Precio_bono_0
Retorno_neto_porciento <- Retorno_neto*100 ; Retorno_neto_porciento
## [1] 1.891886
se obtiene que el retorno neto del bono es \(1,89\%\).
Suponga que la tasa forward es \(r(t) = 0,028 + 0,00042t\)
¿Cuál es el rendimiento al vencimiento de un bono a 20 años?
Se tiene la siguiente ecuación:
\[y_n = \frac {1}{T} \space \int_0^T r(t) \space dt\]
Reemplando los valores en la ecuación:
\[y_{20} = \frac {1}{20} \space \int_0^{20} (0,028 + 0,00042t) \space dt\] \[y_{20} = \frac {1}{20} \space \left(0,028 \space (20) + \frac {0,00042}{2} \space (20)^2\right)\]
Se ejecuta los siguientes comandos para hallar el rendimiento del bono a 20 años
ytm_20 <- ((0.028*20)+(0.00042/2)*(20^2))/20
ytm_20_porciento <- ytm_20*100 ; ytm_20_porciento
## [1] 3.22
El rendimiento del bono a 20 años es de \(3,22\%\)
¿Cuál es el precio de un bono cupón cero con valor nominal \(\$1000\) y madurez a 15 años?
Se tiene las siguientes ecuaciones:
-Ecuación 1
\[P(T) = PAR \times D(T)\]
-Ecuación 2
\[D(T) = exp\{-T \space y_T \}\]
Se utilizan las dos ecuaciones para obtener la siguiente relación:
\[P(T) = PAR\times exp\{-T \space y_T \}\]
Se emplea \(y_t\), se aplica la siguiente ecuación:
\[ytm_{15} = \frac {1}{5} \space\left(0,028\space(15)+\frac{0,00042}{2}\space(15)^2\right)\]
ytm_15 <- ((0.028*15)+(0.00042/2)*(15^2))/15
ytm_15_porciento <- ytm_15*100 ; ytm_15_porciento
## [1] 3.115
Se obtiene el rendimiento del bono \(ytm_{15}\) es \(3.115\%\)
Se emplea la siguiente ecuación para obetner el precio del bono:
\[P(15) = 1000 \times exp\{-15 \times 0,03115 \}\]
Precio_bono_15 <- 1000*exp(-15*0.03115) ; Precio_bono_15
## [1] 626.7234
Se obtiene el precio del bono cupón cero con valor nominal \(\$ 1000\) y madurez a 15 años es \(\$626.72\)
#Pregunta 4
Suponga que la tasa forward es \(r(t)=0,028 + 0,0002t - 0,0003t^2\)
\(a)\) ¿Cuál es el rendimiento al vencimiento de un bono a 8 años?
Se tiene la siguiente fórmula:
\[ytm_n=\frac {1}{T} \space \int_0^T r(t) \space dt\]
Reemplazando los valores en la función:
\[ytm_8=\frac {1}{8} \space \int_0^8 0,028 + 0,0002t - 0,0003t \space dt\]
Resolviendo la ecuación:
\[ytm_{8} = \frac {1}{8} \space \left(0,028 \space (8) + \frac {0,0002}{2} \space (8)^2 - \frac {0,0003}{3} \space (8)^3\right)\]
Se ejecutan los siguientes códigos para hallar el rendimiento al vencimiento de un bono a 8 años:
ytm_8 <- ((0.028*8)+(0.0002/2)*(8^2)-(0.0003/3)*(8^3))/8
ytm_8_porciento <- ytm_8*100 ; ytm_8_porciento
## [1] 2.24
Se obtiene que el rendimiento al vencimiento de un bono a 8 años es de \(2,24\%\)
Se tiene la siguiente ecuación:
\[P(T) = PAR \times exp\{-T\space y_T \}\]
Para el cálcula de rendimiento al vencimiento de un bono a 5 años \(ytm_5\),se usa la siguiente ecuación:
\[ytm_{5} = \frac {1}{5} \space \left(0,028 \space (5) + \frac {0,0002}{2} \space (5)^2 - \frac {0,0003}{3} \space (5)^3\right)\]
Se ejecutan los siguientes códigos para hallar el rendimiento al vencimiento
ytm_5 <- ((0.028*5)+(0.0002/2)*(5^2)-(0.0003/3)*(5^3))/5
ytm_5_porciento <- ytm_5*100 ; ytm_5_porciento
## [1] 2.6
El rendimiento al vencimiento de un bono a 5 años es \(2,6\%\)
Se ejecutan los siguientes comandos para hallar el precio del bono.
Precio_bono_5 <- 1000*exp(-5*0.026) ; Precio_bono_5
## [1] 878.0954
El precio del bono es \(\$ 878.0954\)
Grafique la curva de rendimiento y tasas forward.¿Cuáles son cóncavas y cuáles son convexas? ¿Cómo se diferencian?
Se utiliza dos ecuaciones para hallar el rendimiento y las tasas forward:
Ecuación 1
\[r(t) = 0,028 + 0,0002t - 0,0003t^2\]
Ecuación 2
\[y_{t} = \frac {1}{t} \space \left(0,028) \space (t) + \frac {0,0002}{2} \space (t)^2- \frac {0,0003}{3} \space (t)^3\right)\]
Se ejecuta los siguientes códigos para hallar la curva de rendimiento y la curva de tasa forward
Los siguientes comandos definen la curva de rendimiento
maturity <- seq(0,50, by = 1)
rendimiento<- numeric()
for (i in 1:length(maturity)) {
rendimiento[i] <- 0.028 + 0.0002*maturity[i] − 0.0003*(maturity[i])^2
}
Los siguientes comandos definen la curva de Tasa Forward
forward<- numeric()
for (i in 1:length(maturity)) {
forward[i] <- ((0.028*maturity[i])+(0.0002/2)*((maturity[i])^2)-(0.0003/3)*((maturity[i])^3))/maturity[i]
}
Graficando la Curva de rendimiento y la curva de Tasas Forward
par(mfrow = c(1,2))
plot(rendimiento, type = "l", main = "Curva de Rendimiento", xlab = "Maduración", ylab = "Rendimiento")
plot(forward, type = "l", main = "Curva de Tasas Forward", xlab = "Maduración", ylab = "Tasas Forward")
Suponga que compra un bono cupón cero con vencimiento a 10 años y los vende aun año después.¿Cuál sería el retorno si la tasa forward no cambia en ese año?
Se utilizará la siguiente fómrula para hallar la tasa a 10 años
\[y_{t} = \frac {1}{t} \space \left(0,028 \space (t) + \frac {0,0002}{2} \space (t)^2 - \frac {0,0003}{3} \space (t)^3\right)\] Se ejecuta los siguientes códigos para hallar las tasas forward
Se halla la tasa forward a 10 años. Fecha en la que se compro el bono
y_10 <- ((0.028*10)+(0.0002/2)*(10^2)-(0.0003/3)*(10^3))/10
y_10_porciento <- y_10*100 ; y_10_porciento
## [1] 1.9
La tasa forward para \(y_10\) es \(1,9\%\)
Se halla la tasa forward a 9 años. Fecha en la que se vendio el bono
y_9 <- ((0.028*9)+(0.0002/2)*(9^2)-(0.0003/3)*(9^3))/9
y_9_porciento <- y_9*100 ; y_9_porciento
## [1] 2.08
La tasa forward para \(y_9\) es \(2,08\%\)
Se calculo las tasa forwad para hallar los precios de los bonos con la siguiente fórmula:
\[P(T) = PAR \times exp\{-T \space y_T \}\]
Precio_bono_10 <- 1000*exp(-10*y_10) ; Precio_bono_10
## [1] 826.9591
El precio para \(P_10\) es \(\$ 826.9591\)
Precio_bono_9 <- 1000*exp(-9*y_9) ; Precio_bono_9
## [1] 829.2779
El precio para \(P_9\) es \(\$ 829.2779\)
Se calcula el rendimiento con la siguiente fórmula:
\[R_t = \frac {P_T - P_{t-1}}{P_{t-1}}\] Se utiliza los siguientes comandos para hallar el rendimiento del bono
Retorno<- (Precio_bono_9 - Precio_bono_10) / Precio_bono_10
Retorno_porciento <- Retorno*100 ; Retorno_porciento
## [1] 0.2803924
El retorno del bono es de \(0,28\%\)
El siguiente código calcula el precio de un bono dado el pago del cupón, 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
}
Utilice la función uniroot() para resolver las siguientes preguntas:
Utilice la función uniroot() para econtrar la madurez de un bono con madurez a 30 años y valor nominal de 1 000 de dólares con cupones de 40 dólares que se vende a $ 1 200
Se utiliza la función uniroot(), para indicar que el valor a calcular se encuentra en la variable r. La variable r esta dentro de la función bondvalue y el intervalo donde estará el rendimiento esta entre \(0.03\) y \(0.04\)
r = seq(0, 0.05, length = 300)
value = bondvalue (40, 30, r, 1000)
plot(r, value)
abline(h=1200)
A <- uniroot( function(r) bondvalue(40, 30, r, 1000) - 1200, c(0.03,0.04) )
Ar <- A$root
Ar_porciento <- Ar*100; Ar_porciento
## [1] 3.241618
Se obtiene que la tasa de descuento es \(3.24\%\)
Determine el retorno a la madurez de un bono con valor nominal 10 000 dólares que se vende a $ 9 800 con pago de cupones semi-anules de 280 dólares y madurez de 8 años.
Se utiliza la función uniroot(), el valor a calcular se encuentra en la variable r y esta en la función bondvalue y el intervalo donde se encontrara el rendimiento esta entre \(0.01\) y \(0.04\).
r = seq(0, 0.05, length = 300)
value = bondvalue(280, 8, r, 10000)
plot(r, value)
abline(h=9800)
B <- uniroot(function(r) bondvalue(280, 8, r, 10000) - 9800, c(0.01,0.04) )
Br <- B$root
Br_porciento <- Br*100; Br_porciento
## [1] 2.956445
Se obitiene que la tasa de descuento será \(2.95\%\)
Utilice la función uniroot() para hallar el retorno a la madurez de un bono a 20 años con valor nominal 1000 dólares y cupón semi-anual de 35 dólares que se vende a $1 050.
Se utiliza la función uniroot() para indicar que el valor a calcular se encuentra en la variable r. Esta variable se encuentra en la función bondvalue y el intervalo donde se econtrará el rendimiento al vencimiento está entre \(0.01\) y \(0.04\).
r = seq(0, 0.05, length = 300)
value = bondvalue(35, 20, r, 1000)
plot(r, value)
abline(h=1050)
C <- uniroot(function(r) bondvalue(35, 20, r, 1000) - 1050, c(0.01,0.04) )
Cr <- C$root
Cr_porciento <- Cr*100; Cr_porciento
## [1] 3.27374
Se obtiene que la tasa de descuento será \(3.27\%\)
El retorno a la madurez de un bono es 0,035 es un bono con valor nominal de 1000, un precio de $ 950,10 y madurez a 5 años.¿Cuáles es el valor del cupón?
D <- uniroot(function(c) bondvalue(c, 5, 0.035, 1000) - 950.10, c(0,1000) )
Dr <- D$root
Dr
## [1] 28.99996
Se obtiene qye el valor del cupón será de \(\$28.99\)