Datos_TRM<- read.csv(file = "Historico.csv", header = TRUE, sep = ";", dec = ".", fill = TRUE)
View(Datos_TRM)
head(Datos_TRM)
## Fecha Precio
## 1 1/01/2000 1873.77
## 2 2/01/2000 1873.77
## 3 3/01/2000 1873.77
## 4 4/01/2000 1874.35
## 5 5/01/2000 1895.97
## 6 6/01/2000 1912.69
class(Datos_TRM[,"Fecha"])
## [1] "character"
Cambiamos la clase de la fecha de “character” a “Date”
Datos_TRM[,"Fecha"]<-as.Date(Datos_TRM[,"Fecha"],format = "%d/%m/%Y")
class(Datos_TRM[,"Fecha"])
## [1] "Date"
Debemos instalar Plotly
#install.packages("plotly")
#install.packages("ggplot2")
# Cargar la librería ggplot2
library(ggplot2)
library(plotly)
grafica_historica <- ggplot(Datos_TRM, aes(x = Fecha, y = Precio)) +
geom_point(color = "blue") + # Cambiar el color de los puntos
labs(title = "Precio de la TRM a lo largo del tiempo", # Añadir título
x = "Fecha", y = "Precio") + # Añadir etiquetas de los ejes
theme_minimal() + # Usar un tema minimalista
theme(plot.title = element_text(size = 16, face = "bold"), # Ajustar el tamaño y estilo del título
axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar las etiquetas del eje x para mayor legibilidad
# Convertir la gráfica a ggplotly
ggplotly(grafica_historica)
#(Datos_TRM[-1,"Fecha"],diff(log(Datos_TRM[,"Precio"])), type = "l", main = "Serie Historica rendimientos diarios TRM")
# Ajustar los márgenes
par(mar = c(5, 5, 4, 2) + 0.1)
# Crear la gráfica sin trazar los datos aún
plot(x = NA, y = NA,
type = "n",
xlim = c(min(Datos_TRM$Fecha), max(Datos_TRM$Fecha)),
ylim = c(min(diff(log(Datos_TRM$Precio))), max(diff(log(Datos_TRM$Precio)))),
main = "Serie Histórica de Rendimientos Diarios de TRM",
xlab = "Fecha",
ylab = "Rendimiento Diario")
# Ocultar la gráfica original
invisible({
# Graficar los datos
lines(Datos_TRM$Fecha[-1], diff(log(Datos_TRM$Precio)), type = "l", col = "blue")
})
# Agregar una leyenda
legend("topright", legend = "Rendimientos Diarios", col = "blue", lty = 1)
# Ajustar el tamaño de la imagen
options(repr.plot.width=8, repr.plot.height=6)
# Crear el histograma
hist(Datos_TRM[, "Precio"],
breaks = 30, # Número de barras
col = "lightblue", # Color de las barras
main = "Histograma de Precios de TRM", # Título
xlab = "Precio", # Etiqueta del eje x
ylab = "Frecuencia Relativa", # Etiqueta del eje y
freq = FALSE) # Mostrar frecuencias relativas
# Agregar una línea de densidad
lines(density(Datos_TRM[, "Precio"]), col = "red", lwd = 2)
Rtos_TRM<-diff(log(Datos_TRM[,"Precio"]))
# Ajustar el tamaño de la imagen
options(repr.plot.width=8, repr.plot.height=6)
# Crear el histograma
hist(Rtos_TRM,
breaks = 50, # Número de barras
col = "lightblue", # Color de las barras
main = "Histograma de Rendimientos de TRM", # Título
xlab = "Rendimiento Diario", # Etiqueta del eje x
ylab = "Frecuencia Relativa", # Etiqueta del eje y
freq = FALSE, # Mostrar frecuencias relativas
xlim = c(-0.02, 0.02)) # Límites del eje x
# Agregar una línea de densidad
lines(density(Rtos_TRM), col = "red", lwd = 2)
#install.packages("moments")
#install.packages("knitr")
# Cargar las librerías necesarias
library(knitr)
library(moments)
# Calcular estadísticas de la TRM
max_precio <- max(Datos_TRM[,"Precio"])
min_precio <- min(Datos_TRM[,"Precio"])
media_precio <- mean(Datos_TRM[,"Precio"])
desviacion_estandar_precio <- sd(Datos_TRM[,"Precio"])
sesgo_precio <- skewness(Datos_TRM[,"Precio"])
curtosis_precio <- kurtosis(Datos_TRM[,"Precio"])
percentiles_precio <- quantile(Datos_TRM[,"Precio"], c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))
# Calcular estadísticas de los rendimientos de la TRM
Rtos_TRM <- diff(log(Datos_TRM[,"Precio"]))
max_rtos_trm <- max(Rtos_TRM)
min_rtos_trm <- min(Rtos_TRM)
media_rtos_trm <- mean(Rtos_TRM)
desviacion_estandar_rtos_trm <- sd(Rtos_TRM)
sesgo_rtos_trm <- skewness(Rtos_TRM)
curtosis_rtos_trm <- kurtosis(Rtos_TRM)
percentiles_rtos_trm <- quantile(Rtos_TRM, c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))
# Crear una tabla con las estadísticas
tabla_estadisticas <- data.frame(
Estadística = c("Máximo", "Mínimo", "Media", "Desviación Estándar", "Sesgo", "Curtosis"),
TRM = c(max_precio, min_precio, media_precio, desviacion_estandar_precio, sesgo_precio, curtosis_precio),
Rendimientos_TRM = c(max_rtos_trm, min_rtos_trm, media_rtos_trm, desviacion_estandar_rtos_trm, sesgo_rtos_trm, curtosis_rtos_trm)
)
# Mostrar la tabla
kable(tabla_estadisticas, caption = "Estadísticas de la TRM y sus rendimientos")
| Estadística | TRM | Rendimientos_TRM |
|---|---|---|
| Máximo | 5061.210000 | 0.0593067 |
| Mínimo | 1652.410000 | -0.0562194 |
| Media | 2660.823711 | 0.0000837 |
| Desviación Estándar | 762.341794 | 0.0059237 |
| Sesgo | 0.896888 | 0.2697665 |
| Curtosis | 3.041658 | 12.8112712 |
Las estadísticas presentadas ofrecen una visión detallada del comportamiento del precio de la Tasa Representativa del Mercado (TRM) y sus rendimientos durante el período analizado. Estos datos nos permiten comprender mejor la distribución, las tendencias y los posibles sesgos en los datos.
El análisis del máximo y mínimo revela la amplia gama de precios observados durante el período. Esta variabilidad sugiere fluctuaciones significativas en el precio de la TRM a lo largo del tiempo.
Observamos que la media del precio de la TRM está más cerca del precio mínimo que del máximo. Este hallazgo refleja una tendencia interesante: durante el período analizado, la TRM ha experimentado una evolución desde valores más bajos a valores más altos. Este patrón sugiere un aumento constante en la TRM en los últimos años, en contraste con el rango más bajo observado en el período anterior al año 2015.
Un análisis más detallado revela que el precio mínimo de la TRM podría haber sido influenciado por eventos económicos significativos, como la crisis financiera del año 2008. Este año de crisis se asocia comúnmente con una disminución abrupta en los precios de los activos financieros, lo que podría explicar la observación del precio mínimo en ese momento.
Aunque la media del precio de la TRM puede parecer relativamente baja, es importante considerar el contexto histórico y las tendencias actuales del mercado. La baja media puede atribuirse a los valores más bajos predominantes en el pasado, y puede no reflejar completamente la situación actual del mercado.
Por lo anterior, al observar la amplia variabilidad en el precio de la TRM a lo largo del período analizado, se recomienda acortar la ventana de tiempo de análisis. Esto se fundamenta en la presencia de eventos excepcionales, como la crisis financiera del año 2008, que se encuentran muy alejados en el tiempo y podrían distorsionar las estadísticas actuales. Dado que estos eventos pasados pueden tener un impacto significativo en las estadísticas de precios, reducir el período de análisis puede ayudar a centrar el análisis en datos más relevantes y representativos de la situación actual del mercado. De esta manera, se facilita una comprensión más precisa y actualizada de la distribución y tendencias del precio de la TRM, lo que contribuye a una toma de decisiones más informada y precisa.
# Importar paquetes necesarios
#install.packages("magrittr")
#install.packages("dplyr")
#install.packages("stats")
library(magrittr) # Para usar el operador %>%
library(dplyr) # Para manipulación de datos
library(stats) # Para funciones estadísticas
# Definir los datos
valor_activo <- 500000 # Valor del activo en USD
prob_perdida <- 0.03 # Probabilidad de pérdida hasta 3%
prob_ganancia <- 0.05 # Probabilidad de ganancia hasta 5%
# Calcular intervalo de confianza del 95% para el valor en pesos de la importación
confianza_95 <- quantile(Rtos_TRM, c(0.05, 0.95))
intervalo_confianza <- valor_activo * exp(confianza_95)
# Calcular la probabilidad de obtener una pérdida de hasta un 3% en un día
probabilidad_perdida <- sum(Rtos_TRM <= log(1 - prob_perdida))
# Calcular la probabilidad de ganar hasta un 5% en un día
probabilidad_ganancia <- sum(Rtos_TRM >= log(1 + prob_ganancia))
# Imprimir resultados
cat("Intervalo de Confianza del 95% para el valor en pesos de la importación:\n")
## Intervalo de Confianza del 95% para el valor en pesos de la importación:
print(intervalo_confianza)
## 5% 95%
## 495527.5 504803.9
cat("\nProbabilidad de obtener una pérdida de hasta un 3% en un día:\n")
##
## Probabilidad de obtener una pérdida de hasta un 3% en un día:
print(probabilidad_perdida/100)
## [1] 0.12
cat("\nProbabilidad de ganar hasta un 5% en un día:\n")
##
## Probabilidad de ganar hasta un 5% en un día:
print(probabilidad_ganancia/100)
## [1] 0.02
La probabilidada de obtener una perdida de hasta el 3% en un dia es del 12% y la probabilidad de tener una ganacia de hasta un 5% en un dia es del 2%
# Definir el valor de la inversión en COP
valor_inversion <- 10000000
# Calcular el rendimiento diario en COP
rendimientos_cop <- valor_inversion * exp(Rtos_TRM) - valor_inversion
# Calcular la probabilidad de obtener pérdidas entre -500.000 y 500.000 COP en un día
probabilidad_perdidas <- sum(rendimientos_cop >= -500000 & rendimientos_cop <= 500000) / length(rendimientos_cop)
# Imprimir el resultado
cat("La probabilidad de obtener pérdidas entre -500.000 y 500.000 COP en un día es:", probabilidad_perdidas)
## La probabilidad de obtener pérdidas entre -500.000 y 500.000 COP en un día es: 0.9995462
Datos_futuroTRM<- read.csv(file = "TRMH24F.csv", header = TRUE, sep = ";", dec = ".", fill = TRUE)
View(Datos_futuroTRM)
# Parámetros del problema
contratos <- 10
Numero_iteraciones <- 10000
valor_contrato <- 50000
precio_actual <- 4198
deposito_cop <- 150000000
mu <- 0.01/25
sigma <- 0.03/25
ExposicionTotal <- (contratos*valor_contrato*precio_actual)
garantia_inicial<-150000000
mantenimiento <- 130000000
trm_cierre <- Datos_futuroTRM$Precio.Cierre
Rtos_futuro<-diff(log(Datos_futuroTRM[,"Precio.Cierre"]))
futuro_SIMULADA=matrix(,25,Numero_iteraciones)
futuro_Inicial=Datos_futuroTRM[length(Datos_futuroTRM[,"Precio.Cierre"]), "Precio.Cierre"]
futuro_SIMULADA[1,]=futuro_Inicial
for(j in 1:Numero_iteraciones){
for(i in 2:25){
futuro_SIMULADA[i,j]=futuro_Inicial*exp(rnorm(1,mean = mu,sd=sigma))
}
}
# Graficar las series de tiempo
matplot(futuro_SIMULADA, type = "l",
main = "Futuro Simulada", xlab = "Días", ylab = "Valor")
# Calcular el promedio de cada fila
promedio_SM <-data.frame(Promedio = rowMeans(futuro_SIMULADA))
promedio_SM
## Promedio
## 1 4198.410
## 2 4200.157
## 3 4200.116
## 4 4200.071
## 5 4200.011
## 6 4200.138
## 7 4200.099
## 8 4200.115
## 9 4200.122
## 10 4200.094
## 11 4200.058
## 12 4200.131
## 13 4200.106
## 14 4200.051
## 15 4200.071
## 16 4200.155
## 17 4200.031
## 18 4200.196
## 19 4200.100
## 20 4200.119
## 21 4200.157
## 22 4200.129
## 23 4200.119
## 24 4200.095
## 25 4200.122
n <- 25
Diferencia_pf <- -diff(promedio_SM$Promedio)
liquidacion_diaria <- Diferencia_pf*valor_contrato*contratos
# Definir el número de datos
n <- 25
# Crear un vector para almacenar los datos
valores_cuenta_margen <- numeric(25)
# Definir el primer dato
valores_cuenta_margen[1] <- 150000000
# Calcular los datos restantes
for (i in 2:n) {
valores_cuenta_margen[i] <- valores_cuenta_margen[i-1] + liquidacion_diaria
}
print(valores_cuenta_margen)
## [1] 150000000 149126453 148252906 147379359 146505812 145632266 144758719
## [8] 143885172 143011625 142138078 141264531 140390984 139517437 138643890
## [15] 137770343 136896797 136023250 135149703 134276156 133402609 132529062
## [22] 131655515 130781968 129908421 129034874
# Calcular el intervalo de predicción del 90%
intervalo_prediccion_90 <- quantile(valores_cuenta_margen, c(0.05, 0.95))
# Imprimir el intervalo de predicción del 90%
print(intervalo_prediccion_90)
## 5% 95%
## 130083131 148951744
# Calcular la probabilidad de perder más de 10,000,000 COP en un mes
prob_perdida <- mean(valores_cuenta_margen < 150000000-10000000)
# Imprimir la probabilidad
print(prob_perdida)
## [1] 0.52
# Supongamos que tenemos una variable llamada 'valores_cuenta_margen' que contiene los posibles valores de la cuenta de margen para dentro de un mes
# Calcular la probabilidad de ser llamado al margen si el margen mínimo es de 130,000,000 COP
prob_llamado_margen <- mean(valores_cuenta_margen < 130000000)
# Imprimir la probabilidad
print(prob_llamado_margen)
## [1] 0.08
futuro_trm=read.csv("FuturoTRM.csv",sep = ";", dec = ".", fill = TRUE)
datos=read.csv("historicotrm.csv",sep = ";", dec = ".", fill = TRUE)
head(datos)
## Fecha TRM
## 1 01/01/2000 1873.77
## 2 02/01/2000 1873.77
## 3 03/01/2000 1873.77
## 4 04/01/2000 1874.35
## 5 05/01/2000 1895.97
## 6 06/01/2000 1912.69
options(scipen = 999)
class(datos[,"Fecha"])
## [1] "character"
class(futuro_trm[,"Fecha"])
## [1] "character"
Cambiamos la clase de la fecha de “character” a “Date”
datos[,"Fecha"]<-as.Date(datos[,"Fecha"],format = "%d/%m/%Y")
class(datos[,"Fecha"])
## [1] "Date"
futuro_trm[,"Fecha"]<-as.Date(futuro_trm[,"Fecha"],format = "%d/%m/%Y")
class(futuro_trm[,"Fecha"])
## [1] "Date"
Rtos_trm<-diff(log(datos[,"TRM"]))
#install.packages("moments")
#install.packages("knitr")
library(knitr)
library(moments)
library(quantmod)
# Calcular estadísticas de la TRM
max_TRM <- max(datos[,"TRM"])
min_TRM <- min(datos[,"TRM"])
media_TRM <- mean(datos[,"TRM"])
SD_TRM <- sd(datos[,"TRM"])
sesgo_TRM <- skewness(datos[,"TRM"])
curtosis_TRM <- kurtosis(datos[,"TRM"])
percentiles_TRM <- quantile(datos[,"TRM"], c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))
# Calcular rendimientos diarios de la TRM
rtos_trm <- diff(log(datos[,"TRM"]))
media_rtos_trm <- mean(rtos_trm)
SD_rtos_trm <- sd(rtos_trm)
sesgo_rtos_trm <- skewness(rtos_trm)
curtosis_rtos_trm <- kurtosis(rtos_trm)
percentiles_rtos_trm <- quantile(rtos_trm, c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))
# Calcular rendimiento y volatilidad anual de los rendimientos
Rto_anual <- media_rtos_trm * sqrt(250)
Vol_Anual_Rtos <- SD_rtos_trm * sqrt(250)
Rto_anual_trm <- media_TRM * sqrt(250)
Vol_Anual_Rtos_trm <- SD_TRM * sqrt(250)
# Crear tabla de análisis
tabla_Analisis <- data.frame(
Estadística = c("media", "desviación estándar","Rendimiento anual","Volatilidad anual", "sesgo", "curtosis", "mínimo", "máximo", "percentil 1", "percentil 5", "percentil 10", "mediana", "percentil 75", "percentil 90", "percentil 95", "percentil 99"),
TRM = c(media_TRM, SD_TRM, Rto_anual_trm, Vol_Anual_Rtos_trm, sesgo_TRM, curtosis_TRM, min_TRM, max_TRM, percentiles_TRM),
Rendimientos_TRM = c(media_rtos_trm, SD_rtos_trm,Rto_anual, Vol_Anual_Rtos, sesgo_rtos_trm, curtosis_rtos_trm, min(rtos_trm), max(rtos_trm), percentiles_rtos_trm)
)
# Mostrar la tabla
kable(tabla_Analisis, caption = "Estadísticas de la TRM y sus rendimientos")
| Estadística | TRM | Rendimientos_TRM |
|---|---|---|
| media | 2553.4016743 | 0.0001039 |
| desviación estándar | 643.2769974 | 0.0057839 |
| Rendimiento anual | 40372.8253604 | 0.0016426 |
| Volatilidad anual | 10171.1023909 | 0.0914510 |
| sesgo | 0.7478894 | 0.2649411 |
| curtosis | 2.6851841 | 13.8843845 |
| mínimo | 1652.4100000 | -0.0562194 |
| máximo | 4627.4600000 | 0.0593067 |
| percentil 1 | 1761.4850000 | -0.0163474 |
| percentil 5 | 1789.5400000 | -0.0085343 |
| percentil 10 | 1830.7700000 | -0.0054629 |
| mediana | 2345.4700000 | 0.0000000 |
| percentil 75 | 2954.1575000 | 0.0013157 |
| percentil 90 | 3580.3500000 | 0.0057931 |
| percentil 95 | 3830.2500000 | 0.0093273 |
| percentil 99 | 4129.8700000 | 0.0183285 |
# Calcula el tamaño de la muestra
n <- length(rtos_trm)
# Calcula el intervalo de confianza del 95% para la media de los rendimientos
error_estandar <- SD_rtos_trm / sqrt(n)
margen <- 1.96 * error_estandar
intervalo_confianza <- c(media_rtos_trm - margen, media_rtos_trm + margen)
# Muestra el intervalo de confianza
print(intervalo_confianza)
## [1] -0.00002058077 0.00022836004
Utilizaremos el MGB para realizar la siguiente simulación
# Parámetros iniciales
S <- tail(datos[, 2], 1) # Precio de la TRM del 17 de septiembre de 2022
dt <- 1/12 # Intervalo de tiempo (en años) - aquí se asume que se está trabajando con meses
Numero_periodos <- 6 # Número de períodos de tiempo en la simulación
Numero_iteraciones <- 10000 # Número de iteraciones
Sigma <- Vol_Anual_Rtos # Volatilidad histórica de la serie de los rendimientos
mu <- media_rtos_trm # Media histórica de la serie de los rendimientos
# Crear matriz para almacenar los resultados de la simulación
TRM <- matrix(0, nrow = Numero_periodos, ncol = Numero_iteraciones)
TRM[1, ] <- S # Iniciar la simulación con el precio de la TRM del 17 de septiembre de 2022
# Simulación de la TRM
for (j in 1:Numero_iteraciones) {
for (i in 2:Numero_periodos) {
# Generar el cambio en la TRM usando el modelo MBG
Cambio_TRM <- TRM[i - 1, j] * (mu * dt + Sigma * rnorm(1) * sqrt(dt))
# Actualizar el valor de la TRM para el siguiente período
TRM[i, j] <- TRM[i - 1, j] + Cambio_TRM
}
}
# Graficar los resultados con una mejor visualización
matplot(TRM, type = "l", col = adjustcolor("deepskyblue", alpha.f = 0.3), lty = 1,
xlab = "Períodos", ylab = "TRM", main = "Simulación de la TRM")
max_simulacion <- mean(max(TRM))
min_simulacion <- mean(min(TRM))
media_simulacion = mean(TRM)
SD_simulacion <- sd(TRM)
sesgo_simulacion <- mean(skewness(TRM))
curtosis_simulacion <- mean(kurtosis(TRM))
percentiles_simulacion <- quantile(TRM[,1], c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))
# Crear tabla de análisis
tabla_Analisis_simulacion <- data.frame(
Estadística = c("media", "desviación estándar", "sesgo", "curtosis", "mínimo", "máximo"),
simulacion = c(media_simulacion, SD_simulacion, sesgo_simulacion, curtosis_simulacion, min_simulacion, max_simulacion)
)
# Mostrar la tabla
kable(tabla_Analisis_simulacion, caption = "Estadísticas simulacion")
| Estadística | simulacion |
|---|---|
| media | 4436.8343928 |
| desviación estándar | 185.6582343 |
| sesgo | 0.0183784 |
| curtosis | 2.0640185 |
| mínimo | 3525.7335364 |
| máximo | 5458.2993810 |
Podemos concluir que se espera que el TRM futuro tenga una media alrededor de 4436.27, con una desviación estándar de aproximadamente 185.15, lo que indica cierta variabilidad en los posibles valores. La distribución parece tener una leve asimetría hacia la derecha y una distribución leptocúrtica con colas pesadas. Además, el rango esperado de valores se sitúa entre aproximadamente 3555.92 y 5641.05.
# Cargar biblioteca plotly
library(plotly)
# Calcular la densidad de la TRM
densidad_TRM <- density(datos[,"TRM"])
# Crear la gráfica interactiva
plot_ly(x = densidad_TRM$x, y = densidad_TRM$y, type = "scatter", mode = "lines",
name = "Densidad", fill = "tozeroy",
hoverinfo = "x+y", line = list(color = "blue")) %>%
layout(title = "Distribución empírica de la TRM",
xaxis = list(title = "TRM"),
yaxis = list(title = "Densidad"))
# Graficar la distribución empírica y la densidad estimada
hist(TRM, breaks = 30, freq = FALSE, main = "Distribución Empírica y Densidad Estimada de los Precios Futuros",
xlab = "Precio Futuro de la TRM", col = "skyblue", border = "white")
lines(density(TRM), col = "red", lwd = 2)
legend("topright", legend = c("Densidad Estimada"), col = c("red"), lty = 1, lwd = 2)
# Calcular los cuantiles al 2.5% y 97.5%
cuantil_inf <- quantile(TRM, 0.025)
cuantil_sup <- quantile(TRM, 0.975)
# Graficar los resultados
abline(v = cuantil_inf, col = "green", lty = 2)
abline(v = cuantil_sup, col = "green", lty = 2)
text(cuantil_inf, 0.01, sprintf("Cuántil 2.5%%: %.2f", cuantil_inf), pos = 4, col = "green")
text(cuantil_sup, 0.01, sprintf("Cuántil 97.5%%: %.2f", cuantil_sup), pos = 2, col = "green")
Cuotas_USD=c(91738,90992,90246,89500,88754)
Cuotas_COP=TRM[2,]*Cuotas_USD[1]
for(j in 2:length(Cuotas_USD)){
Cuotas_COP=rbind(Cuotas_COP,TRM[j+1,]*Cuotas_USD[j])
}
media_cuotas=vector()
volatilidad_cuotas=vector()
percentil_5_cuotas=vector()
percentil_95_cuotas=vector()
for(l in 1:5){
media_cuotas[l]=mean(TRM[l+1,]*Cuotas_USD[l])
volatilidad_cuotas[l]=sd(TRM[l+1,]*Cuotas_USD[l])
percentil_5_cuotas[l]=quantile(TRM[l+1,]*Cuotas_USD[l],0.05)
percentil_95_cuotas[l]=quantile(TRM[l+1,]*Cuotas_USD[l],0.95)
}
matplot(Cuotas_COP,type = "l", col = "lightcyan3", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas, type = "l", col="blue")
lines(percentil_95_cuotas, type = "l",col = "red")
lines(media_cuotas, type = "l", col = "darkgreen")
print("Volatilidad de cada cuota en millones de COP")
## [1] "Volatilidad de cada cuota en millones de COP"
print(volatilidad_cuotas/1000000)
## [1] 10.67102 15.17737 18.35967 21.05770 23.26830
proporcion_cobertura=0.7
Precio_Entrega=4066
Utilidad_POR_USD=TRM[-1,]-Precio_Entrega
matplot(Utilidad_POR_USD,type="l", col="blue")
Utilidad_total=Utilidad_POR_USD[1,]*Cuotas_USD[1]*0.7
for(j in 2:length(Cuotas_USD)){
Utilidad_total=rbind(Utilidad_total,Utilidad_POR_USD[j,]*Cuotas_USD[j]*0.7)
}
matplot(Utilidad_total,type="l", col = "lightblue")
Cuotas_COP_CON_C=Cuotas_COP-Utilidad_total
media_cuotas_COP_CON_C=vector()
volatilidad_cuotas_COP_CON_C=vector()
percentil_5_cuotas_COP_CON_C=vector()
percentil_95_cuotas_COP_CON_C=vector()
for(l in 1:5){
media_cuotas_COP_CON_C[l]=mean(Cuotas_COP_CON_C[l,])
volatilidad_cuotas_COP_CON_C[l]=sd(Cuotas_COP_CON_C[l,])
percentil_5_cuotas_COP_CON_C[l]=quantile(Cuotas_COP_CON_C[l,],0.05)
percentil_95_cuotas_COP_CON_C[l]=quantile(Cuotas_COP_CON_C[l,],0.95)
}
matplot(Cuotas_COP_CON_C,type = "l", col="lightcyan3", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas_COP_CON_C, type = "l")
lines(percentil_95_cuotas_COP_CON_C, type = "l")
lines(media_cuotas_COP_CON_C, type = "l")
print("Volatilidad de cada cuota con cobertura en millones de COP")
## [1] "Volatilidad de cada cuota con cobertura en millones de COP"
print(volatilidad_cuotas_COP_CON_C/1000000)
## [1] 3.201305 4.553212 5.507900 6.317309 6.980490
Fechas_pago=c("2022-10-17","2022-11-17","2022-12-17","2023-01-17","2023-02-17")
TRM_OBSERVADA=vector()
for(j in 1:5){TRM_OBSERVADA[j]=futuro_trm[which(futuro_trm[,1]==Fechas_pago[j]),2]}
Cuota_Real_COP=TRM_OBSERVADA*Cuotas_USD
matplot(Cuotas_COP,type = "l", col="lightcyan3", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas, type = "l")
lines(percentil_95_cuotas, type = "l")
lines(media_cuotas, type = "l")
lines(Cuota_Real_COP, type = "l",lwd=2)
print(Cuota_Real_COP)
## [1] 425373511 447926318 433404610 420112105 440781653
Utilidad_POR_USD_Observada=TRM_OBSERVADA-Precio_Entrega
Utilidad_total_observada= Cuotas_USD*Utilidad_POR_USD_Observada
Valor_Observado_Cuotas_con_cobertura=Cuota_Real_COP-Utilidad_total_observada
matplot(Cuotas_COP_CON_C,type = "l", col="lightcyan3", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas_COP_CON_C, type = "l")
lines(percentil_95_cuotas_COP_CON_C, type = "l")
lines(media_cuotas_COP_CON_C, type = "l")
lines(Valor_Observado_Cuotas_con_cobertura, type = "l", lwd=2)
# Número de cuotas
cuotas <- 5
# Tasa de interés mensual (AMV)
tasa_interes <- 0.10 / 12
# Calcular el valor presente de los flujos de efectivo en USD
valor_presente_usd <- sum(Cuotas_USD / (1 + tasa_interes)^(1:cuotas))
# Imprimir el valor presente en USD
cat("Valor Presente de los Flujos de Efectivo en USD:", valor_presente_usd, "USD\n")
## Valor Presente de los Flujos de Efectivo en USD: 440225.4 USD
# Tasa de cambio actual
tasa_cambio <- 4066
# Convertir el valor presente de los flujos de efectivo a COP
valor_presente_cop <- valor_presente_usd * tasa_cambio
# Imprimir el valor presente en COP
cat("Valor Presente de los Flujos de Efectivo en COP:", valor_presente_cop, "COP\n")
## Valor Presente de los Flujos de Efectivo en COP: 1789956417 COP
# Cobertura del 70%
cobertura <- 0.70
# Calcular el monto a cubrir con los contratos de futuros TRM__F
monto_cubierto <- valor_presente_cop * cobertura
# Imprimir el monto cubierto
cat("Monto Cubierto con Contratos de Futuros TRM__F:", monto_cubierto, "COP\n")
## Monto Cubierto con Contratos de Futuros TRM__F: 1252969492 COP
# Calcular el margen
margen <- valor_presente_cop - monto_cubierto
# Imprimir el margen
cat("Margen Utilizando Contratos de Futuros TRM__F:", margen, "COP\n")
## Margen Utilizando Contratos de Futuros TRM__F: 536986925 COP
# Calcular la probabilidad de ser llamado al margen si solo se deposita en la cuenta el margen inicial
margen_inicial <- 1790000*0.7*4066 # Se asume que el margen inicial es igual a la utilidad total
prob_llamada_al_margen <- sum(Cuotas_COP_CON_C[,1] < margen_inicial) / Numero_iteraciones
cat("La probabilidad de ser llamado al margen si solo se deposita en la cuenta el margen inicial es:", prob_llamada_al_margen, "\n")
## La probabilidad de ser llamado al margen si solo se deposita en la cuenta el margen inicial es: 0.0005
# Calcular el margen inicial necesario para que la probabilidad de ser llamado al margen antes de cubrir el primer flujo sea menor al 1%
margen_inicial_min <- 0
margen_inicial_max <- max(Cuotas_COP_CON_C[1,]) # Se establece el valor máximo como el valor inicial de la cartera
while (TRUE) {
margen_inicial_actual <- (margen_inicial_min + margen_inicial_max) / 2
prob_llamada_al_margen_actual <- sum(Cuotas_COP_CON_C[,1] < margen_inicial_actual) / Numero_iteraciones
if (prob_llamada_al_margen_actual < 0.01) {
break
} else {
margen_inicial_max <- margen_inicial_actual
}
}
cat("El margen inicial necesario para que la probabilidad de ser llamado al margen antes de cubrir el primer flujo sea menor al 1% es:", margen_inicial_actual, "\n")
## El margen inicial necesario para que la probabilidad de ser llamado al margen antes de cubrir el primer flujo sea menor al 1% es: 198102993
Margen inicial en dolares
margen_inicial_usd=margen_inicial_actual/4066
margen_inicial_usd
## [1] 48721.84
Cargamos la base de datos los historicos de TES de estados unidos y TES de colombia
TESUSA=read.csv("TES USA.csv",sep = ";", dec = ".", fill = TRUE)
TESCOP=read.csv("TES Colombia.csv",sep = ",", dec = ".", fill = TRUE)
head(TESUSA)
## Date X10.anos TREASURY.20.Yr.CMT
## 1 2/01/2019 0.0290 0.0283
## 2 3/01/2019 0.0284 0.0275
## 3 4/01/2019 0.0291 0.0283
## 4 7/01/2019 0.0293 0.0286
## 5 8/01/2019 0.0294 0.0288
## 6 9/01/2019 0.0297 0.0290
head(TESCOP)
## Fecha X10.anos
## 1 2/01/2003 0.1469065
## 2 3/01/2003 0.1447118
## 3 7/01/2003 0.1556985
## 4 8/01/2003 0.1463437
## 5 9/01/2003 0.1554297
## 6 10/01/2003 0.1535416
class(TESCOP[,"Fecha"])
## [1] "character"
class(TESUSA[,"Date"])
## [1] "character"
Cambiamos la clase de la fecha de “character” a “Date”
TESCOP[,"Fecha"]<-as.Date(TESCOP[,"Fecha"],format = "%d/%m/%Y")
class(TESCOP[,"Fecha"])
## [1] "Date"
TESUSA[,"Date"]<-as.Date(TESUSA[,"Date"],format = "%d/%m/%Y")
class(TESUSA[,"Date"])
## [1] "Date"
Inicio_muestra_COP=which(TESCOP[,1]=="2020-09-17")
Fin_muestra_COP=which(TESCOP[,1]=="2022-09-16")
TESCOP_2020_2022=TESCOP[Inicio_muestra_COP :Fin_muestra_COP,]
Inicio_muestra_USA=which(TESUSA[,1]=="2020-09-17")
Fin_muestra_USA=which(TESUSA[,1]=="2022-09-16")
TESUSA_2020_2022=TESUSA[Inicio_muestra_USA :Fin_muestra_USA,]
Realizamos la simulacion con el modelo vasicek para la tasas de Estados unidos y de colombia
# Cargar paquetes necesarios
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
## The following object is masked from 'package:plotly':
##
## select
library(knitr)
# Parámetros del modelo
theta <- 0.08 # Media a largo plazo
r0_us <- tail(TESUSA_2020_2022[, 2], 1) # Tasa inicial para el mercado estadounidense
r0_col <- tail(TESCOP_2020_2022[, 2], 1) # Tasa inicial para el mercado colombiano
sigma_us <- sd(TESUSA_2020_2022[,"X10.anos"]) # Desviación estándar para el mercado estadounidense
sigma_col <- sd(TESCOP_2020_2022[,"X10.anos"]) # Desviación estándar para el mercado colombiano
k <- 0.3 # Velocidad de reversión
# Función para simular tasas con el modelo Vasicek
simular_tasas <- function(r0, sigma, k, theta, periodos, iteraciones) {
tasas_simuladas <- matrix(NA, nrow = iteraciones, ncol = periodos)
for (i in 1:iteraciones) {
tasas_simuladas[i, 1] <- r0
for (t in 2:periodos) {
drift <- k * (theta - tasas_simuladas[i, t - 1])
shock <- mvrnorm(1, mu = 0, Sigma = 1)
tasas_simuladas[i, t] <- tasas_simuladas[i, t - 1] + drift + sigma * shock
}
}
return(tasas_simuladas)
}
# Simulación de tasas para el mercado estadounidense
periodos <- 10
iteraciones <- 10
tasas_us_simuladas <- simular_tasas(r0_us, sigma_us, k, theta, periodos, iteraciones)
# Simulación de tasas para el mercado colombiano
tasas_col_simuladas <- simular_tasas(r0_col, sigma_col, k, theta, periodos, iteraciones)
# Mostrar un resumen de los resultados
cat("### Resumen de la simulación de tasas\n\n")
## ### Resumen de la simulación de tasas
cat("Se simularon", iteraciones, "escenarios para", periodos, "periodos.\n\n")
## Se simularon 10 escenarios para 10 periodos.
# Mostrar solo una muestra de las tasas simuladas en lugar de todas
muestras <- sample(1:iteraciones, 10) # Seleccionar tres muestras aleatorias
cat("### Muestra de tasas simuladas\n\n")
## ### Muestra de tasas simuladas
cat("#### Mercado estadounidense\n\n")
## #### Mercado estadounidense
knitr::kable(tasas_us_simuladas[muestras, ], caption = "Muestra de tasas simuladas para el mercado estadounidense")
| 0.0373 | 0.0466253 | 0.0680088 | 0.0648730 | 0.0643890 | 0.0730079 | 0.0843300 | 0.0799145 | 0.0804143 | 0.0736654 |
| 0.0373 | 0.0387647 | 0.0532827 | 0.0615512 | 0.0600979 | 0.0752985 | 0.0684520 | 0.0719909 | 0.0729909 | 0.0852556 |
| 0.0373 | 0.0505673 | 0.0627371 | 0.0675569 | 0.0890537 | 0.0916259 | 0.0909555 | 0.0935371 | 0.0823374 | 0.0849245 |
| 0.0373 | 0.0455668 | 0.0530723 | 0.0637359 | 0.0714163 | 0.0724192 | 0.0805555 | 0.0768082 | 0.0725090 | 0.0793328 |
| 0.0373 | 0.0448670 | 0.0531762 | 0.0615947 | 0.0670996 | 0.0622020 | 0.0624517 | 0.0674005 | 0.0795783 | 0.0898048 |
| 0.0373 | 0.0459696 | 0.0568819 | 0.0712794 | 0.0686468 | 0.0779503 | 0.0905335 | 0.0787675 | 0.0686652 | 0.0668421 |
| 0.0373 | 0.0612780 | 0.0728351 | 0.0722570 | 0.0688486 | 0.0706730 | 0.0593488 | 0.0670887 | 0.0677966 | 0.0710418 |
| 0.0373 | 0.0465292 | 0.0656432 | 0.0739329 | 0.0676692 | 0.0662933 | 0.0734095 | 0.0872053 | 0.0793660 | 0.0900553 |
| 0.0373 | 0.0564380 | 0.0835432 | 0.0817531 | 0.0873235 | 0.0804690 | 0.0808684 | 0.0783518 | 0.0653642 | 0.0657223 |
| 0.0373 | 0.0561036 | 0.0654386 | 0.0625068 | 0.0705817 | 0.0775877 | 0.0758965 | 0.0719348 | 0.0764354 | 0.0704500 |
cat("\n\n")
cat("#### Mercado colombiano\n\n")
## #### Mercado colombiano
knitr::kable(tasas_col_simuladas[muestras, ], caption = "Muestra de tasas simuladas para el mercado colombiano")
| 0.1258525 | 0.1248638 | 0.0757679 | 0.0567695 | 0.0880809 | 0.0954990 | 0.0820941 | 0.1164881 | 0.0852007 | 0.0996064 |
| 0.1258525 | 0.1080464 | 0.0727210 | 0.0694260 | 0.0675113 | 0.0678931 | 0.0804290 | 0.0750089 | 0.1017048 | 0.1118707 |
| 0.1258525 | 0.1213287 | 0.0998776 | 0.0986567 | 0.1050403 | 0.0891674 | 0.0818071 | 0.0943003 | 0.0871418 | 0.0760047 |
| 0.1258525 | 0.1037560 | 0.0599182 | 0.0260950 | 0.0381932 | 0.0107169 | 0.0299677 | 0.0628832 | 0.0832987 | 0.0683611 |
| 0.1258525 | 0.1470985 | 0.1105860 | 0.0846116 | 0.0847282 | 0.0361222 | 0.0552973 | 0.0405830 | 0.0420691 | 0.0800701 |
| 0.1258525 | 0.1172763 | 0.1268378 | 0.1064488 | 0.0858939 | 0.0776651 | 0.1073986 | 0.1216092 | 0.1253857 | 0.0981961 |
| 0.1258525 | 0.1241394 | 0.1209362 | 0.1084674 | 0.0685234 | 0.1118333 | 0.1038998 | 0.0768468 | 0.0746047 | 0.1211600 |
| 0.1258525 | 0.1074173 | 0.0944208 | 0.0927184 | 0.0660844 | 0.0750965 | 0.0852318 | 0.1071964 | 0.1448808 | 0.1230383 |
| 0.1258525 | 0.1014975 | 0.1078121 | 0.1365603 | 0.1493017 | 0.1287205 | 0.0986217 | 0.0934711 | 0.0654204 | 0.0762470 |
| 0.1258525 | 0.0789835 | 0.0824596 | 0.0924145 | 0.0900669 | 0.0610919 | 0.0781442 | 0.0485311 | 0.0417399 | 0.0388345 |
## function to find ZCB price using Vasicek model
VasicekZCBprice <-
function(r0, k, theta, r0_us, T){
b.vas <- (1/k)*(1-exp(-T*k))
a.vas <- (theta-r0_us^2/(2*k^2))*(T-b.vas)+(r0_us^2)/(4*k)*b.vas^2
return(exp(-a.vas-b.vas*r0))
}
r0 <- seq(0.00, 0.20, 0.05)
n <- length(r0)
yield <- matrix(0, 10, n)
for(i in 1:n){
for(T in 1:10){
yield[T,i] <- -log(VasicekZCBprice(r0[i], k, theta, r0_us, T))/T
}
}
maturity <- seq(1, 10, 1)
matplot(maturity, yield, type="l", col="black", lty=1, main="Yield Curve USA")
abline(h=theta, col="red", lty=2)
## function to find ZCB price using Vasicek model
VasicekZCBprice <-
function(r0, k, theta, r0_col, T){
b.vas <- (1/k)*(1-exp(-T*k))
a.vas <- (theta-r0_col^2/(2*k^2))*(T-b.vas)+(r0_col^2)/(4*k)*b.vas^2
return(exp(-a.vas-b.vas*r0))
}
r0 <- seq(0.00, 0.20, 0.05)
n <- length(r0)
yield <- matrix(0, 10, n)
for(i in 1:n){
for(T in 1:10){
yield[T,i] <- -log(VasicekZCBprice(r0[i], k, theta, r0_col, T))/T
}
}
maturity <- seq(1, 10, 1)
matplot(maturity, yield, type="l", col="black", lty=1, main="Yield Curve COP")
abline(h=theta, col="red", lty=2)
Se planea invertir 10,000 USD, en tres acciones pertenecientes al mismo indice bursatil, por lo que se requiere crear un portafolio optimo de inversión, con un limite de fecha establecida en el 01/06/2023
#install.packages("rlang")
#install.packages("tidyquant")
#install.packages("plotly")
#install.packages("timetk")
#install.packages("htmltools")
#install.packages("roptions")
#install.packages("FinancialMath")
library(rlang)
library(tidyquant) # To download the data
library(plotly) # To create interactive charts
library(timetk) # To manipulate the data series
library(dplyr)
library(tidyr)
library(forcats)
library(quantmod)
library(ggplot2)
library(roptions)
library(FinancialMath)
Para la creación de la cartera, elegiremos las acciones de Landstar System, Inc. (LSTR), Ormat Technologies, Inc. (ORA), Smartsheet Inc. (SMAR), de las cuales descargaremos los datos de precio para el periodo de 5 años (01 de junio de 2018 al 01 de junio de 2023)
tick <- c('SMAR', 'LSTR', 'ORA')
price_data <- tq_get(tick,
from = '2018-06-01',
to = '2023-06-01',
get = 'stock.prices')
Calculamos los rendimientos diarios de estas acciones y visualizamos las primeras filas
log_ret_tidy <- price_data %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = 'daily',
col_rename = 'ret',
type = 'log')
log_ret_xts <- log_ret_tidy %>%
spread(symbol, value = ret) %>%
tk_xts()
head(log_ret_xts)
## LSTR ORA SMAR
## 2018-06-01 0.000000000 0.0000000000 0.000000000
## 2018-06-04 -0.029813818 -0.0066252886 0.010225442
## 2018-06-05 -0.004907335 -0.0048996334 0.086917167
## 2018-06-06 0.005352230 0.0017669491 -0.006932463
## 2018-06-07 0.005766298 -0.0043240650 -0.010489580
## 2018-06-08 0.010120928 0.0009843462 -0.028522473
Calculamos la media diaria de cada acción
mean_ret <- colMeans(log_ret_xts)
print(round(mean_ret, 5))
## LSTR ORA SMAR
## 0.00040 0.00042 0.00050
Calculamos la varianza historica de cada acción
Var_ret <- apply(log_ret_xts, 2, var)
print(round(Var_ret, 5))
## LSTR ORA SMAR
## 0.00034 0.00055 0.00144
Calculamos la desviación estandar de cada acción
Desviación <- apply(log_ret_xts, 2, sd)
print(round(Desviación, 5))
## LSTR ORA SMAR
## 0.01832 0.02346 0.03790
Calculamos la matriz de covarianza anualizada para todas las acciones
cov_mat <- cov(log_ret_xts) * 252
print(round(cov_mat,4))
## LSTR ORA SMAR
## LSTR 0.0846 0.0395 0.0474
## ORA 0.0395 0.1386 0.0502
## SMAR 0.0474 0.0502 0.3619
Calculamos pesos aleatorios para comprobar los pasos de 1 sola cartera, con el fin de calcular la rentabilidad y el riesgo de la cartera
wts <- runif(n = length(tick))
wts <- wts/sum(wts)
print(wts)
## [1] 0.67827175 0.29600927 0.02571897
sum(wts)
## [1] 1
Calculamos los rendimientos anualizados
port_returns <- (sum(wts * mean_ret) + 1)^252 - 1
print(port_returns)
## [1] 0.1087726
Calculamos el riesgo de la cartera
port_risk <- sqrt(t(wts) %*% (cov_mat %*% wts))
print(port_risk)
## [,1]
## [1,] 0.2637452
Para calcular el Ratio Sharpe, asumimos una tasa libre de riesgo 0%
sharpe_ratio <- port_returns/port_risk
print(sharpe_ratio)
## [,1]
## [1,] 0.4124157
Ahora para realizar la optimización ejecutaremos 5000 carteras aleatorias, por lo que crearemos vectores vacios y matrices para almacenar los valores
num_port <- 5000
# Creamos la matrix
all_wts <- matrix(nrow = num_port,
ncol = length(tick))
# Creamos los vectores vacios para el retorno, la desviación estandar y el Ratio Sharpe del portafolio
port_returns <- vector('numeric', length = num_port)
port_risk <- vector('numeric', length = num_port)
sharpe_ratio <- vector('numeric', length = num_port)
Ejecutamos la simulación de las 5000 carteras
for (i in seq_along(port_returns)) {
wts <- runif(length(tick))
wts <- wts/sum(wts)
all_wts[i,] <- wts
port_ret <- sum(wts * mean_ret)
port_ret <- ((port_ret + 1)^252) - 1
port_returns[i] <- port_ret
port_sd <- sqrt(t(wts) %*% (cov_mat %*% wts))
port_risk[i] <- port_sd
sr <- port_ret/port_sd
sharpe_ratio[i] <- sr
}
Creamos una tabla para almacenar todos los valores, donde tendremos las ponderaciones de cada accion, el riesgo, la rentabilidad y el Ratio Sharpe de cada acción.
portfolio_values <- tibble(Return = port_returns,
Risk = port_risk,
SharpeRatio = sharpe_ratio)
all_wts <- tk_tbl(all_wts)
colnames(all_wts) <- colnames(log_ret_xts)
# Combing all the values together
portfolio_values <- tk_tbl(cbind(all_wts, portfolio_values))
head(portfolio_values)
## # A tibble: 6 × 6
## LSTR ORA SMAR Return Risk SharpeRatio
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.292 0.226 0.481 0.122 0.357 0.341
## 2 0.132 0.262 0.606 0.126 0.412 0.305
## 3 0.316 0.403 0.281 0.117 0.299 0.391
## 4 0.583 0.292 0.124 0.112 0.265 0.421
## 5 0.0577 0.486 0.456 0.123 0.368 0.334
## 6 0.258 0.404 0.338 0.119 0.316 0.376
Hallamos la cartera de minima varianza y la cartera con el Ratio Sharpe mas alto
min_var <- portfolio_values[which.min(portfolio_values$Risk),]
head(min_var)
## # A tibble: 1 × 6
## LSTR ORA SMAR Return Risk SharpeRatio
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.626 0.298 0.0764 0.110 0.263 0.420
max_sr <- portfolio_values[which.max(portfolio_values$SharpeRatio),]
head(max_sr)
## # A tibble: 1 × 6
## LSTR ORA SMAR Return Risk SharpeRatio
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.575 0.311 0.114 0.111 0.264 0.421
Graficamos la cartera de varianza minima
p <- min_var %>%
gather(LSTR:SMAR, key = Asset,
value = Weights) %>%
mutate(Asset = as.factor(Asset)) %>%
ggplot(aes(x = fct_reorder(Asset,Weights), y = Weights, fill = Asset)) +
geom_bar(stat = 'identity') +
theme_minimal() +
labs(x = 'Acciones', y = 'Dolares', title = "Cartera de minima varianza") +
scale_y_continuous(labels = scales::percent)
ggplotly(p)
Graficamos la cartera con el Ratio Sharpe mas alto
p <- max_sr %>%
gather(LSTR:SMAR, key = Asset,
value = Weights) %>%
mutate(Asset = as.factor(Asset)) %>%
ggplot(aes(x = fct_reorder(Asset,Weights), y = Weights, fill = Asset)) +
geom_bar(stat = 'identity') +
theme_minimal() +
labs(x = 'Acciones', y = 'Dolares', title = "Cartera con Ratio Sharpe mas alto") +
scale_y_continuous(labels = scales::percent)
ggplotly(p)
Graficamos todas las carteras aleatorias y visualizar la frontera eficiente.
p <- portfolio_values %>%
ggplot(aes(x = Risk, y = Return, color = SharpeRatio)) +
geom_point() +
theme_classic() +
scale_y_continuous(labels = scales::percent) +
scale_x_continuous(labels = scales::percent) +
labs(x = 'Riesgo Anualizado',
y = 'Retornos Anualizados',
title = "Optimización del portafolio y cartera eficiente") +
geom_point(aes(x = Risk,
y = Return), data = min_var, color = 'gray') +
geom_point(aes(x = Risk,
y = Return), data = max_sr, color = 'red') +
annotate('text', x = 0.25, y = 0.162, label = "Tangency Portfolio") +
annotate('text', x = 0.27, y = 0.05, label = "Minimum variance portfolio") +
annotate(geom = 'segment', x = 0.25, xend = 0.2627, y = 0.13,
yend = 0.11, color = 'red', arrow = arrow(type = "open")) +
annotate(geom = 'segment', x = 0.27, xend = 0.2644, y = 0.105,
yend = 0.1116, color = 'gray', arrow = arrow(type = "open"))
ggplotly(p)
Con base a lo expuesto, el Sharpe Ratio óptimo de inversión se sitúa en 0.4214653. Esto se fundamenta en la desviación estándar histórica de las acciones, que asciende a 0.00034 para Landstar System, Inc. (LSTR), 0.00055 para Ormat Technologies, Inc. (ORA) y 0.00144 para Smartsheet Inc. (SMAR) Este análisis revela una dispersión mínima en los retornos de las acciones en torno a la media, la cual también es notablemente baja, registrando valores de 0.00040 para Landstar System, Inc. (LSTR), 0.00042 para Ormat Technologies, Inc. (ORA) y 0.00050 para Smartsheet Inc. (SMAR)
Tomando en cuenta el Sharpe Ratio óptimo de inversión mencionado anteriormente, se concluye que la distribución óptima de los 10,000 USD sería invertir 5,727.076 dólares en Landstar System, Inc. (LSTR), 3,083.227 en Ormat Technologies, Inc. (ORA) y 1,189.697 en Smartsheet Inc. (SMAR)
Opcion de compra riesgo 1
r<- 0.0462
sigma=0.3706
T=1
N= 4
delta_t=T/N
tree = matrix(0, nrow=N+1, ncol=N+1)
build_stock_tree <- function(S, sigma, delta_t, N) {
tree = matrix(0, nrow=N+1, ncol=N+1)
U = exp(sigma*sqrt(delta_t))
D = exp(-sigma*sqrt(delta_t))
for (i in 1:(N+1)) {
for (j in 1:i) {
tree[i, j] = S * U^(j-1) * D^((i-1)-(j-1))
} }
return(tree)
}
riesgo1 <- build_stock_tree(S=37.87, sigma=0.3706, delta_t=1/4, N=4)
riesgo1
## [,1] [,2] [,3] [,4] [,5]
## [1,] 37.87000 0.00000 0.00000 0.00000 0.00000
## [2,] 31.46448 45.57955 0.00000 0.00000 0.00000
## [3,] 26.14242 37.87000 54.85862 0.00000 0.00000
## [4,] 21.72056 31.46448 45.57955 66.02670 0.00000
## [5,] 18.04664 26.14242 37.87000 54.85862 79.46838
k <- 40
intrinsecValue <- riesgo1[5,] - k
intrinsecValue[intrinsecValue<0] <- 0
intrinsecValue
## [1] 0.00000 0.00000 0.00000 14.85862 39.46838
q_prob <- function(r, delta_t, sigma) {
u = exp(sigma*sqrt(delta_t))
d = exp(-sigma*sqrt(delta_t))
return((exp(r*delta_t) - d)/(u-d))
}
value_binomial_option <- function(tree, sigma, delta_t, r, X, type) {
q = q_prob(r, delta_t, sigma)
option_tree = matrix(0, nrow=nrow(tree), ncol=ncol(tree))
if(type == 'put') {
option_tree[nrow(option_tree),] = pmax(X - tree[nrow(tree),], 0)
} else { option_tree[nrow(option_tree),] = pmax(tree[nrow(tree),] - X, 0)
}
for (i in (nrow(tree)-1):1) {
for(j in 1:i) {
option_tree[i,j]=((1-q)*option_tree[i+1,j] + q*option_tree[i+1,j+1])/exp(r*delta_t)
}
}
return(option_tree)
option_tree[i, j] = ((1-q)*option_tree[i+1,j] +q*option_tree[i+1,j+1])/exp(r*delta_t)
}
binomial_option <- function(type, sigma, T, r, X, S, N) {
q <- q_prob(r=r, delta_t=T/N, sigma=sigma)
tree <- build_stock_tree(S=S, sigma=sigma, delta_t=T/N, N=N)
option <- value_binomial_option(tree, sigma=sigma, delta_t=T/N, r=r, X=X, type=type)
return(list(q=q, stock=tree, option=option, price=option[1,1]))
}
Arbol <- binomial_option(type="call", sigma, T, r, X=k, 37.87, 4)
Arbol
## $q
## [1] 0.4849748
##
## $stock
## [,1] [,2] [,3] [,4] [,5]
## [1,] 37.87000 0.00000 0.00000 0.00000 0.00000
## [2,] 31.46448 45.57955 0.00000 0.00000 0.00000
## [3,] 26.14242 37.87000 54.85862 0.00000 0.00000
## [4,] 21.72056 31.46448 45.57955 66.02670 0.00000
## [5,] 18.04664 26.14242 37.87000 54.85862 79.46838
##
## $option
## [,1] [,2] [,3] [,4] [,5]
## [1,] 5.418743 0.000000 0.000000 0.00000 0.00000
## [2,] 1.637146 9.564456 0.000000 0.00000 0.00000
## [3,] 0.000000 3.414951 16.324108 0.00000 0.00000
## [4,] 0.000000 0.000000 7.123303 26.48604 0.00000
## [5,] 0.000000 0.000000 0.000000 14.85862 39.46838
##
## $price
## [1] 5.418743
# Define an array with strike prices between 80 and 120
strikes <- seq(20, 60)
option_price_vary_function <- function(strike) { option = binomial_option(type='call', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 20 20.96602
## 2 21 20.07835
## 3 22 19.19068
## 4 23 18.30301
## 5 24 17.41534
## 6 25 16.52767
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="Call Value", x="Strikes", y="Value") + geom_vline(xintercept = 40, linetype="dotted", color = "red", size=1.5)
sigma=5.6660
k=25
strikes <- seq(5, 45)
option_price_vary_function <- function(strike) { option = binomial_option(type='call', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 5 24.90015
## 2 6 24.88336
## 3 7 24.86656
## 4 8 24.84976
## 5 9 24.83296
## 6 10 24.81617
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="Call Value", x="Strikes", y="Value") + geom_vline(xintercept = 25, linetype="dotted", color = "red", size=1.5)
sigma=1.4854
k=70
strikes <- seq(50, 90)
option_price_vary_function <- function(strike) { option = binomial_option(type='call', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 50 44.16553
## 2 51 43.78292
## 3 52 43.40031
## 4 53 43.01770
## 5 54 42.63510
## 6 55 42.25249
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="Call Value", x="Strikes", y="Value") + geom_vline(xintercept = 70, linetype="dotted", color = "red", size=1.5)
sigma=0.3286
k=40
strikes <- seq(20, 60)
option_price_vary_function <- function(strike) { option = binomial_option(type='put', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 20 0.00000000
## 2 21 0.01674599
## 3 22 0.07923613
## 4 23 0.14172626
## 5 24 0.20421639
## 6 25 0.26670653
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="Put Value", x="Strikes", y="Value") + geom_vline(xintercept = 40, linetype="dotted", color = "red", size=1.5)
sigma=1.6738
k=20
strikes <- seq(0, 40)
option_price_vary_function <- function(strike) { option = binomial_option(type='put', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 0 0.00000000
## 2 1 0.06480615
## 3 2 0.28328316
## 4 3 0.50176018
## 5 4 0.81739404
## 6 5 1.42552980
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="put Value", x="Strikes", y="Value") + geom_vline(xintercept = 20, linetype="dotted", color = "red", size=1.5)
sigma=1.3604
k=55
strikes <- seq(35, 75)
option_price_vary_function <- function(strike) { option = binomial_option(type='put', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 35 13.29068
## 2 36 13.83819
## 3 37 14.38570
## 4 38 14.93322
## 5 39 15.48073
## 6 40 16.02824
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="put Value", x="Strikes", y="Value") + geom_vline(xintercept = 55, linetype="dotted", color = "red", size=1.5)
sigma=0.3152694
k=40
strikes <- seq(20, 60)
option_price_vary_function <- function(strike) { option = binomial_option(type='call', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 20 20.90298
## 2 21 19.94813
## 3 22 19.03642
## 4 23 18.14251
## 5 24 17.24860
## 6 25 16.35470
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="Call Value", x="Strikes", y="Value") + geom_vline(xintercept = 40, linetype="dotted", color = "red", size=1.5)
sigma=0.3152694
k=40
strikes <- seq(20, 60)
option_price_vary_function <- function(strike) { option = binomial_option(type='put', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 20 0.00000000
## 2 21 0.00000000
## 3 22 0.04313678
## 4 23 0.10408137
## 5 24 0.16502595
## 6 25 0.22597054
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="put Value", x="Strikes", y="Value") + geom_vline(xintercept = 40, linetype="dotted", color = "red", size=1.5)
sigma=0.03790
k=40
strikes <- seq(20, 60)
option_price_vary_function <- function(strike) { option = binomial_option(type='call', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 20 20.90298
## 2 21 19.94813
## 3 22 18.99328
## 4 23 18.03843
## 5 24 17.08358
## 6 25 16.12873
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="Call Value", x="Strikes", y="Value") + geom_vline(xintercept = 40, linetype="dotted", color = "red", size=1.5)
sigma=0.03790
k=40
strikes <- seq(20, 60)
option_price_vary_function <- function(strike) { option = binomial_option(type='put', sigma=sigma, T=1, r=r, X=strike, S=k, N=4)
return(option$price)
}
# Use the sapply command to pass each value of the strikes array into the option_price_vary_strike function:
values <- sapply(strikes, option_price_vary_function)
# Create a data frame with the Strikes prices and the option prices (values) from above
data <- as.data.frame(list(strikes=strikes, values=values))
head(data)
## strikes values
## 1 20 0
## 2 21 0
## 3 22 0
## 4 23 0
## 5 24 0
## 6 25 0
ggplot(data=data) + geom_line(aes(x=strikes, y=values)) + labs(title="put Value", x="Strikes", y="Value") + geom_vline(xintercept = 40, linetype="dotted", color = "red", size=1.5)
Para la creación de las coberturas descargaremos los datos de precio desde el 01 de junio de 2023, hasta la fecha, de las acciones de Landstar System, Inc. (LSTR), Ormat Technologies, Inc. (ORA), Smartsheet Inc. (SMAR)
tick <- c('SMAR', 'LSTR', 'ORA')
price_data <- tq_get(tick,
from = '2023-06-01',
to = '2024-04-19',
get = 'stock.prices')
Calculamos los rendimientos diarios de estas acciones y visualizamos las primeras filas
log_ret_tidy <- price_data %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = 'daily',
col_rename = 'ret',
type = 'log')
log_ret_xts <- log_ret_tidy %>%
spread(symbol, value = ret) %>%
tk_xts()
head(log_ret_xts)
## LSTR ORA SMAR
## 2023-06-01 0.000000000 0.0000000000 0.000000000
## 2023-06-02 0.019088162 0.0151207832 -0.009622374
## 2023-06-05 -0.030966280 -0.0001162746 0.013891956
## 2023-06-06 0.030966280 0.0085727936 0.046962545
## 2023-06-07 0.026743156 0.0090716778 -0.052863487
## 2023-06-08 -0.001011513 0.0025116955 -0.192000938
Definimos los rendimientos diarios de cada activo y los porcentajes de inversión
# Crear vector para almacenar el capital actual al final de cada trimestre
capital_inicial <- 10000
porcentajes_inversion <- c(0.5755869, 0.3078440, 0.1165691)
inversion_inicial <- porcentajes_inversion*capital_inicial
LSTR <- as.vector(log_ret_xts$LSTR)
ORA <- as.vector(log_ret_xts$ORA)
SMAR <- as.vector(log_ret_xts$SMAR)
valor_inversion1 <- c()
valor_inversion2 <- c()
valor_inversion3 <- c()
valor <- c()
inversion_inicial <- as.vector(inversion_inicial)
# Simulación
p_y_g <- data.frame(Trimestre = numeric(), Pyg = numeric())
for (i in 1:length(log_ret_xts$LSTR)) {
valor_inversion1[i] <- inversion_inicial[1]*(1 + LSTR[i])
valor_inversion2[i] <- inversion_inicial[2]*(1 + ORA[i])
valor_inversion3[i] <- inversion_inicial[3]*(1 + SMAR[i])
}
trimestre1<- sum(valor_inversion1[63],valor_inversion2[63],valor_inversion3[63]) - sum(inversion_inicial)
trimestre2<- sum(valor_inversion1[126],valor_inversion2[126],valor_inversion3[126]) - sum(inversion_inicial)
trimestre3<- sum(valor_inversion1[189],valor_inversion2[189],valor_inversion3[189]) - sum(inversion_inicial)
trimestre4<- sum(valor_inversion1[222],valor_inversion2[222],valor_inversion3[222]) - sum(inversion_inicial)
# Crear los vectores con los datos
trimestre <- c("trimestre1", "trimestre2", "trimestre3", "trimestre4")
PyG <- c(
sum(valor_inversion1[63], valor_inversion2[63], valor_inversion3[63]) - capital_inicial,
sum(valor_inversion1[126], valor_inversion2[126], valor_inversion3[126]) - capital_inicial,
sum(valor_inversion1[189], valor_inversion2[189], valor_inversion3[189]) - capital_inicial,
sum(valor_inversion1[222], valor_inversion2[222], valor_inversion3[222]) - capital_inicial
)
# Crear la tabla
tabla_trimestres <- data.frame(Trimestre = trimestre, PyG = PyG)
# Imprimir la tabla
print(tabla_trimestres)
## Trimestre PyG
## 1 trimestre1 -10.3786527
## 2 trimestre2 -15.2423049
## 3 trimestre3 -53.0263727
## 4 trimestre4 -0.7479121
Utilizamos la Funicion Bullspread
bullspread.call <- function(S,K1,K2,precio1,precio2){
if(K1>=S) stop("K1 debe ser menor a S.")
if(S>=K2) stop("K2 debe ser mayor a S.")
#larga
callP1 = precio1
#corto
callP2 = precio2
stock=unique(round(seq(0,K1,length.out=6)))
stock=c(stock,round(seq(K1,K2,length.out=4)))
stock=c(stock,round(seq(K2,K2+K1,length.out=6)))
stock=unique(stock)
payoff=rep(0,length(stock))
profit=rep(0,length(stock))
for(i in 1:length(stock)){
if(stock[i]<=K1) payoff[i]=0
if(stock[i]>=K2) payoff[i]=K2-K1
if(stock[i]<K2 & stock[i]>K1) payoff[i]=stock[i]-K1
profit[i]=payoff[i]+(callP2-callP1)
}
data <- data.frame(stock,payoff,profit)
return(data)
}
Posición call Larga & Corta Para el Bull Spread Call
# Posición larga en call
long.callpayoff <- function(s,k,v,r,t){
data.frame("payoff" = pmax(0,s-k), "stock" = s) %>%
mutate("profit" = payoff - v*exp(-r*t))
}
# Posición corta en call
short.callpayoff <- function(s,k,v,r,t){
data.frame("payoff" = pmin(k-s,0),"stock" = s) %>%
mutate("profit" = payoff + v*exp(-r*t))}
Construcción de la Bull Spread Call
bull.spread <- bullspread.call(38.28,35,43.75,0.0462,0.25)
# Extraemos la St
s <- bull.spread$stock
# Call larga
long.call <- long.callpayoff(s,35,1,0,0)
# Call corta
short.call <- short.callpayoff(s,40,1,0,0)
g1 <- ggplot(bull.spread[4:10,]) + geom_line(aes(long.call$stock[4:10],long.call$profit[4:10],color = "blue"),linetype="dashed"
,size=1)
g1 <- g1 + geom_line(aes(short.call$stock[4:10],short.call$profit[4:10], color = "red"),linetype="dashed",size=1)
g1 <- g1 + geom_line(aes(bull.spread$stock[4:10],bull.spread$profit[4:10],color = "green"),size=1)
g1 <- g1 + ggtitle("Estrategia Bull Spreads") + xlab("stock") + ylab("Profit") + theme_bw()
g1 <- g1 + geom_hline(yintercept=0, linetype="dashed",color = "orange", size=1)
g1 <- g1 + scale_color_manual(name = " ",labels = c("Call larga", "Bull Spread", "Call corta"),values = c("blue"="blue","green"="green","red" = "red"))
g1 <- g1 + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),legend.position="bottom")
g1
Necesitamos las siguientes librerias
#install.packages("timetk")
#install.packages("tidyquant")
library(rlang)
library(tidyquant)
library(timetk)
library(quantmod)
library(RQuantLib)
library(dplyr)
library(MASS)
library(knitr)
library(moments)
library(sde)
library(readxl)
Seleccionamos las acciones de Pfizer (PFE) y American Airlines Group Inc. (AAL). Con estas bases de datos que obtuvimos de yahoo finance realizaremos la simulacion
getSymbols(c("AAL", "PFE"), from = Sys.Date() - 1825, to = Sys.Date(), src = "yahoo")
## [1] "AAL" "PFE"
# Calcular los rendimientos diarios
rendimientos_AAL <- dailyReturn(AAL$AAL.Adjusted)
rendimientos_PFE <- dailyReturn(PFE$PFE.Adjusted)
# Calcular la volatilidad histórica (anualizada)
sigma_AAL <- sd(rendimientos_AAL) * sqrt(252)
sigma_PFE <- sd(rendimientos_PFE) * sqrt(252)
# Imprimir la volatilidad histórica
cat("Volatilidad Histórica Anualizada AAL:", sigma_AAL, "\n")
## Volatilidad Histórica Anualizada AAL: 0.6186286
cat("Volatilidad Histórica Anualizada PFE:", sigma_PFE, "\n")
## Volatilidad Histórica Anualizada PFE: 0.2714934
# Función con parámetros iniciales
black_scholes_merton <- function(So, K, r, VencimientoDias, sigma, Stcall, Stput) {
Ano <- 252
#Definir los vencimientos a partir de un número de días establecido
VencimientoDias = seq(from = VencimientoDias, by = 30, length.out = 3)
#Definir un conjunto de Volatilidad a partir de un valor sigma inicial
sigma = seq(from=sigma, by = sigma_AAL, length.out = 3)
## Cálculo del vencimiento
T <- VencimientoDias / Ano
#Definir d1 y d2
d1 <- (log(So/K) + (r + ((sigma^2)/2)) * T) / (sigma * sqrt(T))
d2 <- (log(So/K) + (r - ((sigma^2)/2)) * T) / (sigma * sqrt(T))
# Definir N1 y N2 para la posición Call y Put
Nd1 <- pnorm(d1)
Nd2 <- pnorm(d2)
Nd1P <- pnorm(-d1)
Nd2P <- pnorm(-d2)
#Valoración Call
Call <- So * Nd1 - (K * exp(-r * T) * Nd2)
#Valoración Put
Put <- (K * exp(-r * T) * Nd2P) - So * Nd1P
##Crear vector de varios precios st a partir de un stc dado
St <- seq(from = Stcall, by = 0.5, length.out = 60)
num_filas <- length(St)
num_columnas <- length(sigma)
## Matriz resultados de la Valoración Call
resultadosCall <- matrix(NA, nrow = num_filas, ncol = num_columnas)
##
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (St[i] * pnorm((log(St[i]/K) + (r + ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j]))) -
K * exp(-r * T[j]) * pnorm((log(St[i]/K) + (r - ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))) /
Call[j]
resultadosCall[i, j] <- resultado
}
}
#Definir el nombre de las columnas
colnames(resultadosCall) <- paste("Vto a", VencimientoDias, "días")
##Crear vector de varios precios st a partir de un stp dado
StP <- seq(from = Stput, by = 0.5, length.out = 60)
#matriz de resultados de la valoración Put
resultadosPut <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (K * exp(-r * T[j]) * pnorm(-(log(StP[i]/K) + (r - ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))
- StP[i] * pnorm(-(log(StP[i]/K) + (r + ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))) /
Put[j]
resultadosPut[i, j] <- resultado
}
}
colnames(resultadosPut) <- paste("Vto a", VencimientoDias, "días")
#incluir columna de los valores de St para la posición Call en la matriz de resultados
CallTable <- cbind(St, resultadosCall)
# definir la tabla como un dataframe para evitar error en el tipo de datos
CallTable <- as.data.frame(CallTable)
#Proceso similar al anterior realizado ahora para la posición Put
PutTable <- cbind(StP, resultadosPut)
PutTable <- as.data.frame(PutTable)
# Graficar Call
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosCall, type = "l", col = colores, lty = 1, xlab = "Índice", ylab = "Valor", main = "Gráfico de Líneas de Resultados Call")
legend("topleft", legend = colnames(resultadosCall), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "CallPlot.png")
dev.off()
# Graficar Put
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosPut, type = "l", col = colores, lty = 1, xlab = "Índice", ylab = "Valor", main = "Gráfico de Líneas de Resultados Put")
legend("topright", legend = colnames(resultadosPut), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "PutPlot.png")
dev.off()
return(list(CallTable = CallTable, PutTable = PutTable))
}
# Obtener el último precio ajustado de cada acción
ultimo_ajustado_AAL <- tail(Ad(AAL), 1)
# Llamada a la función con valores específicos y gráficas
resultado <- black_scholes_merton(So = 13.44, K = 13, r = 0.0446, VencimientoDias = 30, sigma = sigma_AAL, Stcall = 1, Stput = 1)
print(resultado$CallTable)
## St Vto a 30 días Vto a 60 días
## 1 1.0 0.00000000000000000000000000000000008827502 0.00000152218
## 2 1.5 0.00000000000000000000000019488050146713580 0.00003435707
## 3 2.0 0.00000000000000000009677794851576443068038 0.00024490935
## 4 2.5 0.00000000000000074686765485316258840475800 0.00097859773
## 5 3.0 0.00000000000050989240340437523872282876702 0.00277995819
## 6 3.5 0.00000000007335761573583578666959970071559 0.00632747859
## 7 4.0 0.00000000362741825438722341684930072780446 0.01234966963
## 8 4.5 0.00000008320416928161885349035653547389302 0.02155247051
## 9 5.0 0.00000107637560673508018212630316101652284 0.03456876242
## 10 5.5 0.00000897560071640100629476038962550887845 0.05192971917
## 11 6.0 0.00005304092700089676684985229293545216933 0.07405341155
## 12 6.5 0.00023808397177442304688300966919456413962 0.10124535714
## 13 7.0 0.00085512999810238073811197168083708675113 0.13370645427
## 14 7.5 0.00255775637144231527894677746814977581380 0.17154487547
## 15 8.0 0.00657293806094124202776818322035978781059 0.21478956213
## 16 8.5 0.01487605789328545063954223337532312143594 0.26340380981
## 17 9.0 0.03024828286906691351965115188704658066854 0.31729805185
## 18 9.5 0.05616314104137813678629953528798068873584 0.37634137204
## 19 10.0 0.09650470369116546931476108284186921082437 0.44037155420
## 20 10.5 0.15517460514186351416832110317045589908957 0.50920364716
## 21 11.0 0.23567568526816334850693124280951451510191 0.58263712358
## 22 11.5 0.34075839818086167687383181146287824958563 0.66046176219
## 23 12.0 0.47218953241535749354440554270695429295301 0.74246240539
## 24 12.5 0.63066583392182784528756656072800979018211 0.82842274652
## 25 13.0 0.81586150495285836292680414771893993020058 0.91812829443
## 26 13.5 1.02657637941888468802176248573232442140579 1.01136864944
## 27 14.0 1.26094275773485775538063080603023990988731 1.10793920980
## 28 14.5 1.51665098630009476110558352957013994455338 1.20764241196
## 29 15.0 1.79116259887055773170061456767143681645393 1.31028859290
## 30 15.5 2.08189100915884495179852820001542568206787 1.41569654895
## 31 16.0 2.38634030078770820182398892939090728759766 1.52369385361
## 32 16.5 2.70220092688789748081035213544964790344238 1.63411698578
## 33 17.0 3.02740658468229861810527836496476083993912 1.74681131100
## 34 17.5 3.36015939835961097159611199458595365285873 1.86163095049
## 35 18.0 3.69893141968623018200901242380496114492416 1.97843856605
## 36 18.5 4.04245001715588880841778518515639007091522 2.09710508380
## 37 19.0 4.38967356799840580094951292267069220542908 2.21750937477
## 38 19.5 4.73976244115243616761290468275547027587891 2.33953790712
## 39 20.0 5.09204885543740104481003072578459978103638 2.46308438126
## 40 20.5 5.44600797652506685153639409691095352172852 2.58804935699
## 41 21.0 5.80123164434043836479304445674642920494080 2.71433987958
## 42 21.5 6.15740540362492971837582445004954934120178 2.84186911000
## 43 22.0 6.51428901555660644362433231435716152191162 2.97055596340
## 44 22.5 6.87170031452705565300220769131556153297424 3.10032475865
## 45 23.0 7.22950209653796527220492862397804856300354 3.23110488111
## 46 23.5 7.58759164400582886145230077090673148632050 3.36283045983
## 47 24.0 7.94589247329422931898079696111381053924561 3.49544006023
## 48 24.5 8.30434791116042880787517788121476769447327 3.62887639258
## 49 25.0 8.66291614673590437689654208952561020851135 3.76308603637
## 50 25.5 9.02156645469757378918984613846987485885620 3.89801918057
## 51 26.0 9.38027633539555694142109132371842861175537 4.03362937928
## 52 26.5 9.73902936454351397799200640292838215827942 4.16987332248
## 53 27.0 10.09781358648275251255199691513553261756897 4.30671062119
## 54 27.5 10.45662032023696674798429739894345402717590 4.44410360659
## 55 28.0 10.81544327665703342233882722212001681327820 4.58201714226
## 56 28.5 11.17427790844644164280907716602087020874023 4.72041844896
## 57 29.0 11.53312093349493849814280110877007246017456 4.85927694134
## 58 29.5 11.89196998651681447256578394444659352302551 4.99856407565
## 59 30.0 12.25082336523978021602943044854328036308289 5.13825320811
## 60 30.5 12.60967984598632796178208081983029842376709 5.27831946301
## Vto a 90 días
## 1 0.002203194
## 2 0.007484289
## 3 0.016694648
## 4 0.029999574
## 5 0.047334050
## 6 0.068525219
## 7 0.093353926
## 8 0.121586215
## 9 0.152989520
## 10 0.187340807
## 11 0.224430379
## 12 0.264063335
## 13 0.306059734
## 14 0.350254094
## 15 0.396494541
## 16 0.444641822
## 17 0.494568268
## 18 0.546156792
## 19 0.599299931
## 20 0.653898960
## 21 0.709863087
## 22 0.767108705
## 23 0.825558735
## 24 0.885142018
## 25 0.945792776
## 26 1.007450124
## 27 1.070057635
## 28 1.133562944
## 29 1.197917398
## 30 1.263075730
## 31 1.328995782
## 32 1.395638238
## 33 1.462966394
## 34 1.530945945
## 35 1.599544795
## 36 1.668732882
## 37 1.738482021
## 38 1.808765761
## 39 1.879559254
## 40 1.950839137
## 41 2.022583420
## 42 2.094771393
## 43 2.167383530
## 44 2.240401408
## 45 2.313807631
## 46 2.387585757
## 47 2.461720240
## 48 2.536196364
## 49 2.611000191
## 50 2.686118512
## 51 2.761538800
## 52 2.837249163
## 53 2.913238311
## 54 2.989495513
## 55 3.066010567
## 56 3.142773768
## 57 3.219775873
## 58 3.297008081
## 59 3.374462005
## 60 3.452129645
print(resultado$PutTable)
## StP Vto a 30 días Vto a 60 días Vto a 90 días
## 1 1.0 13.49002043913 4.1779178 2.2698256
## 2 1.5 12.92469311776 4.0018624 2.1796436
## 3 2.0 12.35936579640 3.8260208 2.0938784
## 4 2.5 11.79403847503 3.6508088 2.0127158
## 5 3.0 11.22871115366 3.4768815 1.9360827
## 6 3.5 10.66338383240 3.3050554 1.8637848
## 7 4.0 10.09805651663 3.1362072 1.7955758
## 8 4.5 9.53272932062 2.9711863 1.7311927
## 9 5.0 8.96740356382 2.8107542 1.6703740
## 10 5.5 8.40208868629 2.6555502 1.6128691
## 11 6.0 7.83683078205 2.5060773 1.5584422
## 12 6.5 7.27179496331 2.3627031 1.5068743
## 13 7.0 6.70743968893 2.2256695 1.4579631
## 14 7.5 6.14479455459 2.0951065 1.4115225
## 15 8.0 5.58579244255 1.9710490 1.3673819
## 16 8.5 5.03354521946 1.8534529 1.3253848
## 17 9.0 4.49243412252 1.7422102 1.2853875
## 18 9.5 3.96793108147 1.6371637 1.2472586
## 19 10.0 3.46615476437 1.5381179 1.2108771
## 20 10.5 2.99325150673 1.4448504 1.1761322
## 21 11.0 2.55473941389 1.3571198 1.1429218
## 22 11.5 2.15495134034 1.2746733 1.1111518
## 23 12.0 1.79667054925 1.1972518 1.0807357
## 24 12.5 1.48099464076 1.1245952 1.0515935
## 25 13.0 1.20741037809 1.0564452 1.0236511
## 26 13.5 0.97402711160 0.9925488 0.9968403
## 27 14.0 0.77790261061 0.9326597 0.9710975
## 28 14.5 0.61539842392 0.8765402 0.9463639
## 29 15.0 0.48251564649 0.8239620 0.9225848
## 30 15.5 0.37517956863 0.7747072 0.8997094
## 31 16.0 0.28945831506 0.7285681 0.8776901
## 32 16.5 0.22171360276 0.6853482 0.8564830
## 33 17.0 0.16869033679 0.6448612 0.8360465
## 34 17.5 0.12755628144 0.6069317 0.8163423
## 35 18.0 0.09590442426 0.5713943 0.7973343
## 36 18.5 0.07172995914 0.5380938 0.7789886
## 37 19.0 0.05339199346 0.5068844 0.7612735
## 38 19.5 0.03956783683 0.4776296 0.7441594
## 39 20.0 0.02920551798 0.4502012 0.7276183
## 40 20.5 0.02147825316 0.4244799 0.7116239
## 41 21.0 0.01574305828 0.4003535 0.6961515
## 42 21.5 0.01150456465 0.3777178 0.6811779
## 43 22.0 0.00838431844 0.3564750 0.6666811
## 44 22.5 0.00609534993 0.3365342 0.6526403
## 45 23.0 0.00442151846 0.3178103 0.6390361
## 46 23.5 0.00320101062 0.3002241 0.6258500
## 47 24.0 0.00231333996 0.2837017 0.6130644
## 48 24.5 0.00166922780 0.2681741 0.6006628
## 49 25.0 0.00120280850 0.2535770 0.5886296
## 50 25.5 0.00086567974 0.2398506 0.5769499
## 51 26.0 0.00062239731 0.2269389 0.5656097
## 52 26.5 0.00044708763 0.2147897 0.5545955
## 53 27.0 0.00032091668 0.2033546 0.5438947
## 54 27.5 0.00023020913 0.1925881 0.5334952
## 55 28.0 0.00016505751 0.1824481 0.5233855
## 56 28.5 0.00011829838 0.1728950 0.5135548
## 57 29.0 0.00008476134 0.1638920 0.5039926
## 58 29.5 0.00006072031 0.1554048 0.4946891
## 59 30.0 0.00004349366 0.1474014 0.4856348
## 60 30.5 0.00003115370 0.1398517 0.4768208
# Función con parámetros iniciales
black_scholes_merton <- function(So, K, r, VencimientoDias, sigma, Stcall, Stput) {
Ano <- 252
#Definir los vencimientos a partir de un número de días establecido
VencimientoDias = seq(from = VencimientoDias, by = 30, length.out = 3)
#Definir un conjunto de Volatilidad a partir de un valor sigma inicial
sigma = seq(from=sigma, by = sigma_PFE, length.out = 3)
## Cálculo del vencimiento
T <- VencimientoDias / Ano
#Definir d1 y d2
d1 <- (log(So/K) + (r + ((sigma^2)/2)) * T) / (sigma * sqrt(T))
d2 <- (log(So/K) + (r - ((sigma^2)/2)) * T) / (sigma * sqrt(T))
# Definir N1 y N2 para la posición Call y Put
Nd1 <- pnorm(d1)
Nd2 <- pnorm(d2)
Nd1P <- pnorm(-d1)
Nd2P <- pnorm(-d2)
#Valoración Call
Call <- So * Nd1 - (K * exp(-r * T) * Nd2)
#Valoración Put
Put <- (K * exp(-r * T) * Nd2P) - So * Nd1P
##Crear vector de varios precios st a partir de un stc dado
St <- seq(from = Stcall, by = 0.5, length.out = 60)
num_filas <- length(St)
num_columnas <- length(sigma)
## Matriz resultados de la Valoración Call
resultadosCall <- matrix(NA, nrow = num_filas, ncol = num_columnas)
##
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (St[i] * pnorm((log(St[i]/K) + (r + ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j]))) -
K * exp(-r * T[j]) * pnorm((log(St[i]/K) + (r - ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))) /
Call[j]
resultadosCall[i, j] <- resultado
}
}
#Definir el nombre de las columnas
colnames(resultadosCall) <- paste("Vto a", VencimientoDias, "días")
##Crear vector de varios precios st a partir de un stp dado
StP <- seq(from = Stput, by = 0.5, length.out = 60)
#matriz de resultados de la valoración Put
resultadosPut <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (K * exp(-r * T[j]) * pnorm(-(log(StP[i]/K) + (r - ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))
- StP[i] * pnorm(-(log(StP[i]/K) + (r + ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))) /
Put[j]
resultadosPut[i, j] <- resultado
}
}
colnames(resultadosPut) <- paste("Vto a", VencimientoDias, "días")
#incluir columna de los valores de St para la posición Call en la matriz de resultados
CallTable <- cbind(St, resultadosCall)
# definir la tabla como un dataframe para evitar error en el tipo de datos
CallTable <- as.data.frame(CallTable)
#Proceso similar al anterior realizado ahora para la posición Put
PutTable <- cbind(StP, resultadosPut)
PutTable <- as.data.frame(PutTable)
# Graficar Call
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosCall, type = "l", col = colores, lty = 1, xlab = "Índice", ylab = "Valor", main = "Gráfico de Líneas de Resultados Call")
legend("topleft", legend = colnames(resultadosCall), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "CallPlot.png")
dev.off()
# Graficar Put
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosPut, type = "l", col = colores, lty = 1, xlab = "Índice", ylab = "Valor", main = "Gráfico de Líneas de Resultados Put")
legend("topright", legend = colnames(resultadosPut), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "PutPlot.png")
dev.off()
return(list(CallTable = CallTable, PutTable = PutTable))
}
# Llamada a la función con valores específicos y gráficas
resultado <- black_scholes_merton(So = 28.3, K = 28, r = 0.0446, VencimientoDias = 30, sigma = sigma_PFE, Stcall = 13, Stput = 13)
print(resultado$CallTable)
## St Vto a 30 días Vto a 60 días Vto a 90 días
## 1 13.0 0.00000000000000003429656 0.0009653013 0.04158251
## 2 13.5 0.00000000000000094113214 0.0015839770 0.05059900
## 3 14.0 0.00000000000001972364887 0.0025106909 0.06086521
## 4 14.5 0.00000000000032350533632 0.0038562027 0.07244810
## 5 15.0 0.00000000000424354556093 0.0057551283 0.08540836
## 6 15.5 0.00000000004538124939637 0.0083666204 0.09980024
## 7 16.0 0.00000000040250284304689 0.0118740823 0.11567136
## 8 16.5 0.00000000300657204686785 0.0164838740 0.13306278
## 9 17.0 0.00000001917667464165211 0.0224230403 0.15200907
## 10 17.5 0.00000010574839041914474 0.0299361488 0.17253844
## 11 18.0 0.00000050986815060505709 0.0392813814 0.19467300
## 12 18.5 0.00000217149616268171301 0.0507260576 0.21842901
## 13 19.0 0.00000824543798860459605 0.0645417905 0.24381718
## 14 19.5 0.00002815193700882047102 0.0809994825 0.27084304
## 15 20.0 0.00008710033307374678174 0.1003643627 0.29950724
## 16 20.5 0.00024595264558212494169 0.1228912467 0.32980592
## 17 21.0 0.00063806284059441178980 0.1488201761 0.36173110
## 18 21.5 0.00153002943088202669752 0.1783725626 0.39527100
## 19 22.0 0.00341045472234106005968 0.2117479270 0.43041043
## 20 22.5 0.00710364530952895673055 0.2491212904 0.46713110
## 21 23.0 0.01389420912677228822640 0.2906412443 0.50541196
## 22 23.5 0.02563656984595266349891 0.3364286939 0.54522955
## 23 24.0 0.04481529962953297030470 0.3865762504 0.58655824
## 24 24.5 0.07452273086068102181390 0.4411482233 0.62937055
## 25 25.0 0.11833206857278638635123 0.5001811546 0.67363742
## 26 25.5 0.18006560232522594855453 0.5636848223 0.71932845
## 27 26.0 0.26348292821172630828741 0.6316436388 0.76641212
## 28 26.5 0.37193553519900901527251 0.7040183665 0.81485601
## 29 27.0 0.50804479991631967816801 0.7807480749 0.86462700
## 30 27.5 0.67345705823884227658738 0.8617522673 0.91569145
## 31 28.0 0.86871332051194150025708 0.9469331096 0.96801535
## 32 28.5 1.09324753332368507230399 1.0361777041 1.02156449
## 33 29.0 1.34550289279181067847446 1.1293603543 1.07630456
## 34 29.5 1.62313665185406863500361 1.2263447787 1.13220131
## 35 30.0 1.92327372632819937336990 1.3269862361 1.18922063
## 36 30.5 2.24276875610641379665822 1.4311335363 1.24732865
## 37 31.0 2.57844319604841087922864 1.5386309122 1.30649185
## 38 31.5 2.92727523758171859213917 1.6493197416 1.36667707
## 39 32.0 3.28653252008822116536635 1.7630401070 1.42785167
## 40 32.5 3.65384806995661604034353 1.8796321907 1.48998349
## 41 33.0 4.02724725337798794555511 1.9989375050 1.55304096
## 42 33.5 4.40513741237152522955967 2.1207999596 1.61699312
## 43 34.0 4.78627274480078757079582 2.2450667744 1.68180966
## 44 34.5 5.16970577365296257710270 2.3715892440 1.74746094
## 45 35.0 5.55473438460174318009877 2.5002233638 1.81391802
## 46 35.5 5.94085069657252251573709 2.6308303299 1.88115266
## 47 36.0 6.32769551796254781095286 2.7632769211 1.94913737
## 48 36.5 6.71502012585178409409536 2.8974357781 2.01784537
## 49 37.0 7.10265567751096948967415 3.0331855877 2.08725064
## 50 37.5 7.49048968021023409136205 3.1704111860 2.15732790
## 51 38.0 7.87844849689628201616642 3.3090035895 2.22805260
## 52 38.5 8.26648472358936103887572 3.4488599652 2.29940094
## 53 39.0 8.65456832279260090956541 3.5898835483 2.37134985
## 54 39.5 9.04268054460862025223378 3.7319835168 2.44387698
## 55 40.0 9.43080985049493669691856 3.8750748310 2.51696071
## 56 40.5 9.81894923512535733323148 4.0190780440 2.59058012
## 57 41.0 10.20709449975333704685454 4.1639190908 2.66471498
## 58 41.5 10.59524315841138530913668 4.3095290609 2.73934573
## 59 42.0 10.98339375627695169157505 4.4558439600 2.81445350
## 60 42.5 11.37154545136781358394273 4.6028044636 2.89002007
print(resultado$PutTable)
## StP Vto a 30 días Vto a 60 días Vto a 90 días
## 1 13.0 17.683176237275 5.52335701 2.9552723
## 2 13.5 17.087852344379 5.33633916 2.8657627
## 3 14.0 16.492528451482 5.14969826 2.7776881
## 4 14.5 15.897204558586 4.96356987 2.6911254
## 5 15.0 15.301880665695 4.77811871 2.6061444
## 6 15.5 14.706556772862 4.59353954 2.5228072
## 7 16.0 14.111232880513 4.41005680 2.4411687
## 8 16.5 13.515908991610 4.22792303 2.3612759
## 9 17.0 12.920585123514 4.04741606 2.2831685
## 10 17.5 12.325261363396 3.86883519 2.2068790
## 11 18.0 11.729938090312 3.69249636 2.1324327
## 12 18.5 11.134616745912 3.51872669 2.0598483
## 13 19.0 10.539302168832 3.34785857 1.9891381
## 14 19.5 9.944008807227 3.18022352 1.9203084
## 15 20.0 9.348775325542 3.01614611 1.8533601
## 16 20.5 8.753695069978 2.85593816 1.7882885
## 17 21.0 8.158972570167 2.69989342 1.7250847
## 18 21.5 7.565016717546 2.54828284 1.6637351
## 19 22.0 6.972576898518 2.40135058 1.6042221
## 20 22.5 6.382917380864 2.25931083 1.5465249
## 21 23.0 5.798008412585 2.12234541 1.4906193
## 22 23.5 5.220694187960 1.99060229 1.4364782
## 23 24.0 4.654785381989 1.86419480 1.3840723
## 24 24.5 4.105024812726 1.74320163 1.3333701
## 25 25.0 3.576892829383 1.62766750 1.2843381
## 26 25.5 3.076251810799 1.51760438 1.2369415
## 27 26.0 2.608867980658 1.41299320 1.1911440
## 28 26.5 2.179881634507 1.31378593 1.1469085
## 29 27.0 1.793313269128 1.21990802 1.1041968
## 30 27.5 1.451687927287 1.13126096 1.0629704
## 31 28.0 1.155835375424 1.04772502 1.0231903
## 32 28.5 0.904887437674 0.96916204 0.9848170
## 33 29.0 0.696456389613 0.89541821 0.9478113
## 34 29.5 0.526949078344 0.82632676 0.9121338
## 35 30.0 0.391955886959 0.76171056 0.8777453
## 36 30.5 0.286652666933 0.70138458 0.8446070
## 37 31.0 0.206164372700 0.64515822 0.8126803
## 38 31.5 0.145856351035 0.59283737 0.7819272
## 39 32.0 0.101537885138 0.54422632 0.7523102
## 40 32.5 0.069578665011 0.49912950 0.7237924
## 41 33.0 0.046950125893 0.45735296 0.6963375
## 42 33.5 0.031209552680 0.41870569 0.6699099
## 43 34.0 0.020446215174 0.38300072 0.6444749
## 44 34.5 0.013206934828 0.35005609 0.6199985
## 45 35.0 0.008414854406 0.31969556 0.5964473
## 46 35.5 0.005291018986 0.29174928 0.5737890
## 47 36.0 0.003284523877 0.26605421 0.5519919
## 48 36.5 0.002013894059 0.24245451 0.5310255
## 49 37.0 0.001220169548 0.22080172 0.5108597
## 50 37.5 0.000730816321 0.20095491 0.4914655
## 51 38.0 0.000432894659 0.18278071 0.4728148
## 52 38.5 0.000253699426 0.16615328 0.4548802
## 53 39.0 0.000147161064 0.15095420 0.4376352
## 54 39.5 0.000084522202 0.13707234 0.4210542
## 55 40.0 0.000048085775 0.12440363 0.4051124
## 56 40.5 0.000027107469 0.11285084 0.3897856
## 57 41.0 0.000015147520 0.10232334 0.3750508
## 58 41.5 0.000008393113 0.09273680 0.3608853
## 59 42.0 0.000004612937 0.08401290 0.3472676
## 60 42.5 0.000002515614 0.07607906 0.3341768
BScall <- function(t=0,T,S,K,r,q=0,sigma,isPut=0) {
# t and T are measured in years; all parameters are annualized
# q is the continuous dividend yield
d1 <- (log(S/K)+(r-q+sigma^2/2)*(T-t))/(sigma*sqrt(T-t))
d2 <- d1-sigma*sqrt(T-t)
binary <- pnorm(-d2)*exp(-r*T)
# Call Delta at t
Delta <- exp(-q*(T-t))*pnorm(d1)
Gamma <- exp(-q*(T-t))*exp(-d1^2/2)/sqrt(2*pi)/S/sigma/sqrt(T-t)
Vega <- S*exp(-q*(T-t))/sqrt(2*pi)*exp(-d1^2/2)*sqrt(T-t)
Theta <- -S*exp(-q*(T-t))*sigma/sqrt(T-t)/2*dnorm(d1) - r*K*exp(-r*(T-t))*pnorm(d2) +
q*S*exp(-q*(T-t))*pnorm(d1)
Rho <- (T-t)*K*exp(-r*(T-t))*pnorm(d2)
# Black-Scholes formula for Calls
BSprice <- -K*exp(-r*(T-t))*pnorm(d2)+S*Delta
if (isPut==1) {
Delta <- -exp(-q*(T-t))*pnorm(-d1)
BSprice <- S*Delta+K*exp(-r*(T-t))*pnorm(-d2)
Theta <- -S*exp(-q*(T-t))*sigma/sqrt(T-t)/2*dnorm(d1) + r*K*exp(-r*(T-t))*pnorm(-d2) -
q*S*exp(-q*(T-t))*pnorm(-d1)
Rho <- -(T-t)*K*exp(-r*(T-t))*pnorm(-d2)
}
Bank <- BSprice-Delta*S
return (list(Delta=Delta,Gamma=Gamma,Theta=Theta,Vega=Vega,Rho=Rho,Price=BSprice,d1=d1,d2=d2,B=Bank))
}
# con Precio strike (K) = 15
Call1AAL= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=15,r=0.0446,q=0,sigma=sigma_AAL,isPut=0)
# con Precio strike (K) = 12
Call2AAL= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=12,r=0.0446,q=0,sigma=sigma_AAL,isPut=0)
# con Precio strike (K) = 10
Call3AAl= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=10,r=0.0446,q=0,sigma=sigma_AAL,isPut=0)
resultados <- data.frame(
Metric = names(Call1AAL),
Call1 = as.numeric(Call1AAL),
Call2 = as.numeric(Call2AAL),
Call3 = as.numeric(Call3AAl)
)
colnames(resultados) <- c("Griegas Call AAL", "Strike_15", "Strike_12", "Strike_10")
# Mostrar la tabla
resultados
## Griegas Call AAL Strike_15 Strike_12 Strike_10
## 1 Delta 0.25197029 0.52117835 0.73974162
## 2 Gamma 0.08970738 0.11199527 0.09123444
## 3 Theta -2.37873311 -3.04528914 -2.58688476
## 4 Vega 1.83482163 2.29068505 1.86605520
## 5 Rho 0.60867022 1.18342203 1.55882546
## 6 Price 0.46297747 1.25986290 2.27172681
## 7 d1 -0.66830240 0.05311121 0.64254904
## 8 d2 -0.97761671 -0.25620310 0.33323473
## 9 B -2.43468088 -4.73368811 -6.23530184
# con Precio strike (K) = 15
Put1AAL= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=15,r=0.0446,q=0,sigma=sigma_AAL,isPut=1)
# con Precio strike (K) = 12
Put2AAL= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=12,r=0.0446,q=0,sigma=sigma_AAL,isPut=1)
# con Precio strike (K) = 10
Put3AAl= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=10,r=0.0446,q=0,sigma=sigma_AAL,isPut=1)
resultados <- data.frame(
Metric = names(Put1AAL),
Call1 = as.numeric(Put1AAL),
Call2 = as.numeric(Put2AAL),
Call3 = as.numeric(Put3AAl)
)
colnames(resultados) <- c("Griegas Put AAL", "Strike_15", "Strike_12", "Strike_10")
# Mostrar la tabla
resultados
## Griegas Put AAL Strike_15 Strike_12 Strike_10
## 1 Delta -0.74802971 -0.47882165 -0.26025838
## 2 Gamma 0.08970738 0.11199527 0.09123444
## 3 Theta -1.71715103 -2.51602348 -2.14583004
## 4 Vega 1.83482163 2.29068505 1.86605520
## 5 Rho -3.09974952 -1.78331376 -0.91345437
## 6 Price 3.79665643 1.62680607 0.66084612
## 7 d1 -0.66830240 0.05311121 0.64254904
## 8 d2 -0.97761671 -0.25620310 0.33323473
## 9 B 12.39899808 7.13325506 3.65381747
# con Precio strike (K) = 30
Call1PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=30,r=0.0446,q=0,sigma=sigma_PFE,isPut=0)
# con Precio strike (K) = 27
Call2PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=27,r=0.0446,q=0,sigma=sigma_PFE,isPut=0)
# con Precio strike (K) = 25
Call3PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=25,r=0.0446,q=0,sigma=sigma_PFE,isPut=0)
resultados <- data.frame(
Metric = names(Call1PFE),
Call1 = as.numeric(Call1PFE),
Call2 = as.numeric(Call2PFE),
Call3 = as.numeric(Call3PFE)
)
colnames(resultados) <- c("Griegas Call PFE", "Strike_30", "Strike_27", "Strike_25")
# Mostrar la tabla
resultados
## Griegas Call PFE Strike_30 Strike_27 Strike_25
## 1 Delta 0.4259841 0.72225298 0.87626031
## 2 Gamma 0.1007727 0.08618497 0.05253819
## 3 Theta -3.5449145 -3.41282928 -2.52361128
## 4 Vega 5.6181672 4.80488719 2.92905013
## 5 Rho 2.7708727 4.50582277 5.23080499
## 6 Price 1.1252138 2.67647915 4.19040030
## 7 d1 -0.1866077 0.58954752 1.15649342
## 8 d2 -0.3223544 0.45380081 1.02074672
## 9 B -11.0834909 -18.02329106 -20.92321994
# con Precio strike (K) = 30
Put1PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=30,r=0.0446,q=0,sigma=sigma_PFE,isPut=1)
# con Precio strike (K) = 27
Put2PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=27,r=0.0446,q=0,sigma=sigma_PFE,isPut=1)
# con Precio strike (K) = 25
Put3PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=25,r=0.0446,q=0,sigma=sigma_PFE,isPut=1)
resultados <- data.frame(
Metric = names(Put1PFE),
Call1 = as.numeric(Put1PFE),
Call2 = as.numeric(Put2PFE),
Call3 = as.numeric(Put3PFE)
)
colnames(resultados) <- c("Griegas Put PFE", "Strike_30", "Strike_27", "Strike_25")
# Mostrar la tabla
resultados
## Griegas Put PFE Strike_30 Strike_27 Strike_25
## 1 Delta -0.5740159 -0.27774702 -0.12373969
## 2 Gamma 0.1007727 0.08618497 0.05253819
## 3 Theta -2.2217504 -2.22198153 -1.42097447
## 4 Vega 5.6181672 4.80488719 2.92905013
## 5 Rho -4.6459668 -2.16933277 -0.94989458
## 6 Price 2.1325719 0.71710144 0.25319872
## 7 d1 -0.1866077 0.58954752 1.15649342
## 8 d2 -0.3223544 0.45380081 1.02074672
## 9 B 18.5838670 8.67733107 3.79957833
Valore los precios de las opciones mediante el modelo de Black, Scholes y Merton, pero modificando la tasa de variación implícita. Calcule y analice las griegas
# con Precio strike (K) = 15 y sigma= sigma_AAL+0.05
Call1Sigma1= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=15,r=0.0446,q=0,sigma=sigma_AAL+0.05,isPut=0)
# con Precio strike (K) = 12 y sigma= sigma_AAL-0.05
Call2Sigma2= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=12,r=0.0446,q=0,sigma=sigma_AAL-0.05,isPut=0)
# con Precio strike (K) = 10 y sigma= sigma_AAL-0.1
Call3Sigma3= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=10,r=0.0446,q=0,sigma=sigma_AAL-0.1,isPut=0)
resultados <- data.frame(
Metric = names(Call1Sigma1),
Call1 = as.numeric(Call1Sigma1),
Call2 = as.numeric(Call2Sigma2),
Call3 = as.numeric(Call3Sigma3)
)
colnames(resultados) <- c("Griegas Call AAL", "Strike_15_Sigma+0.05", "Strike_12_Sigma-0.05", "Strike_10_Sigma-0.1")
# Mostrar la tabla
resultados
## Griegas Call AAL Strike_15_Sigma+0.05 Strike_12_Sigma-0.05
## 1 Delta 0.27616860 0.51263725
## 2 Gamma 0.08697059 0.12195386
## 3 Theta -2.68784045 -2.81931848
## 4 Vega 1.92261825 2.29276713
## 5 Rho 0.65473808 1.18751388
## 6 Price 0.55698654 1.14527283
## 7 d1 -0.59426154 0.03168219
## 8 d2 -0.92857585 -0.25263212
## 9 B -2.61895234 -4.75005554
## Strike_10_Sigma-0.1
## 1 0.7616507
## 2 0.1038535
## 3 -2.1446201
## 4 1.7807917
## 5 1.6674947
## 6 2.0890045
## 7 0.7116225
## 8 0.4523082
## 9 -6.6699787
# con Precio strike (K) = 15 y sigma= sigma_AAL+0.05
Put1Sigma1= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=15,r=0.0446,q=0,sigma=sigma_AAL+0.05,isPut=1)
# con Precio strike (K) = 12 y sigma= sigma_AAL-0.05
Put2Sigma2= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=12,r=0.0446,q=0,sigma=sigma_AAL-0.05,isPut=1)
# con Precio strike (K) = 10 y sigma= sigma_AAL-0.1
Put3Sigma3= BScall(t=0,T=3/12,S=tail(AAL$AAL.Adjusted,1),K=10,r=0.0446,q=0,sigma=sigma_AAL-0.1,isPut=1)
resultados <- data.frame(
Metric = names(Put1Sigma1),
Call1 = as.numeric(Put1Sigma1),
Call2 = as.numeric(Put2Sigma2),
Call3 = as.numeric(Put3Sigma3)
)
colnames(resultados) <- c("Griegas Put AAL", "Strike_15_Sigma+0.05", "Strike_12_Sigma-0.05", "Strike_10_Sigma-0.1")
# Mostrar la tabla
resultados
## Griegas Put AAL Strike_15_Sigma+0.05 Strike_12_Sigma-0.05 Strike_10_Sigma-0.1
## 1 Delta -0.72383140 -0.48736275 -0.2383493
## 2 Gamma 0.08697059 0.12195386 0.1038535
## 3 Theta -2.02625836 -2.29005282 -1.7035654
## 4 Vega 1.92261825 2.29276713 1.7807917
## 5 Rho -3.05368166 -1.77922191 -0.8047851
## 6 Price 3.89066550 1.51221600 0.4781238
## 7 d1 -0.59426154 0.03168219 0.7116225
## 8 d2 -0.92857585 -0.25263212 0.4523082
## 9 B 12.21472663 7.11688763 3.2191406
# con Precio strike (K) = 30 y sigma= sigma_PFE+0.3
Call1Sigma1PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=30,r=0.0446,q=0,sigma=sigma_PFE+0.3,isPut=0)
# con Precio strike (K) = 27 y sigma= sigma_PFE+0.1
Call2Sigma2PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=27,r=0.0446,q=0,sigma=sigma_PFE+0.1,isPut=0)
# con Precio strike (K) = 25 y sigma= sigma_PFE-0.1
Call3Sigma3PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=25,r=0.0446,q=0,sigma=sigma_PFE-0.1,isPut=0)
resultados <- data.frame(
Metric = names(Call1Sigma1PFE),
Call1 = as.numeric(Call1Sigma1PFE),
Call2 = as.numeric(Call2Sigma2PFE),
Call3 = as.numeric(Call3Sigma3PFE)
)
colnames(resultados) <- c("Griegas Call PFE", "Strike_30_Sigma+0.3", "Strike_27_Sigma+0.1", "Strike_25_Sigma-0.1")
# Mostrar la tabla
resultados
## Griegas Call PFE Strike_30_Sigma+0.3 Strike_27_Sigma+0.1 Strike_25_Sigma-0.1
## 1 Delta 0.50876792 0.68229329 0.96132570
## 2 Gamma 0.04870211 0.06697304 0.03411702
## 3 Theta -7.05664412 -4.52653558 -1.46353159
## 4 Vega 5.71546209 5.10908946 1.20146450
## 5 Rho 2.93691808 4.09500761 5.89375046
## 6 Price 2.83361633 3.17449528 3.97659250
## 7 d1 0.02197970 0.47412130 1.76628167
## 8 d2 -0.26376701 0.28837459 1.68053496
## 9 B -11.74767232 -16.38003044 -23.57500185
# con Precio strike (K) = 30 y sigma= sigma_PFE+0.3
Put1Sigma1PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=30,r=0.0446,q=0,sigma=sigma_PFE+0.3,isPut=1)
# con Precio strike (K) = 27 y sigma= sigma_PFE+0.1
Put2Sigma2PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=27,r=0.0446,q=0,sigma=sigma_PFE+0.1,isPut=1)
# con Precio strike (K) = 25 y sigma= sigma_PFE-0.1
Put3Sigma3PFE= BScall(t=0,T=3/12,S=tail(PFE$PFE.Adjusted,1),K=25,r=0.0446,q=0,sigma=sigma_PFE-0.1,isPut=1)
resultados <- data.frame(
Metric = names(Put1Sigma1PFE),
Call1 = as.numeric(Put1Sigma1PFE),
Call2 = as.numeric(Put2Sigma2PFE),
Call3 = as.numeric(Put3Sigma3PFE)
)
colnames(resultados) <- c("Griegas Put PFE", "Strike_30_Sigma+0.3", "Strike_27_Sigma+0.1", "Strike_25_Sigma-0.1")
# Mostrar la tabla
resultados
## Griegas Put PFE Strike_30_Sigma+0.3 Strike_27_Sigma+0.1 Strike_25_Sigma-0.1
## 1 Delta -0.49123208 -0.31770671 -0.03867430
## 2 Gamma 0.04870211 0.06697304 0.03411702
## 3 Theta -5.73347996 -3.33568783 -0.36089479
## 4 Vega 5.71546209 5.10908946 1.20146450
## 5 Rho -4.47992140 -2.58014792 -0.28694911
## 6 Price 3.84097441 1.21511756 0.03939092
## 7 d1 0.02197970 0.47412130 1.76628167
## 8 d2 -0.26376701 0.28837459 1.68053496
## 9 B 17.91968561 10.32059169 1.14779642
Valore los precios de las opciones mediante el modelo de Black, Scholes y Merton, pero modificando la tasa de interés (una con intervalo de crecimiento y decrecimiento de 2%, hasta llegar a un total de 10 puntos de distancia, otra con una simulación de Vasicek de la tasa de interés)
# Función con parámetros iniciales
black_scholes_merton <- function(So, K, r, VencimientoDias, sigma, Stcall, Stput) {
Ano <- 252
VencimientoDias=30
sigma= sigma_AAL
#Definir los vencimientos a partir de un número de días establecido
k = seq(from = , by = 12.44, length.out = 3)
#Definir un conjunto de Volatilidad a partir de un valor sigma inicial
r = seq(from=r, by = 0.0046 , length.out = 0.2)
## Cálculo del vencimiento
T <- VencimientoDias / Ano
#Definir d1 y d2
d1 <- (log(So/K) + (r + ((sigma^2)/2)) * T) / (sigma * sqrt(T))
d2 <- (log(So/K) + (r - ((sigma^2)/2)) * T) / (sigma * sqrt(T))
# Definir N1 y N2 para la posición Call y Put
Nd1 <- pnorm(d1)
Nd2 <- pnorm(d2)
Nd1P <- pnorm(-d1)
Nd2P <- pnorm(-d2)
#Valoración Call
Call <- So * Nd1 - (K * exp(-r * T) * Nd2)
#Valoración Put
Put <- (K * exp(-r * T) * Nd2P) - So * Nd1P
##Crear vector de varios precios st a partir de un stc dado
St <- seq(from = Stcall, by = 0.5, length.out = 60)
num_filas <- length(St)
num_columnas <- length(sigma)
## Matriz resultados de la Valoración Call
resultadosCall <- matrix(NA, nrow = num_filas, ncol = num_columnas)
##
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (St[i] * pnorm((log(St[i]/K) + (r + ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j]))) -
K * exp(-r * T[j]) * pnorm((log(St[i]/K) + (r - ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))) /
Call[j]
resultadosCall[i, j] <- resultado
}
}
#Definir el nombre de las columnas
colnames(resultadosCall) <- paste("Vto a", VencimientoDias, "días")
##Crear vector de varios precios st a partir de un stp dado
StP <- seq(from = Stput, by = 0.5, length.out = 60)
#matriz de resultados de la valoración Put
resultadosPut <- matrix(NA, nrow = num_filas, ncol = num_columnas)
for (i in 1:num_filas) {
for (j in 1:num_columnas) {
resultado <- (K * exp(-r * T[j]) * pnorm(-(log(StP[i]/K) + (r - ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))
- StP[i] * pnorm(-(log(StP[i]/K) + (r + ((sigma[j]^2)/2)) * T[j]) / (sigma[j] * sqrt(T[j])))) /
Put[j]
resultadosPut[i, j] <- resultado
}
}
colnames(resultadosPut) <- paste("Vto a", VencimientoDias, "días")
#incluir columna de los valores de St para la posición Call en la matriz de resultados
CallTable <- cbind(St, resultadosCall)
# definir la tabla como un dataframe para evitar error en el tipo de datos
CallTable <- as.data.frame(CallTable)
#Proceso similar al anterior realizado ahora para la posición Put
PutTable <- cbind(StP, resultadosPut)
PutTable <- as.data.frame(PutTable)
# Graficar Call
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosCall, type = "l", col = colores, lty = 1, xlab = "Índice", ylab = "Valor", main = "Gráfico de Líneas de Resultados Call")
legend("topleft", legend = colnames(resultadosCall), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "CallPlot.png")
dev.off()
# Graficar Put
colores <- rainbow(num_columnas)
matplot(1:num_filas, resultadosPut, type = "l", col = colores, lty = 1, xlab = "Índice", ylab = "Valor", main = "Gráfico de Líneas de Resultados Put")
legend("topright", legend = colnames(resultadosPut), col = colores, lty = 1, cex = 0.4)
grid()
png(filename = "PutPlot.png")
dev.off()
return(list(CallTable = CallTable, PutTable = PutTable))
}
# Obtener el último precio ajustado de cada acción
ultimo_ajustado_AAL <- tail(Ad(AAL), 1)
# Llamada a la función con valores específicos y gráficas
resultado <- black_scholes_merton(So = 13.44, K = 13, r = 0.0446, VencimientoDias = 30, sigma = sigma_AAL, Stcall = 1, Stput = 1)
print(resultado$CallTable)
## St Vto a 30 días
## 1 1.0 0.00000000000000000000000000000000008827502
## 2 1.5 0.00000000000000000000000019488050146713580
## 3 2.0 0.00000000000000000009677794851576443068038
## 4 2.5 0.00000000000000074686765485316258840475800
## 5 3.0 0.00000000000050989240340437523872282876702
## 6 3.5 0.00000000007335761573583578666959970071559
## 7 4.0 0.00000000362741825438722341684930072780446
## 8 4.5 0.00000008320416928161885349035653547389302
## 9 5.0 0.00000107637560673508018212630316101652284
## 10 5.5 0.00000897560071640100629476038962550887845
## 11 6.0 0.00005304092700089676684985229293545216933
## 12 6.5 0.00023808397177442304688300966919456413962
## 13 7.0 0.00085512999810238073811197168083708675113
## 14 7.5 0.00255775637144231527894677746814977581380
## 15 8.0 0.00657293806094124202776818322035978781059
## 16 8.5 0.01487605789328545063954223337532312143594
## 17 9.0 0.03024828286906691351965115188704658066854
## 18 9.5 0.05616314104137813678629953528798068873584
## 19 10.0 0.09650470369116546931476108284186921082437
## 20 10.5 0.15517460514186351416832110317045589908957
## 21 11.0 0.23567568526816334850693124280951451510191
## 22 11.5 0.34075839818086167687383181146287824958563
## 23 12.0 0.47218953241535749354440554270695429295301
## 24 12.5 0.63066583392182784528756656072800979018211
## 25 13.0 0.81586150495285836292680414771893993020058
## 26 13.5 1.02657637941888468802176248573232442140579
## 27 14.0 1.26094275773485775538063080603023990988731
## 28 14.5 1.51665098630009476110558352957013994455338
## 29 15.0 1.79116259887055773170061456767143681645393
## 30 15.5 2.08189100915884495179852820001542568206787
## 31 16.0 2.38634030078770820182398892939090728759766
## 32 16.5 2.70220092688789748081035213544964790344238
## 33 17.0 3.02740658468229861810527836496476083993912
## 34 17.5 3.36015939835961097159611199458595365285873
## 35 18.0 3.69893141968623018200901242380496114492416
## 36 18.5 4.04245001715588880841778518515639007091522
## 37 19.0 4.38967356799840580094951292267069220542908
## 38 19.5 4.73976244115243616761290468275547027587891
## 39 20.0 5.09204885543740104481003072578459978103638
## 40 20.5 5.44600797652506685153639409691095352172852
## 41 21.0 5.80123164434043836479304445674642920494080
## 42 21.5 6.15740540362492971837582445004954934120178
## 43 22.0 6.51428901555660644362433231435716152191162
## 44 22.5 6.87170031452705565300220769131556153297424
## 45 23.0 7.22950209653796527220492862397804856300354
## 46 23.5 7.58759164400582886145230077090673148632050
## 47 24.0 7.94589247329422931898079696111381053924561
## 48 24.5 8.30434791116042880787517788121476769447327
## 49 25.0 8.66291614673590437689654208952561020851135
## 50 25.5 9.02156645469757378918984613846987485885620
## 51 26.0 9.38027633539555694142109132371842861175537
## 52 26.5 9.73902936454351397799200640292838215827942
## 53 27.0 10.09781358648275251255199691513553261756897
## 54 27.5 10.45662032023696674798429739894345402717590
## 55 28.0 10.81544327665703342233882722212001681327820
## 56 28.5 11.17427790844644164280907716602087020874023
## 57 29.0 11.53312093349493849814280110877007246017456
## 58 29.5 11.89196998651681447256578394444659352302551
## 59 30.0 12.25082336523978021602943044854328036308289
## 60 30.5 12.60967984598632796178208081983029842376709
print(resultado$PutTable)
## StP Vto a 30 días
## 1 1.0 13.49002043913
## 2 1.5 12.92469311776
## 3 2.0 12.35936579640
## 4 2.5 11.79403847503
## 5 3.0 11.22871115366
## 6 3.5 10.66338383240
## 7 4.0 10.09805651663
## 8 4.5 9.53272932062
## 9 5.0 8.96740356382
## 10 5.5 8.40208868629
## 11 6.0 7.83683078205
## 12 6.5 7.27179496331
## 13 7.0 6.70743968893
## 14 7.5 6.14479455459
## 15 8.0 5.58579244255
## 16 8.5 5.03354521946
## 17 9.0 4.49243412252
## 18 9.5 3.96793108147
## 19 10.0 3.46615476437
## 20 10.5 2.99325150673
## 21 11.0 2.55473941389
## 22 11.5 2.15495134034
## 23 12.0 1.79667054925
## 24 12.5 1.48099464076
## 25 13.0 1.20741037809
## 26 13.5 0.97402711160
## 27 14.0 0.77790261061
## 28 14.5 0.61539842392
## 29 15.0 0.48251564649
## 30 15.5 0.37517956863
## 31 16.0 0.28945831506
## 32 16.5 0.22171360276
## 33 17.0 0.16869033679
## 34 17.5 0.12755628144
## 35 18.0 0.09590442426
## 36 18.5 0.07172995914
## 37 19.0 0.05339199346
## 38 19.5 0.03956783683
## 39 20.0 0.02920551798
## 40 20.5 0.02147825316
## 41 21.0 0.01574305828
## 42 21.5 0.01150456465
## 43 22.0 0.00838431844
## 44 22.5 0.00609534993
## 45 23.0 0.00442151846
## 46 23.5 0.00320101062
## 47 24.0 0.00231333996
## 48 24.5 0.00166922780
## 49 25.0 0.00120280850
## 50 25.5 0.00086567974
## 51 26.0 0.00062239731
## 52 26.5 0.00044708763
## 53 27.0 0.00032091668
## 54 27.5 0.00023020913
## 55 28.0 0.00016505751
## 56 28.5 0.00011829838
## 57 29.0 0.00008476134
## 58 29.5 0.00006072031
## 59 30.0 0.00004349366
## 60 30.5 0.00003115370
Valore los precios de las opciones mediante el modelo de Black, Scholes y Merton, pero modificando la tasa de interés (una con intervalo de crecimiento y decrecimiento de 2%, hasta llegar a un total de 10 puntos de distancia, otra con una simulación de Vasicek de la tasa de interés)
BScall3 <- function(t=0,T,S,K,r,q=0,sigma,isPut=0) {
# t and T are measured in years; all parameters are annualized
# q is the continuous dividend yield
d1 <- (log(S/K)+(r-q+sigma^2/2)*(T-t))/(sigma*sqrt(T-t))
d2 <- d1-sigma*sqrt(T-t)
binary <- pnorm(-d2)*exp(-r*T)
# Call Delta at t
Delta <- exp(-q*(T-t))*pnorm(d1)
# Black-Scholes formula for Calls
BSprice <- -K*exp(-r*(T-t))*pnorm(d2)+S*Delta
if (isPut==1) {
Delta <- -exp(-q*(T-t))*pnorm(-d1)
BSprice <- S*Delta+K*exp(-r*(T-t))*pnorm(-d2)
}
return (list(Delta=Delta,d1=d1,d2=d2,Price=BSprice))
}
# Función que cambia la tasa de interés r y calcula el valor de la opción usando BScall3
calcular_valores_con_diferentes_r <- function(t, T, S, K, r_inicial, q, sigma, isPut, incremento, max_incremento) {
resultados <- data.frame(r = numeric(), valor_opcion = numeric())
for (r in seq(r_inicial, r_inicial + max_incremento, by = incremento)) {
valor_opcion <- BScall3(t=t, T=T, S=S, K=K, r=r, q=q, sigma=sigma, isPut=isPut)
resultados <- rbind(resultados, data.frame(r = r,valor_opcion))
}
return(resultados)
}
# Definimos los parámetros iniciales
S <- tail(AAL$AAL.Adjusted, 1)[[1]]
K <- 15
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 0
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 0.2417664 -0.7006320 -1.0099463 0.4390994
## 2 0.0146 0.2442961 -0.6925496 -1.0018639 0.4449814
## 3 0.0246 0.2468401 -0.6844672 -0.9937815 0.4509216
## 4 0.0346 0.2493982 -0.6763848 -0.9856991 0.4569202
## 5 0.0446 0.2519703 -0.6683024 -0.9776167 0.4629775
## 6 0.0546 0.2545563 -0.6602200 -0.9695343 0.4690937
## 7 0.0646 0.2571562 -0.6521376 -0.9614519 0.4752691
## 8 0.0746 0.2597698 -0.6440552 -0.9533695 0.4815039
## 9 0.0846 0.2623971 -0.6359728 -0.9452871 0.4877984
## 10 0.0946 0.2650379 -0.6278904 -0.9372047 0.4941528
## 11 0.1046 0.2676921 -0.6198080 -0.9291223 0.5005674
## 12 0.1146 0.2703596 -0.6117256 -0.9210400 0.5070424
## 13 0.1246 0.2730404 -0.6036433 -0.9129576 0.5135779
## 14 0.1346 0.2757343 -0.5955609 -0.9048752 0.5201744
## 15 0.1446 0.2784412 -0.5874785 -0.8967928 0.5268319
## 16 0.1546 0.2811610 -0.5793961 -0.8887104 0.5335506
# Definimos los parámetros iniciales
S <- tail(AAL$AAL.Adjusted, 1)[[1]]
K <- 12
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 0
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 0.5082901 0.02078163 -0.2885327 1.213032
## 2 0.0146 0.5115135 0.02886403 -0.2804503 1.224645
## 3 0.0246 0.5147361 0.03694642 -0.2723679 1.236321
## 4 0.0346 0.5179578 0.04502881 -0.2642855 1.248060
## 5 0.0446 0.5211783 0.05311121 -0.2562031 1.259863
## 6 0.0546 0.5243975 0.06119360 -0.2481207 1.271729
## 7 0.0646 0.5276150 0.06927599 -0.2400383 1.283657
## 8 0.0746 0.5308308 0.07735839 -0.2319559 1.295648
## 9 0.0846 0.5340445 0.08544078 -0.2238735 1.307702
## 10 0.0946 0.5372560 0.09352318 -0.2157911 1.319817
## 11 0.1046 0.5404651 0.10160557 -0.2077087 1.331995
## 12 0.1146 0.5436716 0.10968796 -0.1996263 1.344234
## 13 0.1246 0.5468752 0.11777036 -0.1915440 1.356534
## 14 0.1346 0.5500758 0.12585275 -0.1834616 1.368896
## 15 0.1446 0.5532731 0.13393514 -0.1753792 1.381319
## 16 0.1546 0.5564669 0.14201754 -0.1672968 1.393803
# Definimos los parámetros iniciales
S <- tail(AAL$AAL.Adjusted, 1)[[1]]
K <- 10
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 0
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 0.7291418 0.6102195 0.3009052 2.209670
## 2 0.0146 0.7318118 0.6183019 0.3089876 2.225128
## 3 0.0246 0.7344685 0.6263843 0.3170699 2.240624
## 4 0.0346 0.7371118 0.6344666 0.3251523 2.256157
## 5 0.0446 0.7397416 0.6425490 0.3332347 2.271727
## 6 0.0546 0.7423578 0.6506314 0.3413171 2.287333
## 7 0.0646 0.7449602 0.6587138 0.3493995 2.302976
## 8 0.0746 0.7475488 0.6667962 0.3574819 2.318653
## 9 0.0846 0.7501236 0.6748786 0.3655643 2.334366
## 10 0.0946 0.7526843 0.6829610 0.3736467 2.350113
## 11 0.1046 0.7552309 0.6910434 0.3817291 2.365895
## 12 0.1146 0.7577633 0.6991258 0.3898115 2.381710
## 13 0.1246 0.7602814 0.7072082 0.3978939 2.397557
## 14 0.1346 0.7627852 0.7152906 0.4059763 2.413438
## 15 0.1446 0.7652746 0.7233730 0.4140587 2.429350
## 16 0.1546 0.7677495 0.7314554 0.4221411 2.445294
# Definimos los parámetros iniciales
S <- tail(AAL$AAL.Adjusted, 1)[[1]]
K <- 15
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 1
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 -0.7582336 -0.7006320 -1.0099463 3.921859
## 2 0.0146 -0.7557039 -0.6925496 -1.0018639 3.890331
## 3 0.0246 -0.7531599 -0.6844672 -0.9937815 3.858955
## 4 0.0346 -0.7506018 -0.6763848 -0.9856991 3.827730
## 5 0.0446 -0.7480297 -0.6683024 -0.9776167 3.796656
## 6 0.0546 -0.7454437 -0.6602200 -0.9695343 3.765735
## 7 0.0646 -0.7428438 -0.6521376 -0.9614519 3.734965
## 8 0.0746 -0.7402302 -0.6440552 -0.9533695 3.704346
## 9 0.0846 -0.7376029 -0.6359728 -0.9452871 3.673880
## 10 0.0946 -0.7349621 -0.6278904 -0.9372047 3.643565
## 11 0.1046 -0.7323079 -0.6198080 -0.9291223 3.613402
## 12 0.1146 -0.7296404 -0.6117256 -0.9210400 3.583390
## 13 0.1246 -0.7269596 -0.6036433 -0.9129576 3.553530
## 14 0.1346 -0.7242657 -0.5955609 -0.9048752 3.523822
## 15 0.1446 -0.7215588 -0.5874785 -0.8967928 3.494266
## 16 0.1546 -0.7188390 -0.5793961 -0.8887104 3.464861
# Definimos los parámetros iniciales
S <- tail(AAL$AAL.Adjusted, 1)[[1]]
K <- 12
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 1
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 -0.4917099 0.02078163 -0.2885327 1.699240
## 2 0.0146 -0.4884865 0.02886403 -0.2804503 1.680924
## 3 0.0246 -0.4852639 0.03694642 -0.2723679 1.662747
## 4 0.0346 -0.4820422 0.04502881 -0.2642855 1.644708
## 5 0.0446 -0.4788217 0.05311121 -0.2562031 1.626806
## 6 0.0546 -0.4756025 0.06119360 -0.2481207 1.609041
## 7 0.0646 -0.4723850 0.06927599 -0.2400383 1.591414
## 8 0.0746 -0.4691692 0.07735839 -0.2319559 1.573922
## 9 0.0846 -0.4659555 0.08544078 -0.2238735 1.556567
## 10 0.0946 -0.4627440 0.09352318 -0.2157911 1.539347
## 11 0.1046 -0.4595349 0.10160557 -0.2077087 1.522262
## 12 0.1146 -0.4563284 0.10968796 -0.1996263 1.505312
## 13 0.1246 -0.4531248 0.11777036 -0.1915440 1.488496
## 14 0.1346 -0.4499242 0.12585275 -0.1834616 1.471815
## 15 0.1446 -0.4467269 0.13393514 -0.1753792 1.455267
## 16 0.1546 -0.4435331 0.14201754 -0.1672968 1.438851
# Definimos los parámetros iniciales
S <- tail(AAL$AAL.Adjusted, 1)[[1]]
K <- 10
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 1
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 -0.2708582 0.6102195 0.3009052 0.6981771
## 2 0.0146 -0.2681882 0.6183019 0.3089876 0.6886947
## 3 0.0246 -0.2655315 0.6263843 0.3170699 0.6793125
## 4 0.0346 -0.2628882 0.6344666 0.3251523 0.6700299
## 5 0.0446 -0.2602584 0.6425490 0.3332347 0.6608461
## 6 0.0546 -0.2576422 0.6506314 0.3413171 0.6517606
## 7 0.0646 -0.2550398 0.6587138 0.3493995 0.6427727
## 8 0.0746 -0.2524512 0.6667962 0.3574819 0.6338817
## 9 0.0846 -0.2498764 0.6748786 0.3655643 0.6250871
## 10 0.0946 -0.2473157 0.6829610 0.3736467 0.6163882
## 11 0.1046 -0.2447691 0.6910434 0.3817291 0.6077843
## 12 0.1146 -0.2422367 0.6991258 0.3898115 0.5992748
## 13 0.1246 -0.2397186 0.7072082 0.3978939 0.5908591
## 14 0.1346 -0.2372148 0.7152906 0.4059763 0.5825365
## 15 0.1446 -0.2347254 0.7233730 0.4140587 0.5743064
## 16 0.1546 -0.2322505 0.7314554 0.4221411 0.5661680
# Definimos los parámetros iniciales
S <- tail(PFE$PFE.Adjusted,1)[[1]]
K <- 30
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 0
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 0.5042467 0.01064518 -0.2986691 2.987016
## 2 0.0146 0.5074708 0.01872757 -0.2905867 3.015757
## 3 0.0246 0.5106943 0.02680997 -0.2825043 3.044657
## 4 0.0346 0.5139172 0.03489236 -0.2744219 3.073716
## 5 0.0446 0.5171392 0.04297475 -0.2663396 3.102933
## 6 0.0546 0.5203600 0.05105715 -0.2582572 3.132307
## 7 0.0646 0.5235795 0.05913954 -0.2501748 3.161839
## 8 0.0746 0.5267975 0.06722193 -0.2420924 3.191527
## 9 0.0846 0.5300137 0.07530433 -0.2340100 3.221371
## 10 0.0946 0.5332280 0.08338672 -0.2259276 3.251371
## 11 0.1046 0.5364401 0.09146912 -0.2178452 3.281525
## 12 0.1146 0.5396498 0.09955151 -0.2097628 3.311835
## 13 0.1246 0.5428569 0.10763390 -0.2016804 3.342298
## 14 0.1346 0.5460613 0.11571630 -0.1935980 3.372914
## 15 0.1446 0.5492627 0.12379869 -0.1855156 3.403684
## 16 0.1546 0.5524608 0.13188108 -0.1774332 3.434605
# Definimos los parámetros iniciales
S <- tail(PFE$PFE.Adjusted,1)[[1]]
K <- 27
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 0
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 0.6373076 0.3512712 0.04195693 4.329466
## 2 0.0146 0.6403347 0.3593536 0.05003933 4.364370
## 3 0.0246 0.6433531 0.3674360 0.05812172 4.399404
## 4 0.0346 0.6463625 0.3755184 0.06620412 4.434565
## 5 0.0446 0.6493628 0.3836008 0.07428651 4.469854
## 6 0.0546 0.6523539 0.3916832 0.08236890 4.505270
## 7 0.0646 0.6553354 0.3997656 0.09045130 4.540810
## 8 0.0746 0.6583074 0.4078480 0.09853369 4.576475
## 9 0.0846 0.6612695 0.4159304 0.10661608 4.612263
## 10 0.0946 0.6642218 0.4240128 0.11469848 4.648173
## 11 0.1046 0.6671639 0.4320952 0.12278087 4.684205
## 12 0.1146 0.6700957 0.4401776 0.13086326 4.720356
## 13 0.1246 0.6730172 0.4482600 0.13894566 4.756627
## 14 0.1346 0.6759281 0.4563424 0.14702805 4.793016
## 15 0.1446 0.6788283 0.4644248 0.15511045 4.829522
## 16 0.1546 0.6817176 0.4725071 0.16319284 4.866144
# Definimos los parámetros iniciales
S <- tail(PFE$PFE.Adjusted,1)[[1]]
K <- 25
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 0
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 0.7257745 0.6000830 0.2907687 5.458705
## 2 0.0146 0.7284611 0.6081654 0.2988511 5.497108
## 3 0.0246 0.7311345 0.6162478 0.3069335 5.535607
## 4 0.0346 0.7337946 0.6243302 0.3150159 5.574201
## 5 0.0446 0.7364413 0.6324126 0.3230983 5.612888
## 6 0.0546 0.7390746 0.6404950 0.3311807 5.651668
## 7 0.0646 0.7416942 0.6485774 0.3392631 5.690539
## 8 0.0746 0.7443001 0.6566598 0.3473455 5.729500
## 9 0.0846 0.7468923 0.6647422 0.3554279 5.768549
## 10 0.0946 0.7494705 0.6728246 0.3635102 5.807686
## 11 0.1046 0.7520348 0.6809070 0.3715926 5.846910
## 12 0.1146 0.7545850 0.6889893 0.3796750 5.886218
## 13 0.1246 0.7571211 0.6970717 0.3877574 5.925610
## 14 0.1346 0.7596428 0.7051541 0.3958398 5.965085
## 15 0.1446 0.7621503 0.7132365 0.4039222 6.004641
## 16 0.1546 0.7646433 0.7213189 0.4120046 6.044278
# Definimos los parámetros iniciales
S <- tail(PFE$PFE.Adjusted,1)[[1]]
K <- 30
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 1
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 -0.4957533 0.01064518 -0.2986691 4.292536
## 2 0.0146 -0.4925292 0.01872757 -0.2905867 4.246457
## 3 0.0246 -0.4893057 0.02680997 -0.2825043 4.200724
## 4 0.0346 -0.4860828 0.03489236 -0.2744219 4.155335
## 5 0.0446 -0.4828608 0.04297475 -0.2663396 4.110291
## 6 0.0546 -0.4796400 0.05105715 -0.2582572 4.065589
## 7 0.0646 -0.4764205 0.05913954 -0.2501748 4.021230
## 8 0.0746 -0.4732025 0.06722193 -0.2420924 3.977212
## 9 0.0846 -0.4699863 0.07530433 -0.2340100 3.933534
## 10 0.0946 -0.4667720 0.08338672 -0.2259276 3.890195
## 11 0.1046 -0.4635599 0.09146912 -0.2178452 3.847194
## 12 0.1146 -0.4603502 0.09955151 -0.2097628 3.804530
## 13 0.1246 -0.4571431 0.10763390 -0.2016804 3.762203
## 14 0.1346 -0.4539387 0.11571630 -0.1935980 3.720211
## 15 0.1446 -0.4507373 0.12379869 -0.1855156 3.678552
## 16 0.1546 -0.4475392 0.13188108 -0.1774332 3.637227
# Definimos los parámetros iniciales
S <- tail(PFE$PFE.Adjusted,1)[[1]]
K <- 27
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 1
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 -0.3626924 0.3512712 0.04195693 2.638434
## 2 0.0146 -0.3596653 0.3593536 0.05003933 2.606000
## 3 0.0246 -0.3566469 0.3674360 0.05812172 2.573864
## 4 0.0346 -0.3536375 0.3755184 0.06620412 2.542023
## 5 0.0446 -0.3506372 0.3836008 0.07428651 2.510477
## 6 0.0546 -0.3476461 0.3916832 0.08236890 2.479224
## 7 0.0646 -0.3446646 0.3997656 0.09045130 2.448262
## 8 0.0746 -0.3416926 0.4078480 0.09853369 2.417591
## 9 0.0846 -0.3387305 0.4159304 0.10661608 2.387209
## 10 0.0946 -0.3357782 0.4240128 0.11469848 2.357115
## 11 0.1046 -0.3328361 0.4320952 0.12278087 2.327306
## 12 0.1146 -0.3299043 0.4401776 0.13086326 2.297782
## 13 0.1246 -0.3269828 0.4482600 0.13894566 2.268542
## 14 0.1346 -0.3240719 0.4563424 0.14702805 2.239583
## 15 0.1446 -0.3211717 0.4644248 0.15511045 2.210904
## 16 0.1546 -0.3182824 0.4725071 0.16319284 2.182504
# Definimos los parámetros iniciales
S <- tail(PFE$PFE.Adjusted,1)[[1]]
K <- 25
r_inicial <- 0.0046
sigma <- sigma_AAL
isPut <- 1
incremento <- 0.01
max_incremento <- 0.15
# Llamamos a la función para calcular los valores de la opción con diferentes tasas de interés
resultados <- calcular_valores_con_diferentes_r(t=0, T=3/12, S, K, r_inicial, q=0, sigma, isPut, incremento, max_incremento)
colnames(resultados) <- c("r", "Delta", "d1", "d2","Prices")
# Mostrar los resultados en una tabla organizada
print(resultados)
## r Delta d1 d2 Prices
## 1 0.0046 -0.2742255 0.6000830 0.2907687 1.769971
## 2 0.0146 -0.2715389 0.6081654 0.2988511 1.746024
## 3 0.0246 -0.2688655 0.6162478 0.3069335 1.722329
## 4 0.0346 -0.2662054 0.6243302 0.3150159 1.698884
## 5 0.0446 -0.2635587 0.6324126 0.3230983 1.675687
## 6 0.0546 -0.2609254 0.6404950 0.3311807 1.652737
## 7 0.0646 -0.2583058 0.6485774 0.3392631 1.630032
## 8 0.0746 -0.2556999 0.6566598 0.3473455 1.607571
## 9 0.0846 -0.2531077 0.6647422 0.3554279 1.585352
## 10 0.0946 -0.2505295 0.6728246 0.3635102 1.563373
## 11 0.1046 -0.2479652 0.6809070 0.3715926 1.541634
## 12 0.1146 -0.2454150 0.6889893 0.3796750 1.520131
## 13 0.1246 -0.2428789 0.6970717 0.3877574 1.498864
## 14 0.1346 -0.2403572 0.7051541 0.3958398 1.477832
## 15 0.1446 -0.2378497 0.7132365 0.4039222 1.457032
## 16 0.1546 -0.2353567 0.7213189 0.4120046 1.436462
Seleccione una opción Call y una Put cercanas al promedio del precio de la acción en el periodo de la muestra y genere la siguiente estrategia:
Largo en la acción. largo en la call. Corto en la put. Calcule el PyG diario en todo el periodo de la muestra, asumiendo que el precio de las opciones no cambia.
K_AAL <- 15
PreciosAAL<- data.frame(AAL$AAL.Adjusted)
# Inicializar el PyG diario
pyg_AmericanAirlines <- numeric(length(PreciosAAL$AAL.Adjusted) - 1)
# Calcular el PyG diario
for (i in 1:(length(PreciosAAL$AAL.Adjusted) - 1)) {
StAAL <- PreciosAAL$AAL.Adjusted[i]
St1AAL <- PreciosAAL$AAL.Adjusted[i + 1]
# Largo en la acción
largo_accionAAL <- (St1AAL - StAAL)
# Largo en la call
largo_callAAL <- max((St1AAL - K_AAL), 0) - max((StAAL - K_AAL), 0)
# Corto en la put
corto_putAAL <- -max((K_AAL - St1AAL), 0) + max((K_AAL - StAAL), 0)
# PyG diario de la estrategia
pyg_AmericanAirlines[i] <- largo_accionAAL + largo_callAAL + corto_putAAL
}
PYGAAL <- data.frame(Dia = 1:length(pyg_AmericanAirlines), PyG = pyg_AmericanAirlines)
knitr::kable(PYGAAL, caption = "PYG American Airlines")
| Dia | PyG |
|---|---|
| 1 | 2.4542542 |
| 2 | 0.0395813 |
| 3 | 1.0687866 |
| 4 | -0.3166733 |
| 5 | -0.3562660 |
| 6 | 1.0292091 |
| 7 | 3.9386787 |
| 8 | -0.8114853 |
| 9 | -0.2375107 |
| 10 | -0.0791702 |
| 11 | 1.3656769 |
| 12 | -2.0979958 |
| 13 | -1.1479568 |
| 14 | 0.4948120 |
| 15 | -1.1083755 |
| 16 | 0.3958473 |
| 17 | 1.3656731 |
| 18 | 0.9104500 |
| 19 | 0.5343933 |
| 20 | -1.3656731 |
| 21 | 1.0489998 |
| 22 | -0.5146027 |
| 23 | 0.6531372 |
| 24 | -0.8510590 |
| 25 | 1.1479492 |
| 26 | 0.1781311 |
| 27 | 1.4844284 |
| 28 | -0.3364716 |
| 29 | 1.2073364 |
| 30 | -1.9000702 |
| 31 | 0.9500427 |
| 32 | -1.3062973 |
| 33 | -0.3562622 |
| 34 | 1.6427612 |
| 35 | 1.7021484 |
| 36 | -5.7793770 |
| 37 | -0.8510704 |
| 38 | -0.9896202 |
| 39 | -0.0593758 |
| 40 | -0.3958473 |
| 41 | -1.3260841 |
| 42 | -0.7719002 |
| 43 | -1.8209000 |
| 44 | -0.1390343 |
| 45 | 0.5362740 |
| 46 | 0.8937874 |
| 47 | -0.5958557 |
| 48 | -2.2642670 |
| 49 | -0.2582054 |
| 50 | -2.8005409 |
| 51 | -1.3704758 |
| 52 | 0.7547569 |
| 53 | 0.6157188 |
| 54 | -0.5362701 |
| 55 | 1.1718521 |
| 56 | 0.2184868 |
| 57 | -2.2046852 |
| 58 | -0.4568214 |
| 59 | -1.4697876 |
| 60 | 1.7478561 |
| 61 | 1.9663353 |
| 62 | -0.0198631 |
| 63 | 0.3972397 |
| 64 | 0.9732361 |
| 65 | 1.3704796 |
| 66 | 0.1986198 |
| 67 | 1.2910309 |
| 68 | 1.3506126 |
| 69 | 1.2711639 |
| 70 | 0.3575172 |
| 71 | 0.0198631 |
| 72 | -4.3299141 |
| 73 | 1.7279930 |
| 74 | -0.0794487 |
| 75 | -0.5958595 |
| 76 | -0.6157227 |
| 77 | -0.9732361 |
| 78 | -0.9930992 |
| 79 | 0.8739281 |
| 80 | -0.4965477 |
| 81 | -0.3575172 |
| 82 | -0.0794487 |
| 83 | -0.3376541 |
| 84 | -2.8402596 |
| 85 | -0.1986237 |
| 86 | 1.1122742 |
| 87 | 0.0000000 |
| 88 | 0.8540611 |
| 89 | 1.6088219 |
| 90 | 0.2184830 |
| 91 | 0.3575172 |
| 92 | 0.5164108 |
| 93 | 1.2910309 |
| 94 | -0.4369698 |
| 95 | -0.2383423 |
| 96 | 0.5759964 |
| 97 | 0.7944832 |
| 98 | -0.7150345 |
| 99 | 0.0595894 |
| 100 | 2.2245369 |
| 101 | 2.8799896 |
| 102 | 0.9930992 |
| 103 | -0.8739281 |
| 104 | -1.2513008 |
| 105 | -0.4568329 |
| 106 | 0.9930992 |
| 107 | 0.7746239 |
| 108 | 0.6575661 |
| 109 | -0.4383812 |
| 110 | -0.1394844 |
| 111 | -0.2590408 |
| 112 | -0.3387489 |
| 113 | -2.1321220 |
| 114 | -1.7136688 |
| 115 | 0.2191925 |
| 116 | 0.1793365 |
| 117 | -0.5180855 |
| 118 | 1.3749199 |
| 119 | -2.1121941 |
| 120 | -0.5977898 |
| 121 | 1.4944763 |
| 122 | 0.6177139 |
| 123 | 0.1195602 |
| 124 | -0.1992607 |
| 125 | -0.4184570 |
| 126 | -1.3151398 |
| 127 | -1.5741806 |
| 128 | 0.1793327 |
| 129 | -0.2789650 |
| 130 | 0.9763908 |
| 131 | -0.4782333 |
| 132 | -0.9763908 |
| 133 | -0.2789688 |
| 134 | 1.7136650 |
| 135 | -0.4782333 |
| 136 | 0.8767624 |
| 137 | 0.7173500 |
| 138 | -0.5579376 |
| 139 | 1.0959473 |
| 140 | 0.9763947 |
| 141 | 0.5180817 |
| 142 | -0.2391129 |
| 143 | 0.9763908 |
| 144 | -2.4509430 |
| 145 | -0.2789726 |
| 146 | 0.7572060 |
| 147 | 0.8169785 |
| 148 | -2.8693962 |
| 149 | -0.6575699 |
| 150 | -0.1992645 |
| 151 | 1.2354355 |
| 152 | 0.2191925 |
| 153 | -1.2553635 |
| 154 | 0.1394844 |
| 155 | 0.2789726 |
| 156 | 0.0996284 |
| 157 | 1.2952156 |
| 158 | 0.3387451 |
| 159 | -2.3911591 |
| 160 | 0.2391129 |
| 161 | 2.9491005 |
| 162 | -2.3114586 |
| 163 | -3.0487289 |
| 164 | 1.5741806 |
| 165 | -0.1992645 |
| 166 | 1.8332253 |
| 167 | -1.7535172 |
| 168 | 0.6376419 |
| 169 | 2.7400017 |
| 170 | 1.3400002 |
| 171 | -1.6000023 |
| 172 | 0.1599998 |
| 173 | 0.8200035 |
| 174 | 2.0999985 |
| 175 | 1.2599983 |
| 176 | -0.7599983 |
| 177 | -1.7799988 |
| 178 | -1.1400032 |
| 179 | -0.5999985 |
| 180 | 0.3600006 |
| 181 | -1.3800011 |
| 182 | -4.7399979 |
| 183 | -4.6599998 |
| 184 | -1.6200027 |
| 185 | -3.4199982 |
| 186 | -3.1000023 |
| 187 | -0.3799973 |
| 188 | -2.0200005 |
| 189 | 1.3600006 |
| 190 | -4.9799995 |
| 191 | -0.1400013 |
| 192 | -2.4400005 |
| 193 | 4.5000000 |
| 194 | -1.4799995 |
| 195 | -5.6200008 |
| 196 | 1.7200012 |
| 197 | 3.2199993 |
| 198 | -0.6800003 |
| 199 | -7.8600006 |
| 200 | -2.7199993 |
| 201 | 0.1800003 |
| 202 | -0.2600002 |
| 203 | 7.3400002 |
| 204 | 2.9400005 |
| 205 | 0.5399990 |
| 206 | -3.2399998 |
| 207 | -3.5799999 |
| 208 | -0.1200008 |
| 209 | -3.0000000 |
| 210 | -1.2599983 |
| 211 | -1.3400002 |
| 212 | 0.2199993 |
| 213 | 1.4400005 |
| 214 | 2.2199993 |
| 215 | 2.3600006 |
| 216 | -1.8999996 |
| 217 | 0.7799988 |
| 218 | 0.6800003 |
| 219 | -2.4400005 |
| 220 | 1.0000000 |
| 221 | -1.0199986 |
| 222 | -0.1200008 |
| 223 | -1.4599991 |
| 224 | -0.0400009 |
| 225 | 0.1200008 |
| 226 | -0.5799999 |
| 227 | 2.4799995 |
| 228 | 2.7399998 |
| 229 | -1.2399998 |
| 230 | -2.7399998 |
| 231 | -1.6400013 |
| 232 | -0.6199989 |
| 233 | -0.5200005 |
| 234 | 0.5799999 |
| 235 | 1.2000008 |
| 236 | -0.0799999 |
| 237 | -0.9000015 |
| 238 | -1.0799999 |
| 239 | 0.0799999 |
| 240 | -0.2199993 |
| 241 | 1.6599998 |
| 242 | -0.4599991 |
| 243 | 0.4599991 |
| 244 | 0.0400009 |
| 245 | -0.3800011 |
| 246 | 2.8800011 |
| 247 | 1.6799984 |
| 248 | -2.0000000 |
| 249 | -0.9599991 |
| 250 | 1.2199993 |
| 251 | 0.2200012 |
| 252 | 1.2600002 |
| 253 | 9.7399979 |
| 254 | 3.7400017 |
| 255 | 3.4399986 |
| 256 | -3.5200005 |
| 257 | -3.0599976 |
| 258 | -5.2800007 |
| 259 | 4.7199993 |
| 260 | -0.0799980 |
| 261 | 0.6599998 |
| 262 | -0.1000023 |
| 263 | -0.9799995 |
| 264 | -0.9799995 |
| 265 | -2.1599998 |
| 266 | -1.8400002 |
| 267 | -1.9200001 |
| 268 | 0.2600002 |
| 269 | -1.5799999 |
| 270 | 1.8799992 |
| 271 | -0.5000000 |
| 272 | -0.5199986 |
| 273 | -0.6200008 |
| 274 | 0.6000004 |
| 275 | -1.7800007 |
| 276 | 0.1599998 |
| 277 | -1.6199989 |
| 278 | 1.5199986 |
| 279 | -0.6199989 |
| 280 | -0.1200008 |
| 281 | 3.7399998 |
| 282 | -1.9799995 |
| 283 | -1.0799999 |
| 284 | -0.8799992 |
| 285 | 0.0000000 |
| 286 | -0.2200012 |
| 287 | 0.8200016 |
| 288 | -0.7600002 |
| 289 | 0.0000000 |
| 290 | 0.7600002 |
| 291 | -0.7400017 |
| 292 | -0.4399986 |
| 293 | -0.1200008 |
| 294 | -0.0799999 |
| 295 | 0.7800007 |
| 296 | 2.1800003 |
| 297 | 0.9599991 |
| 298 | -0.0200005 |
| 299 | 1.9400005 |
| 300 | -0.5400009 |
| 301 | -0.3799992 |
| 302 | -0.4799995 |
| 303 | 0.0599995 |
| 304 | -1.4200001 |
| 305 | -0.0399990 |
| 306 | 0.1599998 |
| 307 | -0.3600006 |
| 308 | -0.6800003 |
| 309 | 2.5599995 |
| 310 | -0.5999985 |
| 311 | -0.7000008 |
| 312 | 0.9799995 |
| 313 | 0.6200008 |
| 314 | -1.0799999 |
| 315 | 0.1000004 |
| 316 | 0.2599983 |
| 317 | 0.2600002 |
| 318 | 0.5000000 |
| 319 | 0.0400009 |
| 320 | -1.1599998 |
| 321 | -0.0799999 |
| 322 | -0.1200008 |
| 323 | 0.6200008 |
| 324 | -0.2399998 |
| 325 | 1.3199997 |
| 326 | -0.3400002 |
| 327 | -0.8800011 |
| 328 | -1.9599991 |
| 329 | 0.2600002 |
| 330 | -0.8199997 |
| 331 | -0.3199997 |
| 332 | 1.0399990 |
| 333 | 0.9400005 |
| 334 | -1.0200005 |
| 335 | 0.0799999 |
| 336 | 0.5799999 |
| 337 | 0.8400002 |
| 338 | 0.2399998 |
| 339 | -1.1800003 |
| 340 | 1.0799999 |
| 341 | 0.1800003 |
| 342 | 0.0799999 |
| 343 | -0.5599995 |
| 344 | -1.3999996 |
| 345 | 0.2799988 |
| 346 | -0.2600002 |
| 347 | 0.4600010 |
| 348 | 0.2000008 |
| 349 | 0.4799995 |
| 350 | -0.1000004 |
| 351 | 0.7999992 |
| 352 | -1.0999985 |
| 353 | -1.6000004 |
| 354 | -1.1400013 |
| 355 | -0.5599995 |
| 356 | 0.4200001 |
| 357 | 0.2399998 |
| 358 | -0.1800003 |
| 359 | 0.1200008 |
| 360 | -0.4799995 |
| 361 | 1.1800003 |
| 362 | -0.2800007 |
| 363 | 3.4799995 |
| 364 | -1.6399994 |
| 365 | -0.6800003 |
| 366 | -0.6000004 |
| 367 | 1.0000000 |
| 368 | 1.1000004 |
| 369 | -0.1800003 |
| 370 | 0.0799999 |
| 371 | 0.1000004 |
| 372 | -0.5200005 |
| 373 | 2.0600014 |
| 374 | 2.5199986 |
| 375 | 0.2399998 |
| 376 | 0.0799999 |
| 377 | -1.6999989 |
| 378 | 0.2800007 |
| 379 | 1.1799984 |
| 380 | 2.4600010 |
| 381 | 0.6199989 |
| 382 | 1.6199989 |
| 383 | 0.8400002 |
| 384 | -0.9399986 |
| 385 | 1.6599998 |
| 386 | -1.8800011 |
| 387 | -0.6999969 |
| 388 | 0.6199989 |
| 389 | -0.2999992 |
| 390 | -0.1200027 |
| 391 | -0.5799980 |
| 392 | -0.8199997 |
| 393 | -1.2400017 |
| 394 | 0.8200016 |
| 395 | -0.4600010 |
| 396 | 0.7999992 |
| 397 | -0.3999996 |
| 398 | 0.5799999 |
| 399 | -0.7599983 |
| 400 | -1.2800007 |
| 401 | 0.6000004 |
| 402 | 0.1800003 |
| 403 | -0.2800007 |
| 404 | -0.5000000 |
| 405 | -0.2600002 |
| 406 | 0.7600002 |
| 407 | 0.2999992 |
| 408 | 1.8200016 |
| 409 | -1.3600006 |
| 410 | 0.4200001 |
| 411 | 0.3999996 |
| 412 | -0.6800003 |
| 413 | -0.0200005 |
| 414 | -0.7799988 |
| 415 | 0.1999989 |
| 416 | 2.0599995 |
| 417 | 3.0800018 |
| 418 | -1.8600006 |
| 419 | -0.6599998 |
| 420 | -0.5000000 |
| 421 | 2.0200005 |
| 422 | -0.4000015 |
| 423 | -0.4199982 |
| 424 | 1.1599998 |
| 425 | -0.6599998 |
| 426 | -0.0600014 |
| 427 | -0.8400002 |
| 428 | 0.5600014 |
| 429 | 1.0999985 |
| 430 | 0.3400002 |
| 431 | -0.5600014 |
| 432 | 1.9400024 |
| 433 | 3.5200005 |
| 434 | 0.4399986 |
| 435 | 2.3199997 |
| 436 | -1.9199982 |
| 437 | 0.1599998 |
| 438 | 0.4799995 |
| 439 | 0.5200005 |
| 440 | 1.4599991 |
| 441 | -1.8600006 |
| 442 | -1.5799980 |
| 443 | 2.0399971 |
| 444 | 0.2600021 |
| 445 | 0.2999992 |
| 446 | 0.7999992 |
| 447 | 2.4400024 |
| 448 | 3.5999985 |
| 449 | -1.4000015 |
| 450 | 1.3800011 |
| 451 | -0.9199982 |
| 452 | 0.5399971 |
| 453 | -2.2799988 |
| 454 | -3.1199989 |
| 455 | -0.9200020 |
| 456 | 1.9200020 |
| 457 | 0.3199997 |
| 458 | -0.0400009 |
| 459 | 2.4200020 |
| 460 | -0.4400024 |
| 461 | -0.0799980 |
| 462 | 0.7399979 |
| 463 | -0.3400002 |
| 464 | -0.2599983 |
| 465 | -0.5600014 |
| 466 | -0.2199974 |
| 467 | -1.2600021 |
| 468 | -0.7000008 |
| 469 | -0.3799973 |
| 470 | -0.4800034 |
| 471 | -0.1999969 |
| 472 | -0.9600029 |
| 473 | -2.3599968 |
| 474 | 1.2799988 |
| 475 | -1.8800011 |
| 476 | 2.0800018 |
| 477 | 1.8600006 |
| 478 | -0.5600014 |
| 479 | -0.1199989 |
| 480 | -0.8000031 |
| 481 | 0.8400002 |
| 482 | 0.4600029 |
| 483 | -1.0600014 |
| 484 | 0.2999992 |
| 485 | -0.1599998 |
| 486 | 1.0200005 |
| 487 | 0.0000000 |
| 488 | -0.8600006 |
| 489 | -1.6199989 |
| 490 | 0.8999977 |
| 491 | 2.3800011 |
| 492 | 1.9000015 |
| 493 | 0.4199982 |
| 494 | -1.1800003 |
| 495 | -0.7399979 |
| 496 | -0.0600014 |
| 497 | 0.8400002 |
| 498 | 0.4399986 |
| 499 | 1.3800011 |
| 500 | 1.0600014 |
| 501 | -0.3800011 |
| 502 | 0.8600006 |
| 503 | 2.2999992 |
| 504 | -1.7799988 |
| 505 | -1.2600021 |
| 506 | -0.0999985 |
| 507 | -0.0600014 |
| 508 | -0.7399979 |
| 509 | -0.7800026 |
| 510 | 0.1400032 |
| 511 | -1.0800018 |
| 512 | -0.3999977 |
| 513 | 0.0799980 |
| 514 | -1.2000008 |
| 515 | 0.1200027 |
| 516 | 0.3199997 |
| 517 | -0.6800003 |
| 518 | 0.1800003 |
| 519 | 0.2999992 |
| 520 | -0.2600021 |
| 521 | -1.6599998 |
| 522 | -0.6199989 |
| 523 | 0.2599983 |
| 524 | 0.6000023 |
| 525 | -0.0600014 |
| 526 | -0.9399986 |
| 527 | -1.4000015 |
| 528 | 0.0800018 |
| 529 | 1.0799980 |
| 530 | -0.0999985 |
| 531 | -1.6399994 |
| 532 | 1.2000008 |
| 533 | -0.3200035 |
| 534 | -1.3399963 |
| 535 | -1.6400032 |
| 536 | 3.1800003 |
| 537 | 1.6800003 |
| 538 | -0.4799995 |
| 539 | 0.0800018 |
| 540 | 1.7599983 |
| 541 | -1.2400017 |
| 542 | 0.3400002 |
| 543 | -0.9199982 |
| 544 | -1.5800018 |
| 545 | -0.6399994 |
| 546 | -0.2199974 |
| 547 | -1.0000000 |
| 548 | 2.9199982 |
| 549 | 0.2200012 |
| 550 | -0.9200020 |
| 551 | 0.7600021 |
| 552 | 0.5799980 |
| 553 | -1.5999985 |
| 554 | -1.1800003 |
| 555 | -0.1599998 |
| 556 | -0.8400002 |
| 557 | -0.4000015 |
| 558 | -0.8199997 |
| 559 | -0.4599991 |
| 560 | 1.2200012 |
| 561 | 1.4399986 |
| 562 | 0.6399994 |
| 563 | -0.5000000 |
| 564 | 0.6399994 |
| 565 | -1.4199982 |
| 566 | 0.8600006 |
| 567 | -0.6000023 |
| 568 | 0.2400017 |
| 569 | -0.7799988 |
| 570 | 0.3199997 |
| 571 | -0.8000031 |
| 572 | 2.1400032 |
| 573 | -2.5000000 |
| 574 | 0.7199974 |
| 575 | -0.2000008 |
| 576 | 0.3400002 |
| 577 | 1.0200005 |
| 578 | -0.3199997 |
| 579 | 1.2000008 |
| 580 | -1.1399994 |
| 581 | 1.5200005 |
| 582 | 0.7599983 |
| 583 | 0.9799995 |
| 584 | 0.1599998 |
| 585 | -0.0799980 |
| 586 | -0.8400002 |
| 587 | -0.9799995 |
| 588 | 2.2599983 |
| 589 | -0.5200005 |
| 590 | 0.1599998 |
| 591 | -1.8599968 |
| 592 | -0.7400017 |
| 593 | -0.2000008 |
| 594 | 0.1199989 |
| 595 | 0.3200035 |
| 596 | -1.3600006 |
| 597 | 0.0599976 |
| 598 | 0.6800003 |
| 599 | -0.2799988 |
| 600 | -0.6199989 |
| 601 | -0.0200005 |
| 602 | 0.7399979 |
| 603 | -1.4799995 |
| 604 | 0.1599998 |
| 605 | 0.3199997 |
| 606 | -0.7199974 |
| 607 | 0.3199997 |
| 608 | 0.0200005 |
| 609 | 1.1399994 |
| 610 | 0.1199989 |
| 611 | 1.5999985 |
| 612 | 0.0000000 |
| 613 | 2.3800011 |
| 614 | 0.8600006 |
| 615 | 0.0200005 |
| 616 | -1.3800011 |
| 617 | -0.4799995 |
| 618 | -2.0799980 |
| 619 | 0.0599976 |
| 620 | -0.9599991 |
| 621 | 0.0400009 |
| 622 | -0.9400024 |
| 623 | -0.2199974 |
| 624 | 0.6999969 |
| 625 | -0.3199997 |
| 626 | -0.0200005 |
| 627 | -3.4199982 |
| 628 | -0.0200005 |
| 629 | -0.0999985 |
| 630 | -2.8199997 |
| 631 | 2.2799988 |
| 632 | -1.5999985 |
| 633 | 2.6199989 |
| 634 | -0.0800018 |
| 635 | 0.6800003 |
| 636 | -0.1800003 |
| 637 | -0.2599983 |
| 638 | -1.7799988 |
| 639 | -0.4200020 |
| 640 | 0.1599998 |
| 641 | -0.9399986 |
| 642 | 0.8600006 |
| 643 | 0.6999969 |
| 644 | 1.6400032 |
| 645 | 0.2799988 |
| 646 | 0.0000000 |
| 647 | -0.1800003 |
| 648 | 0.7400017 |
| 649 | -0.9800034 |
| 650 | 0.0400009 |
| 651 | -0.2200012 |
| 652 | 1.5800018 |
| 653 | 0.5400009 |
| 654 | -0.6800003 |
| 655 | -0.2200012 |
| 656 | 1.4200020 |
| 657 | -0.9799995 |
| 658 | 0.4599991 |
| 659 | -1.0400009 |
| 660 | 1.6800003 |
| 661 | -1.7000008 |
| 662 | -1.1800003 |
| 663 | -1.1800003 |
| 664 | -1.0999985 |
| 665 | -0.9200020 |
| 666 | 0.2200012 |
| 667 | 0.0999985 |
| 668 | -0.4399986 |
| 669 | -0.9200001 |
| 670 | -0.2799988 |
| 671 | 1.6599979 |
| 672 | 0.7200012 |
| 673 | 0.2599983 |
| 674 | -0.7799988 |
| 675 | -0.2399979 |
| 676 | 1.6599998 |
| 677 | 1.9599991 |
| 678 | 1.0000000 |
| 679 | -0.1000023 |
| 680 | -2.1999969 |
| 681 | -0.3600006 |
| 682 | 2.8199997 |
| 683 | -0.0400009 |
| 684 | -1.2000008 |
| 685 | -0.6999969 |
| 686 | -0.8800011 |
| 687 | -1.5800018 |
| 688 | 0.6399994 |
| 689 | 1.0000000 |
| 690 | -0.4199982 |
| 691 | -1.9199982 |
| 692 | 0.1599998 |
| 693 | -1.3200016 |
| 694 | -2.2399998 |
| 695 | -3.5000000 |
| 696 | 1.3400002 |
| 697 | 1.5799999 |
| 698 | -0.2000008 |
| 699 | -0.3599987 |
| 700 | 0.4599991 |
| 701 | 2.6399994 |
| 702 | 1.7999992 |
| 703 | 0.1599998 |
| 704 | 0.4000015 |
| 705 | -1.3199997 |
| 706 | 0.9399986 |
| 707 | -0.7000008 |
| 708 | 1.0200005 |
| 709 | 0.5800018 |
| 710 | 0.5799980 |
| 711 | 1.7200012 |
| 712 | -0.2200012 |
| 713 | 0.4000015 |
| 714 | -0.0200005 |
| 715 | -0.0200005 |
| 716 | -0.7799988 |
| 717 | -0.9200020 |
| 718 | -0.8599968 |
| 719 | -0.7200012 |
| 720 | 0.7599983 |
| 721 | 0.3199997 |
| 722 | 3.6400032 |
| 723 | 0.0999985 |
| 724 | -0.9199982 |
| 725 | 2.0999985 |
| 726 | -0.2200012 |
| 727 | 1.4799995 |
| 728 | -0.0799980 |
| 729 | -0.4000015 |
| 730 | -2.4199982 |
| 731 | 0.3999977 |
| 732 | 0.9200020 |
| 733 | -1.3199997 |
| 734 | -0.4200020 |
| 735 | 1.1399994 |
| 736 | 0.9800034 |
| 737 | -2.1599998 |
| 738 | -1.4000015 |
| 739 | -3.0400009 |
| 740 | 0.5000000 |
| 741 | -1.1999989 |
| 742 | -0.9600010 |
| 743 | 2.1800003 |
| 744 | -0.0600014 |
| 745 | 2.5400009 |
| 746 | -1.8600006 |
| 747 | -0.2799988 |
| 748 | -0.9799995 |
| 749 | 0.9799995 |
| 750 | -2.5000000 |
| 751 | 1.2599983 |
| 752 | 2.2200012 |
| 753 | 1.7799988 |
| 754 | -0.5199966 |
| 755 | -1.1599998 |
| 756 | 0.3399963 |
| 757 | -2.4799995 |
| 758 | 0.1599998 |
| 759 | 0.7800026 |
| 760 | -1.0800018 |
| 761 | -1.3599987 |
| 762 | -1.5200005 |
| 763 | -2.7800007 |
| 764 | -0.7399998 |
| 765 | 0.7200012 |
| 766 | -2.3000011 |
| 767 | 1.5599995 |
| 768 | 0.2000008 |
| 769 | 0.1200008 |
| 770 | -0.2400017 |
| 771 | 1.8400002 |
| 772 | -0.6799984 |
| 773 | -0.1200008 |
| 774 | -0.9400005 |
| 775 | -0.6999989 |
| 776 | 0.8999996 |
| 777 | 1.5000000 |
| 778 | 0.0200005 |
| 779 | 0.4200001 |
| 780 | -0.2600002 |
| 781 | -1.0799999 |
| 782 | 2.6800003 |
| 783 | -0.9200001 |
| 784 | -0.1200008 |
| 785 | 0.4400005 |
| 786 | 0.1399994 |
| 787 | 1.2399998 |
| 788 | 0.1000004 |
| 789 | -2.2600002 |
| 790 | -0.7999992 |
| 791 | 0.1399994 |
| 792 | -0.6399994 |
| 793 | 1.0799999 |
| 794 | -0.4200001 |
| 795 | -0.1000004 |
| 796 | 1.1399994 |
| 797 | -0.4399986 |
| 798 | 1.1399994 |
| 799 | 0.4599991 |
| 800 | -0.2399998 |
| 801 | 0.5600014 |
| 802 | -0.8000011 |
| 803 | 0.8999996 |
| 804 | -0.1599998 |
| 805 | 0.5200005 |
| 806 | 0.1599998 |
| 807 | 0.3400002 |
| 808 | -1.0799999 |
| 809 | -0.2399998 |
| 810 | -1.3400002 |
| 811 | -0.9200001 |
| 812 | 0.2199993 |
| 813 | 0.3400002 |
| 814 | 0.8600006 |
| 815 | -1.3600006 |
| 816 | -0.4599991 |
| 817 | -0.3600006 |
| 818 | -0.6800003 |
| 819 | -0.1199989 |
| 820 | 0.1199989 |
| 821 | 0.4600010 |
| 822 | 1.3400002 |
| 823 | 0.1399994 |
| 824 | 0.4599991 |
| 825 | 0.5600014 |
| 826 | -1.5799999 |
| 827 | 0.6999989 |
| 828 | 0.4800014 |
| 829 | -1.0400009 |
| 830 | 0.9200001 |
| 831 | -0.4799995 |
| 832 | -1.4800014 |
| 833 | -1.0399990 |
| 834 | -1.0000000 |
| 835 | -0.7000008 |
| 836 | 0.8200016 |
| 837 | 0.9599991 |
| 838 | -1.0000000 |
| 839 | -0.4200001 |
| 840 | -0.2399998 |
| 841 | 2.0599995 |
| 842 | -0.1599998 |
| 843 | -0.2800007 |
| 844 | -1.0999985 |
| 845 | -0.2600002 |
| 846 | 0.4200001 |
| 847 | 0.8799992 |
| 848 | 0.7000008 |
| 849 | 0.1199989 |
| 850 | 0.1800003 |
| 851 | 1.0000000 |
| 852 | 0.5799999 |
| 853 | -1.0599995 |
| 854 | 0.5000000 |
| 855 | 0.7800007 |
| 856 | 0.3799992 |
| 857 | -0.5799999 |
| 858 | -0.0599995 |
| 859 | 0.0599995 |
| 860 | 0.3600006 |
| 861 | -0.1400013 |
| 862 | -1.0599995 |
| 863 | 0.2999992 |
| 864 | 0.7600002 |
| 865 | 0.4200001 |
| 866 | -0.1399994 |
| 867 | -0.5400009 |
| 868 | 1.9000015 |
| 869 | -0.1000004 |
| 870 | -0.3999996 |
| 871 | -0.1400013 |
| 872 | -1.0399990 |
| 873 | -0.2800007 |
| 874 | 0.2000008 |
| 875 | -0.3999996 |
| 876 | 0.2599983 |
| 877 | 0.8800011 |
| 878 | 0.1599998 |
| 879 | -1.3400002 |
| 880 | 0.6200008 |
| 881 | 0.5799999 |
| 882 | -0.9000015 |
| 883 | -0.0199986 |
| 884 | 0.2799988 |
| 885 | 0.4400005 |
| 886 | -1.5599995 |
| 887 | 0.1000004 |
| 888 | -0.1400013 |
| 889 | 1.3400002 |
| 890 | -1.4799995 |
| 891 | -0.2199993 |
| 892 | -0.8400002 |
| 893 | -0.2399998 |
| 894 | -0.6600018 |
| 895 | 0.1000004 |
| 896 | 1.0000000 |
| 897 | -0.9399986 |
| 898 | 0.2999992 |
| 899 | -0.3600006 |
| 900 | -0.4200001 |
| 901 | 0.7600002 |
| 902 | 0.0400009 |
| 903 | 0.0399990 |
| 904 | 1.7000008 |
| 905 | 0.7999992 |
| 906 | 0.3800011 |
| 907 | 0.8599987 |
| 908 | 1.1599998 |
| 909 | 0.3000011 |
| 910 | 2.9799995 |
| 911 | 0.3800011 |
| 912 | 0.1199989 |
| 913 | -0.8800011 |
| 914 | -0.7199974 |
| 915 | 0.1199989 |
| 916 | -0.3400002 |
| 917 | -0.2999992 |
| 918 | 0.4799995 |
| 919 | 0.7000008 |
| 920 | -0.3600006 |
| 921 | -0.9400005 |
| 922 | 0.3599987 |
| 923 | 1.1000023 |
| 924 | 0.7399979 |
| 925 | -0.0799980 |
| 926 | -0.2000008 |
| 927 | 0.0799980 |
| 928 | 0.0200005 |
| 929 | -0.6199989 |
| 930 | -0.7599983 |
| 931 | 0.4599991 |
| 932 | 0.5600014 |
| 933 | 0.0199966 |
| 934 | -0.8199997 |
| 935 | -0.0599976 |
| 936 | -1.3400021 |
| 937 | -0.2599983 |
| 938 | 0.6199989 |
| 939 | -0.6199989 |
| 940 | 0.1399994 |
| 941 | 0.6999989 |
| 942 | 0.1000023 |
| 943 | 0.1800003 |
| 944 | 0.4799995 |
| 945 | -0.4799995 |
| 946 | 0.4799995 |
| 947 | 0.4599991 |
| 948 | -1.4200001 |
| 949 | -0.8400002 |
| 950 | -1.2199993 |
| 951 | -0.3800011 |
| 952 | -1.6000004 |
| 953 | 0.5200005 |
| 954 | -0.2800007 |
| 955 | -0.0399990 |
| 956 | 0.8199997 |
| 957 | -1.1000004 |
| 958 | -0.3799992 |
| 959 | 0.1800003 |
| 960 | 0.4399986 |
| 961 | 0.0799999 |
| 962 | 0.7400017 |
| 963 | 0.2399998 |
| 964 | 0.5599995 |
| 965 | -0.6599998 |
| 966 | -0.5200005 |
| 967 | -0.5399990 |
| 968 | 0.2399998 |
| 969 | 0.2799988 |
| 970 | 0.3400002 |
| 971 | -2.6399994 |
| 972 | -0.1000004 |
| 973 | -0.3199997 |
| 974 | 0.6200008 |
| 975 | 0.3799992 |
| 976 | 0.6800003 |
| 977 | -0.6200008 |
| 978 | 0.1599998 |
| 979 | -0.1599998 |
| 980 | -0.9599991 |
| 981 | -0.2000008 |
| 982 | 0.2800007 |
| 983 | 1.5200005 |
| 984 | 0.5000000 |
| 985 | -0.2399998 |
| 986 | 0.0399990 |
| 987 | -0.5599995 |
| 988 | 0.7199993 |
| 989 | 0.9799995 |
| 990 | 0.2200012 |
| 991 | -0.2600002 |
| 992 | -0.5400009 |
| 993 | -0.0999985 |
| 994 | 0.5199986 |
| 995 | -0.1599998 |
| 996 | 1.4200001 |
| 997 | 0.2800007 |
| 998 | -0.4600010 |
| 999 | -0.8799992 |
| 1000 | -0.6200008 |
| 1001 | -0.5399990 |
| 1002 | 1.1599998 |
| 1003 | -0.0599995 |
| 1004 | 0.5399990 |
| 1005 | 0.3199997 |
| 1006 | -0.1599998 |
| 1007 | 0.3400002 |
| 1008 | -0.1199989 |
| 1009 | 0.2399998 |
| 1010 | 0.4599991 |
| 1011 | 0.2800007 |
| 1012 | 0.5399990 |
| 1013 | 0.9000015 |
| 1014 | 0.5799980 |
| 1015 | 0.5600014 |
| 1016 | 0.1199989 |
| 1017 | -0.3400002 |
| 1018 | -0.3199997 |
| 1019 | -0.0400009 |
| 1020 | 0.1200027 |
| 1021 | -0.2000008 |
| 1022 | 0.3600006 |
| 1023 | 1.8199997 |
| 1024 | 0.3999977 |
| 1025 | 0.1000023 |
| 1026 | 0.6800003 |
| 1027 | 0.3199997 |
| 1028 | 0.4399986 |
| 1029 | -0.8800011 |
| 1030 | 0.9400024 |
| 1031 | 0.4399986 |
| 1032 | 0.4599991 |
| 1033 | -0.4599991 |
| 1034 | -0.2399979 |
| 1035 | -0.6200027 |
| 1036 | 0.0800018 |
| 1037 | 1.0000000 |
| 1038 | -0.1599998 |
| 1039 | -2.3199997 |
| 1040 | -0.0400009 |
| 1041 | -1.0800018 |
| 1042 | -0.4599991 |
| 1043 | 0.2200012 |
| 1044 | -0.3800011 |
| 1045 | 0.4400024 |
| 1046 | -0.0800018 |
| 1047 | -1.0400009 |
| 1048 | -0.5599995 |
| 1049 | 0.0599995 |
| 1050 | -0.2799988 |
| 1051 | 0.2999992 |
| 1052 | 0.3800011 |
| 1053 | -0.8400002 |
| 1054 | 0.0000000 |
| 1055 | -0.2200012 |
| 1056 | 0.4600010 |
| 1057 | -0.6599998 |
| 1058 | -0.2200012 |
| 1059 | -0.7799988 |
| 1060 | -0.0200005 |
| 1061 | 0.2399998 |
| 1062 | -0.6599998 |
| 1063 | -0.1000004 |
| 1064 | -0.4200001 |
| 1065 | 0.0200005 |
| 1066 | 0.2999992 |
| 1067 | 0.3400002 |
| 1068 | -0.2599983 |
| 1069 | -0.0800018 |
| 1070 | -0.0999985 |
| 1071 | -0.7600002 |
| 1072 | 0.0599995 |
| 1073 | -0.6599998 |
| 1074 | -0.0400009 |
| 1075 | 0.2200012 |
| 1076 | 0.0399990 |
| 1077 | -1.5999985 |
| 1078 | -0.1000004 |
| 1079 | 0.1000004 |
| 1080 | -0.4000015 |
| 1081 | 0.1599998 |
| 1082 | -0.2599983 |
| 1083 | 0.0000000 |
| 1084 | -0.3200016 |
| 1085 | 0.0200005 |
| 1086 | -0.4200001 |
| 1087 | -0.1800003 |
| 1088 | 0.6200008 |
| 1089 | -0.2199993 |
| 1090 | -0.1200008 |
| 1091 | -0.9200001 |
| 1092 | 0.8799992 |
| 1093 | 0.2400017 |
| 1094 | -0.1800003 |
| 1095 | -1.0400009 |
| 1096 | 0.0400009 |
| 1097 | 0.4399986 |
| 1098 | -0.8399982 |
| 1099 | -0.6800003 |
| 1100 | 0.4399986 |
| 1101 | 0.0000000 |
| 1102 | -1.1599998 |
| 1103 | 0.1800003 |
| 1104 | -0.7399998 |
| 1105 | 0.4200001 |
| 1106 | -0.1599998 |
| 1107 | -0.3400002 |
| 1108 | 0.2199993 |
| 1109 | -0.4599991 |
| 1110 | 0.5200005 |
| 1111 | -0.0600014 |
| 1112 | -0.0199986 |
| 1113 | 0.5199986 |
| 1114 | 1.1599998 |
| 1115 | -0.6399994 |
| 1116 | 0.1800003 |
| 1117 | 0.5200005 |
| 1118 | -0.5200005 |
| 1119 | 0.1000004 |
| 1120 | -0.0400009 |
| 1121 | 0.9400005 |
| 1122 | 0.3400002 |
| 1123 | -0.4600010 |
| 1124 | 0.2000008 |
| 1125 | 0.2199993 |
| 1126 | -0.5399990 |
| 1127 | 0.3600006 |
| 1128 | 0.0000000 |
| 1129 | -0.2600002 |
| 1130 | -0.0200005 |
| 1131 | 0.1199989 |
| 1132 | 0.4000015 |
| 1133 | 1.1800003 |
| 1134 | 0.6599998 |
| 1135 | -0.4400005 |
| 1136 | 0.6999989 |
| 1137 | 0.8600006 |
| 1138 | -0.2999992 |
| 1139 | -0.0799999 |
| 1140 | 0.6399994 |
| 1141 | 0.1000004 |
| 1142 | 1.0000000 |
| 1143 | -0.2000008 |
| 1144 | -0.5000000 |
| 1145 | 0.1200008 |
| 1146 | -0.6400013 |
| 1147 | 0.7400017 |
| 1148 | -0.0799999 |
| 1149 | -0.4000015 |
| 1150 | -0.2399998 |
| 1151 | -0.0200005 |
| 1152 | -0.4799995 |
| 1153 | -0.6000004 |
| 1154 | -0.9799995 |
| 1155 | 0.2800007 |
| 1156 | 1.0200005 |
| 1157 | 1.9599991 |
| 1158 | -0.3999996 |
| 1159 | -0.0599995 |
| 1160 | 0.4799995 |
| 1161 | -2.7600002 |
| 1162 | -0.0400009 |
| 1163 | -0.5199986 |
| 1164 | 1.7799988 |
| 1165 | -0.3199997 |
| 1166 | -0.0799999 |
| 1167 | 0.7600002 |
| 1168 | -0.1399994 |
| 1169 | 2.8599987 |
| 1170 | -0.4599991 |
| 1171 | -0.3800011 |
| 1172 | -0.8199997 |
| 1173 | -0.6000004 |
| 1174 | 0.2200012 |
| 1175 | 0.4400005 |
| 1176 | -0.6000004 |
| 1177 | 1.2799988 |
| 1178 | 0.0200005 |
| 1179 | 0.0799999 |
| 1180 | -0.1399994 |
| 1181 | 0.1000004 |
| 1182 | -0.6400013 |
| 1183 | 0.5000000 |
| 1184 | 0.0799999 |
| 1185 | -0.5199986 |
| 1186 | 0.1199989 |
| 1187 | 0.1800003 |
| 1188 | 0.8999996 |
| 1189 | -0.2199993 |
| 1190 | 0.2999992 |
| 1191 | 0.5200005 |
| 1192 | -0.1599998 |
| 1193 | 0.4400005 |
| 1194 | -0.0400009 |
| 1195 | -1.6999989 |
| 1196 | -0.2800007 |
| 1197 | 0.4200001 |
| 1198 | 0.0399990 |
| 1199 | -0.4399986 |
| 1200 | -0.0600014 |
| 1201 | -1.3799992 |
| 1202 | 0.0799999 |
| 1203 | -0.0200005 |
| 1204 | -0.0599995 |
| 1205 | 0.2999992 |
| 1206 | -0.3599987 |
| 1207 | 1.2799988 |
| 1208 | 0.4200001 |
| 1209 | 0.0799999 |
| 1210 | 0.2000008 |
| 1211 | 0.0000000 |
| 1212 | 0.7600002 |
| 1213 | 0.1000004 |
| 1214 | 0.1199989 |
| 1215 | -2.0200005 |
| 1216 | -0.4799995 |
| 1217 | -0.6599998 |
| 1218 | -0.1399994 |
| 1219 | 0.2799988 |
| 1220 | 0.1000004 |
| 1221 | -1.0799999 |
| 1222 | 0.4200001 |
| 1223 | -0.9400005 |
| 1224 | -0.4200001 |
| 1225 | 0.1800003 |
| 1226 | 1.7200012 |
| 1227 | 0.2600002 |
| 1228 | 0.1799984 |
| 1229 | 0.8400002 |
| 1230 | -0.6000004 |
| 1231 | -0.6199989 |
| 1232 | 0.4200001 |
| 1233 | -0.5000000 |
| 1234 | 0.1999989 |
| 1235 | -0.9399986 |
| 1236 | 0.1399994 |
| 1237 | 0.5599995 |
| 1238 | -0.0199986 |
| 1239 | 1.5999985 |
| 1240 | -0.7999992 |
| 1241 | 0.3400002 |
| 1242 | 0.1199989 |
| 1243 | -0.1599998 |
| 1244 | 1.0600014 |
| 1245 | 0.5199986 |
| 1246 | -0.5000000 |
| 1247 | -0.2999992 |
| 1248 | -0.1200008 |
| 1249 | -0.4199982 |
| 1250 | -0.9800014 |
| 1251 | 0.1400013 |
| 1252 | -0.5600014 |
| 1253 | 0.0400009 |
| 1254 | -0.8000011 |
| 1255 | -3.6399994 |
| 1256 | -0.3600006 |
| 1257 | 0.1200008 |
K_PFE <- 30
PreciosPFE<- data.frame(PFE$PFE.Adjusted)
# Inicializar el PyG diario
pygPfizer <- numeric(length(PreciosPFE$PFE.Adjusted) - 1)
# Calcular el PyG diario
for (i in 1:(length(PreciosPFE$PFE.Adjusted) - 1)) {
StPFE <- PreciosPFE$PFE.Adjusted[i]
St1PFE <- PreciosPFE$PFE.Adjusted[i + 1]
# Largo en la acción
largo_accionPFE <- (St1PFE - StPFE)
# Largo en la call
largo_callPFE <- max((St1PFE - K_PFE), 0) - max((StPFE - K_PFE), 0)
# Corto en la put
corto_putPFE <- -max((K_PFE - St1PFE), 0) + max((K_PFE - StPFE), 0)
# PyG diario de la estrategia
pygPfizer[i] <- largo_accionPFE + largo_callPFE + corto_putPFE
}
PYGPFE <- data.frame(Dia = 1:length(pygPfizer), PyG = pygPfizer)
knitr::kable(PYGPFE, caption = "PYG Pfizer")
| Dia | PyG |
|---|---|
| 1 | 0.3869934 |
| 2 | 0.3560486 |
| 3 | 0.3250732 |
| 4 | 0.2322083 |
| 5 | -0.6191940 |
| 6 | 0.6346817 |
| 7 | -0.8978653 |
| 8 | 0.4024887 |
| 9 | 0.1857681 |
| 10 | 0.2941208 |
| 11 | 0.6656418 |
| 12 | 0.1547928 |
| 13 | 0.1083603 |
| 14 | 0.1393280 |
| 15 | 0.0000000 |
| 16 | -1.1919556 |
| 17 | 0.6811142 |
| 18 | -0.1702881 |
| 19 | 0.6966095 |
| 20 | 0.6966019 |
| 21 | 0.2786560 |
| 22 | -0.7430573 |
| 23 | -0.9597855 |
| 24 | 0.1083832 |
| 25 | 1.0681152 |
| 26 | -1.6718369 |
| 27 | -0.8978424 |
| 28 | 0.5418091 |
| 29 | 0.1547775 |
| 30 | -0.1702728 |
| 31 | 0.4953461 |
| 32 | -0.4488983 |
| 33 | 0.0773926 |
| 34 | 0.4179840 |
| 35 | -0.3096313 |
| 36 | -0.3405380 |
| 37 | 0.6501694 |
| 38 | -2.5387650 |
| 39 | -4.1176758 |
| 40 | 0.0773849 |
| 41 | -0.3593674 |
| 42 | -0.3906288 |
| 43 | -1.6249847 |
| 44 | -0.0156174 |
| 45 | -0.5781136 |
| 46 | 0.4531136 |
| 47 | -0.8124847 |
| 48 | -1.4999962 |
| 49 | -0.2968788 |
| 50 | -1.4999809 |
| 51 | 0.3749886 |
| 52 | 0.2656288 |
| 53 | 0.8281136 |
| 54 | -0.8906212 |
| 55 | 0.4062653 |
| 56 | 0.3281097 |
| 57 | -1.1562424 |
| 58 | 0.7812462 |
| 59 | -0.7812462 |
| 60 | 1.1562424 |
| 61 | 0.3906250 |
| 62 | 0.3437462 |
| 63 | 0.8906212 |
| 64 | -0.4531288 |
| 65 | 0.7968674 |
| 66 | 0.2500191 |
| 67 | 0.5156021 |
| 68 | 0.8593750 |
| 69 | 0.0468712 |
| 70 | -0.2031212 |
| 71 | -0.5781250 |
| 72 | -0.1250000 |
| 73 | -0.5156021 |
| 74 | -0.1875229 |
| 75 | 0.2031364 |
| 76 | 0.2812500 |
| 77 | -0.7031288 |
| 78 | -0.3593712 |
| 79 | -0.1718636 |
| 80 | -0.1875114 |
| 81 | 0.6875000 |
| 82 | -0.4531136 |
| 83 | -0.7812576 |
| 84 | -1.1406097 |
| 85 | 1.1718674 |
| 86 | 0.7500000 |
| 87 | -0.1562614 |
| 88 | -0.6249962 |
| 89 | 0.4062576 |
| 90 | 0.1562500 |
| 91 | 0.4999924 |
| 92 | 0.2968636 |
| 93 | 0.3125191 |
| 94 | -0.2500191 |
| 95 | 0.1875000 |
| 96 | 0.0000000 |
| 97 | 0.0000000 |
| 98 | -0.0468674 |
| 99 | 0.5312462 |
| 100 | -0.5937462 |
| 101 | 0.5937462 |
| 102 | 0.7968674 |
| 103 | 1.4531059 |
| 104 | 0.4218788 |
| 105 | -0.1718750 |
| 106 | 0.0312386 |
| 107 | -0.5624847 |
| 108 | -0.8593597 |
| 109 | 0.2031212 |
| 110 | -0.5363808 |
| 111 | 0.2208595 |
| 112 | -0.1893044 |
| 113 | 0.0630951 |
| 114 | -0.5837097 |
| 115 | -0.0788803 |
| 116 | 1.1516418 |
| 117 | -0.0946465 |
| 118 | 0.6941299 |
| 119 | -0.9623260 |
| 120 | 1.0885315 |
| 121 | 0.9307785 |
| 122 | 0.5521469 |
| 123 | -0.6152496 |
| 124 | 0.5363884 |
| 125 | -0.1735382 |
| 126 | -0.3628502 |
| 127 | -0.3786163 |
| 128 | 0.1419868 |
| 129 | -0.1735497 |
| 130 | 0.4101791 |
| 131 | 0.0473328 |
| 132 | 0.2524109 |
| 133 | -0.4101753 |
| 134 | 0.5048256 |
| 135 | -0.3312912 |
| 136 | 1.2778435 |
| 137 | -0.3786011 |
| 138 | -0.0158005 |
| 139 | 0.1262016 |
| 140 | 0.4101753 |
| 141 | 0.1419945 |
| 142 | -0.0473251 |
| 143 | 0.1419945 |
| 144 | -0.0946693 |
| 145 | -0.6468048 |
| 146 | 0.4259377 |
| 147 | -0.0631027 |
| 148 | -0.3312759 |
| 149 | -0.0788994 |
| 150 | -0.2050781 |
| 151 | 0.4890556 |
| 152 | -0.2682037 |
| 153 | 0.9465675 |
| 154 | -0.1261940 |
| 155 | 1.0411797 |
| 156 | 0.9465714 |
| 157 | -0.0946503 |
| 158 | -0.1577492 |
| 159 | -0.2682076 |
| 160 | -0.2366524 |
| 161 | 0.8203468 |
| 162 | -1.4040565 |
| 163 | 0.5363998 |
| 164 | -3.1867294 |
| 165 | -0.8834648 |
| 166 | -0.2071724 |
| 167 | 0.2709312 |
| 168 | 0.4303055 |
| 169 | 0.2868652 |
| 170 | 0.7649689 |
| 171 | 0.1434441 |
| 172 | -0.3346825 |
| 173 | -0.3824806 |
| 174 | 0.4462318 |
| 175 | -0.5578003 |
| 176 | -1.2909050 |
| 177 | -0.6693649 |
| 178 | -0.3027992 |
| 179 | -0.1434364 |
| 180 | -0.6056061 |
| 181 | -0.2071686 |
| 182 | -1.6733932 |
| 183 | -1.1793518 |
| 184 | 1.2590408 |
| 185 | -0.9881096 |
| 186 | -1.0837173 |
| 187 | 2.3268204 |
| 188 | -0.9243584 |
| 189 | 3.3467827 |
| 190 | -1.4980850 |
| 191 | -0.7012291 |
| 192 | -2.0080681 |
| 193 | 1.3227692 |
| 194 | -3.8567543 |
| 195 | -3.4264717 |
| 196 | 4.2870712 |
| 197 | -4.0320854 |
| 198 | 3.1555443 |
| 199 | 0.3187408 |
| 200 | -3.0917816 |
| 201 | -2.2471275 |
| 202 | -0.8287354 |
| 203 | 1.9283905 |
| 204 | 0.0796852 |
| 205 | 3.1874008 |
| 206 | -1.3546486 |
| 207 | 2.8208694 |
| 208 | -0.0478134 |
| 209 | -1.4184074 |
| 210 | 1.7849617 |
| 211 | 1.2271538 |
| 212 | 1.4821358 |
| 213 | -1.5299530 |
| 214 | 1.5777702 |
| 215 | 1.2590370 |
| 216 | -0.3984451 |
| 217 | 2.0718117 |
| 218 | -0.7490273 |
| 219 | -0.1434288 |
| 220 | 1.6415138 |
| 221 | -1.3227730 |
| 222 | -0.7331047 |
| 223 | 1.0040245 |
| 224 | 0.7012329 |
| 225 | 1.0996552 |
| 226 | 1.5140114 |
| 227 | -0.6693420 |
| 228 | 0.3346672 |
| 229 | 0.3825073 |
| 230 | -1.1474876 |
| 231 | -0.0318527 |
| 232 | 1.4183960 |
| 233 | 0.0000000 |
| 234 | -1.8832397 |
| 235 | 0.4184914 |
| 236 | 1.4164619 |
| 237 | -1.1911011 |
| 238 | -0.4989891 |
| 239 | 1.4003525 |
| 240 | -0.2575150 |
| 241 | 0.4989471 |
| 242 | -0.6277428 |
| 243 | -0.0804787 |
| 244 | -0.5955429 |
| 245 | 0.3862991 |
| 246 | -0.0160980 |
| 247 | -0.1287651 |
| 248 | 1.2393913 |
| 249 | 0.0160942 |
| 250 | -4.3941765 |
| 251 | 1.1267052 |
| 252 | 0.0000000 |
| 253 | -0.2414360 |
| 254 | -0.0322037 |
| 255 | 0.9657784 |
| 256 | -0.6116524 |
| 257 | -0.4667778 |
| 258 | -4.2171249 |
| 259 | 0.7243195 |
| 260 | -0.6277390 |
| 261 | 0.0643845 |
| 262 | 0.2575340 |
| 263 | -0.5150681 |
| 264 | 0.2897148 |
| 265 | -0.4989700 |
| 266 | -0.5472488 |
| 267 | -0.9335670 |
| 268 | 0.2092552 |
| 269 | -0.4506989 |
| 270 | 0.9657516 |
| 271 | 0.0965767 |
| 272 | 1.6739845 |
| 273 | 1.2393761 |
| 274 | 0.0000000 |
| 275 | -0.7726021 |
| 276 | -0.4506836 |
| 277 | -0.4667702 |
| 278 | 0.5955276 |
| 279 | 2.2212372 |
| 280 | 0.0321922 |
| 281 | 0.7887001 |
| 282 | -0.1931572 |
| 283 | 1.0462379 |
| 284 | 0.4024086 |
| 285 | 0.3058090 |
| 286 | 3.0099297 |
| 287 | -0.2414474 |
| 288 | -1.2071953 |
| 289 | -0.1931267 |
| 290 | 2.3821907 |
| 291 | 0.3862915 |
| 292 | -0.2275505 |
| 293 | -0.4225845 |
| 294 | -0.2112694 |
| 295 | 0.0649834 |
| 296 | 0.0975227 |
| 297 | -0.2925491 |
| 298 | 0.2925491 |
| 299 | -0.0975227 |
| 300 | -0.9751663 |
| 301 | 0.8776474 |
| 302 | -0.2600365 |
| 303 | -0.1787910 |
| 304 | 0.4713631 |
| 305 | 0.0162430 |
| 306 | -0.1625366 |
| 307 | 0.7476463 |
| 308 | 0.2600517 |
| 309 | -0.0650253 |
| 310 | -0.6988907 |
| 311 | -0.5851059 |
| 312 | -0.3088074 |
| 313 | 0.0812759 |
| 314 | -0.1950340 |
| 315 | -1.4790573 |
| 316 | 0.5201035 |
| 317 | -1.3002586 |
| 318 | -0.0650063 |
| 319 | -0.6988831 |
| 320 | 0.4063377 |
| 321 | -0.8614311 |
| 322 | 0.6826324 |
| 323 | 1.5278053 |
| 324 | -0.0812759 |
| 325 | -0.2925453 |
| 326 | 0.0649986 |
| 327 | -0.3088036 |
| 328 | -0.9914474 |
| 329 | 0.3738289 |
| 330 | -0.4063263 |
| 331 | -0.3900795 |
| 332 | 0.4713364 |
| 333 | 0.5526047 |
| 334 | -0.3575630 |
| 335 | 0.8614197 |
| 336 | -0.5363617 |
| 337 | 0.0162544 |
| 338 | 0.6013832 |
| 339 | -0.9426956 |
| 340 | 0.4875946 |
| 341 | 0.6826401 |
| 342 | -0.1625443 |
| 343 | 0.0487595 |
| 344 | 0.1300354 |
| 345 | -0.0650177 |
| 346 | -0.5038528 |
| 347 | 2.2754517 |
| 348 | -0.2437973 |
| 349 | -0.5038567 |
| 350 | -0.6663780 |
| 351 | 0.5688667 |
| 352 | 1.2189980 |
| 353 | -0.4225845 |
| 354 | -0.7964134 |
| 355 | -3.2181282 |
| 356 | -0.2763138 |
| 357 | 0.3250656 |
| 358 | 1.2189865 |
| 359 | -0.0650139 |
| 360 | 1.8528709 |
| 361 | -0.9195442 |
| 362 | 0.0164185 |
| 363 | 4.5977097 |
| 364 | -0.8538666 |
| 365 | -0.2955627 |
| 366 | -1.5599365 |
| 367 | 1.7569885 |
| 368 | -2.1182365 |
| 369 | 1.0774384 |
| 370 | 0.4846115 |
| 371 | -0.2250137 |
| 372 | 0.8826790 |
| 373 | -0.3115463 |
| 374 | 0.1384621 |
| 375 | -0.1211433 |
| 376 | 1.2114792 |
| 377 | 1.8691788 |
| 378 | 1.9037857 |
| 379 | 2.4056702 |
| 380 | -1.2288055 |
| 381 | 0.4326630 |
| 382 | 1.5749512 |
| 383 | 2.2672043 |
| 384 | -1.2287750 |
| 385 | -0.2077103 |
| 386 | -1.0557022 |
| 387 | -3.3056564 |
| 388 | -0.8653412 |
| 389 | -1.5057068 |
| 390 | 0.3288116 |
| 391 | -0.6057358 |
| 392 | -0.5192261 |
| 393 | -1.1076393 |
| 394 | 1.2114983 |
| 395 | -0.2942200 |
| 396 | -0.7788277 |
| 397 | 0.3980598 |
| 398 | -0.5365105 |
| 399 | 0.1211510 |
| 400 | 0.0000000 |
| 401 | 0.6576538 |
| 402 | -0.5538177 |
| 403 | 0.3288498 |
| 404 | 0.1211472 |
| 405 | 1.1076431 |
| 406 | -1.0211105 |
| 407 | -0.5538216 |
| 408 | -0.1903992 |
| 409 | -0.0865135 |
| 410 | 0.0519028 |
| 411 | -0.3980522 |
| 412 | -0.0346069 |
| 413 | 0.1211281 |
| 414 | 1.2634354 |
| 415 | 0.0519104 |
| 416 | -1.8518486 |
| 417 | 0.0174942 |
| 418 | 0.0699806 |
| 419 | -0.1749611 |
| 420 | -1.4171066 |
| 421 | -0.2624283 |
| 422 | 0.0874634 |
| 423 | 0.0524902 |
| 424 | -0.1749535 |
| 425 | 0.2624397 |
| 426 | -0.4023972 |
| 427 | -0.5423546 |
| 428 | 0.5073662 |
| 429 | -0.0525017 |
| 430 | 0.3499107 |
| 431 | -0.5773506 |
| 432 | -0.2099266 |
| 433 | -0.3149147 |
| 434 | -0.6123428 |
| 435 | -0.2799301 |
| 436 | 0.1224670 |
| 437 | -0.5773354 |
| 438 | 0.3499069 |
| 439 | -0.3149223 |
| 440 | 1.5395889 |
| 441 | -0.3324089 |
| 442 | 0.3324089 |
| 443 | -0.0699883 |
| 444 | 0.1749649 |
| 445 | 0.8397713 |
| 446 | -0.3848953 |
| 447 | 0.4023933 |
| 448 | 0.8222771 |
| 449 | 0.7348061 |
| 450 | -0.0699883 |
| 451 | -0.0349846 |
| 452 | -0.4198952 |
| 453 | 0.8222847 |
| 454 | -1.1197014 |
| 455 | 0.4373779 |
| 456 | 0.1049843 |
| 457 | 1.0147095 |
| 458 | 0.6473427 |
| 459 | -0.8922539 |
| 460 | 0.2099228 |
| 461 | 0.1224747 |
| 462 | -0.0349846 |
| 463 | -0.4024010 |
| 464 | -0.2449226 |
| 465 | 0.0874748 |
| 466 | 1.1196785 |
| 467 | 0.6473389 |
| 468 | 0.3324203 |
| 469 | 0.0174789 |
| 470 | 0.7523117 |
| 471 | 1.6970520 |
| 472 | 0.6298141 |
| 473 | 0.1749420 |
| 474 | 0.8747787 |
| 475 | -1.5570831 |
| 476 | 0.0349960 |
| 477 | 0.0349960 |
| 478 | -0.4023972 |
| 479 | 0.6298294 |
| 480 | -0.3673935 |
| 481 | 0.0874786 |
| 482 | 2.0644608 |
| 483 | 0.2099228 |
| 484 | 0.0349808 |
| 485 | -0.6890106 |
| 486 | 0.6890182 |
| 487 | 0.4947052 |
| 488 | -0.9010620 |
| 489 | 0.6007080 |
| 490 | 0.7243805 |
| 491 | -0.1413422 |
| 492 | 0.1590042 |
| 493 | -0.1060104 |
| 494 | -0.3886871 |
| 495 | 0.5123672 |
| 496 | -0.3003540 |
| 497 | -0.2473373 |
| 498 | -0.8480530 |
| 499 | -0.7243881 |
| 500 | -0.4770126 |
| 501 | 0.1413345 |
| 502 | -0.4063568 |
| 503 | 0.5123749 |
| 504 | 0.3180008 |
| 505 | 0.3180313 |
| 506 | -0.2826843 |
| 507 | -0.2473602 |
| 508 | 1.6961136 |
| 509 | 1.5370789 |
| 510 | -0.9363861 |
| 511 | -0.9187164 |
| 512 | -0.0706711 |
| 513 | -0.5123596 |
| 514 | 0.3180008 |
| 515 | -1.1837234 |
| 516 | 1.0777283 |
| 517 | 0.3356934 |
| 518 | -0.9893875 |
| 519 | 0.2473526 |
| 520 | -0.3710403 |
| 521 | 0.2473526 |
| 522 | -0.0353317 |
| 523 | 0.1060028 |
| 524 | 0.7067184 |
| 525 | 0.3003311 |
| 526 | -0.7773666 |
| 527 | 0.1059952 |
| 528 | -0.1766586 |
| 529 | 0.6360321 |
| 530 | 0.2649994 |
| 531 | -0.1943283 |
| 532 | 0.5300217 |
| 533 | 0.2473526 |
| 534 | 0.4593582 |
| 535 | -0.3533554 |
| 536 | 1.5900955 |
| 537 | -0.0530090 |
| 538 | 0.7950592 |
| 539 | 0.3710251 |
| 540 | 0.2296677 |
| 541 | 0.5123749 |
| 542 | 2.3851395 |
| 543 | -0.4813385 |
| 544 | 0.0356445 |
| 545 | 2.0501709 |
| 546 | 3.0663834 |
| 547 | -0.8735733 |
| 548 | -0.2317429 |
| 549 | 0.0178299 |
| 550 | 1.6223297 |
| 551 | 3.9399185 |
| 552 | -3.3516159 |
| 553 | 1.6579895 |
| 554 | 2.2106171 |
| 555 | 0.7666092 |
| 556 | 2.6919861 |
| 557 | -1.9788818 |
| 558 | -0.9092255 |
| 559 | -0.1426163 |
| 560 | 2.1571579 |
| 561 | -2.7632904 |
| 562 | -1.5510178 |
| 563 | -0.2317734 |
| 564 | -1.3905487 |
| 565 | 0.2852402 |
| 566 | -1.2301254 |
| 567 | -0.0534668 |
| 568 | 1.4262085 |
| 569 | 0.0000000 |
| 570 | -0.1604462 |
| 571 | -0.4278641 |
| 572 | -0.8557358 |
| 573 | -0.7844238 |
| 574 | -1.8005829 |
| 575 | 0.2317657 |
| 576 | 0.1069565 |
| 577 | -0.5348282 |
| 578 | -1.0340042 |
| 579 | 0.5526581 |
| 580 | -0.4991837 |
| 581 | 0.0534897 |
| 582 | 0.4278641 |
| 583 | -0.4457016 |
| 584 | -0.6596222 |
| 585 | -0.9448700 |
| 586 | 0.8735657 |
| 587 | -0.9270477 |
| 588 | -0.1426239 |
| 589 | -0.9092178 |
| 590 | -0.1782684 |
| 591 | -0.5348282 |
| 592 | 1.2835846 |
| 593 | -0.5169983 |
| 594 | -0.6952820 |
| 595 | -0.3743896 |
| 596 | -0.7665939 |
| 597 | 0.4457016 |
| 598 | -0.3208923 |
| 599 | -0.3030701 |
| 600 | 1.3727264 |
| 601 | 1.2657700 |
| 602 | 0.1069489 |
| 603 | 0.5348511 |
| 604 | -0.0178375 |
| 605 | 0.7309647 |
| 606 | -1.0518494 |
| 607 | 0.3743668 |
| 608 | 0.9983673 |
| 609 | -0.1782837 |
| 610 | 3.2268143 |
| 611 | -1.1231384 |
| 612 | -1.0430984 |
| 613 | 8.5604782 |
| 614 | -0.5035477 |
| 615 | -1.8523712 |
| 616 | 3.0932846 |
| 617 | 2.0861816 |
| 618 | -0.8093033 |
| 619 | -0.1438675 |
| 620 | -0.0899277 |
| 621 | 2.2840042 |
| 622 | 0.9711533 |
| 623 | -1.0970612 |
| 624 | 0.7193832 |
| 625 | -0.2158051 |
| 626 | -0.3417206 |
| 627 | 5.5930939 |
| 628 | -2.8774719 |
| 629 | 2.3919144 |
| 630 | 1.7085037 |
| 631 | -2.9494095 |
| 632 | 2.2120438 |
| 633 | -5.0175858 |
| 634 | 0.4316177 |
| 635 | -0.5754929 |
| 636 | 1.2229309 |
| 637 | 1.2588806 |
| 638 | 4.3521805 |
| 639 | 0.6114731 |
| 640 | 5.8628387 |
| 641 | 4.4061432 |
| 642 | -3.1832047 |
| 643 | 2.7695694 |
| 644 | -3.7227402 |
| 645 | 1.0790634 |
| 646 | -1.5106812 |
| 647 | 0.8812332 |
| 648 | -2.1401291 |
| 649 | -0.7733231 |
| 650 | 1.4747162 |
| 651 | 1.1689682 |
| 652 | -4.3162079 |
| 653 | -3.8126526 |
| 654 | 1.9782562 |
| 655 | -1.4207611 |
| 656 | 1.5826187 |
| 657 | 0.9351807 |
| 658 | 0.8092880 |
| 659 | -0.0719299 |
| 660 | -1.9962463 |
| 661 | -1.0610809 |
| 662 | -1.5106506 |
| 663 | -1.0251160 |
| 664 | 0.9171829 |
| 665 | -2.2659836 |
| 666 | -2.2480469 |
| 667 | 1.7984161 |
| 668 | 0.8452682 |
| 669 | 1.3771973 |
| 670 | 1.7396011 |
| 671 | -2.9718399 |
| 672 | 0.6885986 |
| 673 | 1.4315796 |
| 674 | -0.8698196 |
| 675 | -0.6886063 |
| 676 | 0.3805618 |
| 677 | -2.7362823 |
| 678 | -0.4167786 |
| 679 | -1.5765228 |
| 680 | 0.3261642 |
| 681 | -1.7758408 |
| 682 | -0.0181198 |
| 683 | -0.1993256 |
| 684 | -1.4134369 |
| 685 | -0.6704788 |
| 686 | -1.8120956 |
| 687 | -1.1959686 |
| 688 | -1.6490250 |
| 689 | 3.1892853 |
| 690 | -1.4134293 |
| 691 | -2.1563950 |
| 692 | 3.5335999 |
| 693 | 0.2355652 |
| 694 | 1.4859161 |
| 695 | -1.2140961 |
| 696 | -0.9785385 |
| 697 | 2.3738480 |
| 698 | 0.8154449 |
| 699 | 1.9389420 |
| 700 | 3.5879440 |
| 701 | -0.0725021 |
| 702 | 1.2865982 |
| 703 | 2.3919754 |
| 704 | 0.4892578 |
| 705 | -0.5798721 |
| 706 | -2.0839005 |
| 707 | -1.5402832 |
| 708 | 0.7248383 |
| 709 | 0.3442993 |
| 710 | 0.9060364 |
| 711 | -0.9785309 |
| 712 | -0.5436249 |
| 713 | -1.2140884 |
| 714 | -0.3624268 |
| 715 | -1.1416092 |
| 716 | 0.5436172 |
| 717 | 2.9536972 |
| 718 | 4.1497116 |
| 719 | 0.0181122 |
| 720 | -2.2469940 |
| 721 | -1.4859238 |
| 722 | -0.0181198 |
| 723 | 0.0362549 |
| 724 | -2.3194809 |
| 725 | -3.0080719 |
| 726 | -0.7792053 |
| 727 | -1.1597519 |
| 728 | -1.7758560 |
| 729 | 1.4859314 |
| 730 | 0.1449661 |
| 731 | 1.2865829 |
| 732 | 1.3953171 |
| 733 | -2.6094131 |
| 734 | -1.3228226 |
| 735 | 1.7214737 |
| 736 | 0.6704865 |
| 737 | -2.1926422 |
| 738 | 1.0691376 |
| 739 | -0.7248459 |
| 740 | 1.5402985 |
| 741 | -0.0724945 |
| 742 | 2.4480133 |
| 743 | -0.8586349 |
| 744 | 1.3701553 |
| 745 | 1.2240067 |
| 746 | -1.7172546 |
| 747 | 0.4567184 |
| 748 | 3.3249130 |
| 749 | 0.7490158 |
| 750 | 0.9682312 |
| 751 | 0.5480728 |
| 752 | 0.5115280 |
| 753 | -0.1461639 |
| 754 | -1.5893707 |
| 755 | -1.2240143 |
| 756 | 0.5663300 |
| 757 | 0.9499741 |
| 758 | 0.1096191 |
| 759 | 1.2788162 |
| 760 | -0.8951721 |
| 761 | -3.0874176 |
| 762 | -3.3066406 |
| 763 | -3.7633591 |
| 764 | 0.0182571 |
| 765 | 1.0778732 |
| 766 | -1.8816910 |
| 767 | -1.7355194 |
| 768 | 2.8864517 |
| 769 | 1.7538071 |
| 770 | 1.8634033 |
| 771 | 2.7403107 |
| 772 | 0.5297928 |
| 773 | -2.2287979 |
| 774 | 0.5115433 |
| 775 | 2.7220383 |
| 776 | -0.2192230 |
| 777 | -1.2240067 |
| 778 | 2.0278168 |
| 779 | 1.2240067 |
| 780 | -0.4567184 |
| 781 | -0.5115280 |
| 782 | -1.5528259 |
| 783 | -0.4567184 |
| 784 | -0.7307510 |
| 785 | 0.6576691 |
| 786 | -1.8268661 |
| 787 | 1.1326523 |
| 788 | -1.0047760 |
| 789 | 0.5480652 |
| 790 | 0.2009583 |
| 791 | 0.9865112 |
| 792 | 0.9682388 |
| 793 | -0.6393967 |
| 794 | -1.5280762 |
| 795 | -0.3866196 |
| 796 | 0.1840973 |
| 797 | -1.6937714 |
| 798 | 0.3129883 |
| 799 | 0.0000000 |
| 800 | -1.0862045 |
| 801 | 0.5522995 |
| 802 | 0.3866196 |
| 803 | 0.3129807 |
| 804 | -3.0561447 |
| 805 | 3.3507156 |
| 806 | -0.6627731 |
| 807 | 0.2025070 |
| 808 | -1.0862045 |
| 809 | -1.2703323 |
| 810 | 1.0493927 |
| 811 | -0.4602509 |
| 812 | -1.6385498 |
| 813 | -1.0677948 |
| 814 | 0.8652878 |
| 815 | -1.9883423 |
| 816 | -1.0862122 |
| 817 | -0.6996078 |
| 818 | -1.1414337 |
| 819 | 2.5774612 |
| 820 | -1.7121658 |
| 821 | 0.1104431 |
| 822 | 0.6812057 |
| 823 | 1.7490005 |
| 824 | 1.3991852 |
| 825 | -0.1472931 |
| 826 | -2.8904495 |
| 827 | -0.0736084 |
| 828 | -0.3866425 |
| 829 | 0.1656952 |
| 830 | -1.0862122 |
| 831 | -1.2335052 |
| 832 | -1.5648880 |
| 833 | 1.1966705 |
| 834 | -0.9020996 |
| 835 | -0.4602661 |
| 836 | 0.4786758 |
| 837 | 0.6259537 |
| 838 | -0.4970856 |
| 839 | -0.7364273 |
| 840 | 0.6996078 |
| 841 | 0.5891342 |
| 842 | -0.6259613 |
| 843 | -1.8962784 |
| 844 | -1.4176025 |
| 845 | -1.0494003 |
| 846 | 0.3129730 |
| 847 | 0.2025223 |
| 848 | 1.7490005 |
| 849 | -0.2209320 |
| 850 | 1.4544220 |
| 851 | 0.8100739 |
| 852 | -1.8042450 |
| 853 | -0.3682022 |
| 854 | 3.7557373 |
| 855 | 1.0862198 |
| 856 | 0.0920486 |
| 857 | 0.8653030 |
| 858 | -0.5891342 |
| 859 | 3.1113739 |
| 860 | -1.6201401 |
| 861 | 2.6879349 |
| 862 | -1.7305756 |
| 863 | -0.1856918 |
| 864 | 1.2069473 |
| 865 | -0.2414017 |
| 866 | 0.4827728 |
| 867 | -1.1697845 |
| 868 | 1.2254944 |
| 869 | 0.4085083 |
| 870 | 3.0452042 |
| 871 | -1.2440872 |
| 872 | -0.9655533 |
| 873 | 0.5199280 |
| 874 | -0.1856842 |
| 875 | -0.0928497 |
| 876 | 1.6711502 |
| 877 | -0.4270782 |
| 878 | 0.6684647 |
| 879 | 0.6684570 |
| 880 | -0.1485367 |
| 881 | 1.1883545 |
| 882 | 1.7639923 |
| 883 | -0.3156662 |
| 884 | -0.3342361 |
| 885 | -1.8939590 |
| 886 | 0.9841309 |
| 887 | 2.8594971 |
| 888 | -0.1113968 |
| 889 | 0.8170013 |
| 890 | 1.6897049 |
| 891 | 2.6181335 |
| 892 | -1.6154404 |
| 893 | -4.1035843 |
| 894 | -0.0742722 |
| 895 | -0.0742722 |
| 896 | 0.6313171 |
| 897 | -0.0371399 |
| 898 | 0.3527985 |
| 899 | -1.2997742 |
| 900 | -0.6127625 |
| 901 | 0.9841385 |
| 902 | -0.1671295 |
| 903 | 0.0371323 |
| 904 | -2.0982132 |
| 905 | -0.8727036 |
| 906 | 2.3395844 |
| 907 | -4.6977615 |
| 908 | -1.4297562 |
| 909 | -0.3156509 |
| 910 | 0.4827576 |
| 911 | 0.2599640 |
| 912 | -3.2865753 |
| 913 | -2.0053711 |
| 914 | -0.0742874 |
| 915 | 0.2785187 |
| 916 | -0.2413788 |
| 917 | -0.5013351 |
| 918 | 0.6684570 |
| 919 | -0.7682877 |
| 920 | -0.8619919 |
| 921 | -0.4497223 |
| 922 | 1.1430588 |
| 923 | -0.3560333 |
| 924 | 0.6933289 |
| 925 | -0.5246658 |
| 926 | -0.5621796 |
| 927 | -0.3185577 |
| 928 | 0.7308197 |
| 929 | -1.1992798 |
| 930 | 1.0118942 |
| 931 | 0.2061157 |
| 932 | -0.5059433 |
| 933 | -0.7495499 |
| 934 | -0.6933365 |
| 935 | 0.4872055 |
| 936 | -0.9556808 |
| 937 | -0.5996399 |
| 938 | -0.1499023 |
| 939 | -1.0306244 |
| 940 | -1.8176651 |
| 941 | -0.3935013 |
| 942 | -0.7308197 |
| 943 | 0.8245010 |
| 944 | 0.9931564 |
| 945 | -0.0749512 |
| 946 | -1.4428940 |
| 947 | -0.4122467 |
| 948 | -1.2367630 |
| 949 | -0.1311646 |
| 950 | 0.8807220 |
| 951 | 0.0749512 |
| 952 | 0.7120743 |
| 953 | 0.1686478 |
| 954 | -0.5059509 |
| 955 | 1.3304596 |
| 956 | -0.2810898 |
| 957 | -1.2180099 |
| 958 | 0.3185577 |
| 959 | 0.3935165 |
| 960 | -0.3185577 |
| 961 | -0.4309921 |
| 962 | 0.4871979 |
| 963 | 0.2436142 |
| 964 | 0.7870178 |
| 965 | 1.0306320 |
| 966 | -0.8432388 |
| 967 | 1.2180099 |
| 968 | -0.0936813 |
| 969 | 0.4309845 |
| 970 | 0.1124268 |
| 971 | -0.7870255 |
| 972 | 0.1874008 |
| 973 | -0.5246964 |
| 974 | -0.0187302 |
| 975 | -1.1805420 |
| 976 | -0.5809021 |
| 977 | -0.7308121 |
| 978 | 0.6745911 |
| 979 | -0.5621643 |
| 980 | -1.0868378 |
| 981 | -1.3117218 |
| 982 | 0.2061310 |
| 983 | 0.2810745 |
| 984 | 0.5996323 |
| 985 | -0.2810669 |
| 986 | -1.1430664 |
| 987 | -0.4122467 |
| 988 | 0.4872055 |
| 989 | 0.3372879 |
| 990 | -0.3560257 |
| 991 | -0.3373032 |
| 992 | -0.5871811 |
| 993 | -0.4356689 |
| 994 | -0.3598785 |
| 995 | -0.2841187 |
| 996 | -0.4924850 |
| 997 | -0.5114136 |
| 998 | 0.5492935 |
| 999 | 3.7504272 |
| 1000 | 1.6857910 |
| 1001 | -1.9130859 |
| 1002 | -1.5153275 |
| 1003 | -0.4356537 |
| 1004 | -1.1175461 |
| 1005 | 1.9130859 |
| 1006 | 0.0000000 |
| 1007 | 0.6440125 |
| 1008 | 0.5493011 |
| 1009 | -0.5303574 |
| 1010 | 0.9849548 |
| 1011 | 0.3788300 |
| 1012 | -0.2273026 |
| 1013 | 1.7615662 |
| 1014 | 0.7197800 |
| 1015 | -1.7426224 |
| 1016 | 0.7387238 |
| 1017 | 0.5871887 |
| 1018 | -1.3637924 |
| 1019 | -0.8334198 |
| 1020 | -0.3220139 |
| 1021 | -0.8144913 |
| 1022 | -2.6707458 |
| 1023 | -0.8902512 |
| 1024 | -0.2462311 |
| 1025 | -0.3220139 |
| 1026 | 1.0607224 |
| 1027 | -0.0568161 |
| 1028 | -0.3598938 |
| 1029 | -1.5721436 |
| 1030 | -0.1894150 |
| 1031 | 0.2841110 |
| 1032 | 0.6440201 |
| 1033 | -0.0568237 |
| 1034 | 0.1325912 |
| 1035 | 0.4924774 |
| 1036 | -0.8713074 |
| 1037 | 0.7197723 |
| 1038 | 0.3788223 |
| 1039 | 0.6250763 |
| 1040 | 1.1933212 |
| 1041 | 0.2083511 |
| 1042 | -0.8523636 |
| 1043 | 0.2841187 |
| 1044 | -1.1491470 |
| 1045 | -0.2489929 |
| 1046 | -0.0191422 |
| 1047 | -0.8618622 |
| 1048 | -0.4979706 |
| 1049 | -0.6703415 |
| 1050 | 0.0383072 |
| 1051 | 1.2640610 |
| 1052 | -0.0766068 |
| 1053 | 0.3830566 |
| 1054 | -0.2298279 |
| 1055 | 0.6128693 |
| 1056 | 0.0574570 |
| 1057 | -1.3023605 |
| 1058 | 0.1723633 |
| 1059 | 1.9727173 |
| 1060 | 0.2872849 |
| 1061 | 0.6703415 |
| 1062 | -0.3255920 |
| 1063 | -0.3447495 |
| 1064 | -0.9576263 |
| 1065 | 0.4213562 |
| 1066 | -0.3255997 |
| 1067 | -0.1148987 |
| 1068 | -0.4788208 |
| 1069 | -0.9959335 |
| 1070 | 0.7660980 |
| 1071 | -0.7660980 |
| 1072 | -1.9344101 |
| 1073 | -0.1723709 |
| 1074 | -0.0574570 |
| 1075 | -0.5937347 |
| 1076 | 0.4022141 |
| 1077 | -0.1340714 |
| 1078 | 0.1340714 |
| 1079 | -0.1532288 |
| 1080 | -0.8235550 |
| 1081 | 0.6703339 |
| 1082 | -0.7086487 |
| 1083 | -1.4747391 |
| 1084 | -0.3064423 |
| 1085 | 0.5554276 |
| 1086 | -1.1108475 |
| 1087 | -0.5745811 |
| 1088 | -0.0191498 |
| 1089 | 2.0684700 |
| 1090 | 1.4747467 |
| 1091 | -0.0766068 |
| 1092 | -1.1299973 |
| 1093 | 0.3064423 |
| 1094 | -0.6511841 |
| 1095 | 0.1340599 |
| 1096 | -0.0574608 |
| 1097 | -0.1149101 |
| 1098 | -0.3639030 |
| 1099 | -1.5513496 |
| 1100 | 2.2216949 |
| 1101 | -0.9959297 |
| 1102 | -2.5664406 |
| 1103 | -0.4213600 |
| 1104 | -1.0342369 |
| 1105 | 0.3638954 |
| 1106 | -0.7852516 |
| 1107 | 0.5745735 |
| 1108 | 0.8235588 |
| 1109 | -2.0110092 |
| 1110 | 0.8427048 |
| 1111 | 0.0191536 |
| 1112 | -0.0957603 |
| 1113 | -0.0191536 |
| 1114 | 1.4555931 |
| 1115 | -0.1532211 |
| 1116 | 0.1340675 |
| 1117 | -0.8235588 |
| 1118 | -1.4169846 |
| 1119 | -0.3882141 |
| 1120 | -0.9705429 |
| 1121 | 0.5435028 |
| 1122 | 1.8052025 |
| 1123 | -0.8152504 |
| 1124 | 0.2911606 |
| 1125 | 0.1164627 |
| 1126 | 0.6211472 |
| 1127 | 0.0388184 |
| 1128 | 0.3493958 |
| 1129 | -0.6987877 |
| 1130 | -0.8734818 |
| 1131 | 0.7570152 |
| 1132 | 0.7570229 |
| 1133 | -3.0280800 |
| 1134 | 0.7182007 |
| 1135 | -0.3688049 |
| 1136 | -0.5823250 |
| 1137 | -0.3105736 |
| 1138 | 0.2911644 |
| 1139 | -0.2717514 |
| 1140 | -0.1164665 |
| 1141 | -3.7268677 |
| 1142 | -1.0287704 |
| 1143 | 0.9705391 |
| 1144 | 0.8346634 |
| 1145 | 2.1351852 |
| 1146 | -1.0287743 |
| 1147 | 1.3199348 |
| 1148 | 0.1746941 |
| 1149 | 0.0194130 |
| 1150 | 0.3882141 |
| 1151 | 0.3493958 |
| 1152 | 0.0000000 |
| 1153 | 1.8246117 |
| 1154 | 0.0000000 |
| 1155 | -1.2422867 |
| 1156 | 0.7376060 |
| 1157 | 0.2135201 |
| 1158 | -0.3493958 |
| 1159 | -0.7958374 |
| 1160 | -1.1452408 |
| 1161 | 0.5823250 |
| 1162 | -0.7376099 |
| 1163 | -0.3299828 |
| 1164 | -0.1164627 |
| 1165 | 0.3688049 |
| 1166 | 0.0582314 |
| 1167 | 0.2329330 |
| 1168 | -0.1941147 |
| 1169 | -0.8669243 |
| 1170 | 0.0000000 |
| 1171 | 0.0197029 |
| 1172 | -0.9063301 |
| 1173 | 0.1182175 |
| 1174 | 0.4137611 |
| 1175 | -0.7093048 |
| 1176 | -0.7093048 |
| 1177 | 1.8323669 |
| 1178 | 0.1182175 |
| 1179 | 0.0197029 |
| 1180 | -0.0197029 |
| 1181 | 0.1970291 |
| 1182 | -1.3594971 |
| 1183 | 0.2758408 |
| 1184 | 0.7881165 |
| 1185 | 0.2167320 |
| 1186 | -0.0591125 |
| 1187 | 0.1576233 |
| 1188 | -0.2364349 |
| 1189 | 0.4137611 |
| 1190 | -1.1427650 |
| 1191 | -0.5713844 |
| 1192 | 0.2955475 |
| 1193 | -0.9457436 |
| 1194 | 0.0591125 |
| 1195 | -1.3792038 |
| 1196 | 0.3743553 |
| 1197 | 2.1870193 |
| 1198 | -0.7881126 |
| 1199 | 0.8472176 |
| 1200 | 2.2658348 |
| 1201 | -0.7093048 |
| 1202 | 0.4137573 |
| 1203 | -0.1773262 |
| 1204 | -0.3743515 |
| 1205 | -0.4334641 |
| 1206 | -0.1773262 |
| 1207 | 0.1379242 |
| 1208 | -0.0788155 |
| 1209 | -0.5910835 |
| 1210 | 0.1379204 |
| 1211 | 0.3152428 |
| 1212 | 0.3743553 |
| 1213 | -0.0591087 |
| 1214 | -0.0591087 |
| 1215 | -0.3349495 |
| 1216 | -0.6501961 |
| 1217 | -1.1230621 |
| 1218 | 0.0197029 |
| 1219 | -0.1576195 |
| 1220 | 0.3940582 |
| 1221 | -0.9063339 |
| 1222 | 0.0394058 |
| 1223 | -0.9457359 |
| 1224 | 0.0985107 |
| 1225 | -0.4334602 |
| 1226 | -0.5319786 |
| 1227 | -0.0591087 |
| 1228 | 1.2018738 |
| 1229 | 0.5122757 |
| 1230 | 0.1182175 |
| 1231 | -0.0985146 |
| 1232 | -1.9899902 |
| 1233 | 0.2758408 |
| 1234 | 0.4728661 |
| 1235 | -0.0394020 |
| 1236 | 3.0736465 |
| 1237 | 1.0245514 |
| 1238 | 0.2167282 |
| 1239 | 0.6896019 |
| 1240 | -0.7684135 |
| 1241 | 0.9851456 |
| 1242 | 0.6599998 |
| 1243 | -0.3400002 |
| 1244 | 0.8600006 |
| 1245 | -0.1200027 |
| 1246 | 0.8800011 |
| 1247 | 0.2000008 |
| 1248 | -0.5600014 |
| 1249 | -0.2199974 |
| 1250 | 0.0599976 |
| 1251 | 2.0800018 |
| 1252 | -1.8199997 |
| 1253 | 0.3799973 |
| 1254 | -1.1599998 |
| 1255 | -0.9599991 |
| 1256 | 0.7600021 |
| 1257 | 0.9199982 |
Usted piensa realizar una inversión de 100 millones de dólares usando un contrato swap 5 años semi-semi, con tasa de 3.33%, la flotante se asume de la tasa Secured Overnight Financing Rate (SORF), pero como no conoce los valores de las tasas futuras del SORF para los próximos 5 años en pagos, se sugiere simule las tasas que se obtendrán en esos flujos. Para ello
datosSORF=read.csv("SORF.csv",sep = ";", dec = ".", fill = TRUE)
head(datosSORF)
## Fecha Rate
## 1 2/04/2018 0.0180
## 2 3/04/2018 0.0183
## 3 4/04/2018 0.0174
## 4 5/04/2018 0.0175
## 5 6/04/2018 0.0175
## 6 9/04/2018 0.0175
options(scipen = 999)
class(datosSORF[,"Fecha"])
## [1] "character"
datosSORF[,"Fecha"]<-as.Date(datosSORF[,"Fecha"],format = "%d/%m/%Y")
class(datosSORF[,"Fecha"])
## [1] "Date"
media_SORF <- mean(datosSORF[,"Rate"])
SD_SORF <- sd(datosSORF[,"Rate"])
# Parámetros del modelo de Vasicek
alpha <- 0.01 # Velocidad de reversión a la media
beta <- media_SORF # Media de largo plazo de la tasa de interés
sigma <- SD_SORF # Volatilidad de la tasa de interés
r0 <- tail(datosSORF[, 2], 1) # Tasa de interés inicial
# Configuración de la simulación
horizonte <- 4.5 # Años
n_periodos <- 2 * horizonte # Pagos semestrales
dt <- 1 / 2 # Incremento de tiempo (en años)
# Crear un vector de tiempo
tiempo <- seq(0, horizonte, by = dt)
# Simulación de la tasa de interés usando el modelo de Vasicek
set.seed(123) # Para reproducibilidad
tasas <- numeric(length(tiempo))
tasas[1] <- r0
for (i in 2:length(tiempo)) {
dt_i <- tiempo[i] - tiempo[i - 1]
dW <- rnorm(1, mean = 0, sd = sqrt(dt_i))
tasas[i] <- tasas[i - 1] + alpha * (beta - tasas[i - 1]) * dt_i + sigma * dW
}
# Crear un data frame con los resultados
resultados <- data.frame(
Semestre = 1:length(tiempo),
Tiempo = tiempo,
Tasa = tasas
)
# Mostrar la tabla de resultados
print(resultados)
## Semestre Tiempo Tasa
## 1 1 0.0 0.05330000
## 2 2 0.5 0.04550463
## 3 3 1.0 0.04224689
## 4 4 1.5 0.06337006
## 5 5 2.0 0.06411833
## 6 6 2.5 0.06566344
## 7 7 3.0 0.08879911
## 8 8 3.5 0.09473759
## 9 9 4.0 0.07713858
## 10 10 4.5 0.06750275
# Graficar los resultados
plot(tiempo, tasas, type = "l", col = "blue", lwd = 2,
xlab = "Tiempo (años)", ylab = "Tasa de Interés",
main = "Simulación del Modelo de Vasicek")
grid()
Inversión<- 100000000
tasaAnual<- 0.033
tasaSemestral<-((1+tasaAnual)^(180/360))-1
PagoTasafija<-Inversión*tasaSemestral
# Calcular los pagos multiplicando la inversión inicial por las tasas simuladas
pagos <- Inversión * tasas
Neto=pagos-PagoTasafija
# Crear un data frame con los resultados
resultados <- data.frame(
Semestre = 1:length(tiempo),
TasaSemestreAnterior = tasas,
PagoVariable = pagos,
Pagofijo= PagoTasafija,
Neto= Neto
)
# Mostrar la tabla de resultados
print(resultados)
## Semestre TasaSemestreAnterior PagoVariable Pagofijo Neto
## 1 1 0.05330000 5330000 1636608 3693392
## 2 2 0.04550463 4550463 1636608 2913855
## 3 3 0.04224689 4224689 1636608 2588081
## 4 4 0.06337006 6337006 1636608 4700398
## 5 5 0.06411833 6411833 1636608 4775226
## 6 6 0.06566344 6566344 1636608 4929737
## 7 7 0.08879911 8879911 1636608 7243303
## 8 8 0.09473759 9473759 1636608 7837152
## 9 9 0.07713858 7713858 1636608 6077250
## 10 10 0.06750275 6750275 1636608 5113668
La posición con tasa SORF variable ofrece una clara ventaja en los pagos en comparación con la tasa fija pactada. Esto se debe a que la tasa SORF actual está significativamente por encima de la tasa fija acordada, y no se anticipa que la tasa SORF descienda al nivel de la tasa fija o por debajo de ella en el futuro previsible.