# Instalar y cargar las bibliotecas necesarias
if(!require(readxl)) install.packages("readxl", dependencies=TRUE)
## Cargando paquete requerido: readxl
if(!require(quantmod)) install.packages("quantmod", dependencies=TRUE)
## Cargando paquete requerido: quantmod
## Cargando paquete requerido: xts
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Cargando paquete requerido: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
if(!require(PerformanceAnalytics)) install.packages("PerformanceAnalytics", dependencies=TRUE)
## Cargando paquete requerido: PerformanceAnalytics
##
## Adjuntando el paquete: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
if(!require(MASS)) install.packages("MASS", dependencies=TRUE)
## Cargando paquete requerido: MASS
library(readxl)
library(quantmod)
library(PerformanceAnalytics)
library(MASS)
# Leer los datos de Excel
ruta_archivo <- "C://Users//Gerencial General//Desktop//R Studio//EURUSD PRICE.xlsx"
datos <- read_excel(ruta_archivo)
# Convertir la columna de precios a un vector numérico
precios <- as.numeric(datos$PRECIO)
# Calcular los retornos logarítmicos
retornos <- diff(log(precios))
# Parámetros
nivel_confianza <- 0.95
inversiones <- c(1000, 5000, 10000) # Vector de montos de inversión
# Resultados del VaR para cada método
resultados <- data.frame(Inversión = inversiones,
VaR_Parametrico = numeric(length(inversiones)),
Perdida_Parametrico = numeric(length(inversiones)),
VaR_NoParametrico = numeric(length(inversiones)),
Perdida_NoParametrico = numeric(length(inversiones)),
VaR_MonteCarlo = numeric(length(inversiones)),
Perdida_MonteCarlo = numeric(length(inversiones)))
# Método Paramétrico
media_retornos <- mean(retornos)
desviacion_estandar <- sd(retornos)
VaR_parametrico_porcentaje <- qnorm(1 - nivel_confianza, mean = media_retornos, sd = desviacion_estandar)
# Método No Paramétrico
VaR_no_parametrico_porcentaje <- quantile(retornos, probs = 1 - nivel_confianza)
# Simulación de Monte Carlo
set.seed(123)
n_simulaciones <- 10000
simulaciones <- replicate(n_simulaciones, {
simulacion <- rnorm(length(retornos), mean = media_retornos, sd = desviacion_estandar)
min(simulacion)
})
VaR_montecarlo_porcentaje <- quantile(simulaciones, probs = 1 - nivel_confianza)
# Calcular VaR y Pérdida Esperada para cada inversión
for (i in 1:length(inversiones)) {
inversion <- inversiones[i]
# Paramétrico
resultados$VaR_Parametrico[i] <- VaR_parametrico_porcentaje
resultados$Perdida_Parametrico[i] <- inversion * abs(VaR_parametrico_porcentaje)
# No Paramétrico
resultados$VaR_NoParametrico[i] <- VaR_no_parametrico_porcentaje
resultados$Perdida_NoParametrico[i] <- inversion * abs(VaR_no_parametrico_porcentaje)
# Monte Carlo
resultados$VaR_MonteCarlo[i] <- VaR_montecarlo_porcentaje
resultados$Perdida_MonteCarlo[i] <- inversion * abs(VaR_montecarlo_porcentaje)
}
# Mostrar los resultados en un data frame
knitr::kable(resultados, caption = "VaR y Pérdida Esperada para Diferentes Montos de Inversión")
VaR y Pérdida Esperada para Diferentes Montos de
Inversión
| 1000 |
-0.0080251 |
8.025072 |
-0.0081685 |
8.168522 |
-0.0182275 |
18.22747 |
| 5000 |
-0.0080251 |
40.125362 |
-0.0081685 |
40.842611 |
-0.0182275 |
91.13736 |
| 10000 |
-0.0080251 |
80.250724 |
-0.0081685 |
81.685223 |
-0.0182275 |
182.27473 |
# Graficar los resultados
par(mfrow=c(2,2), mar=c(4, 4, 2, 1))
# Histograma de retornos
hist(retornos, breaks = 50, main = "Histograma de Retornos", xlab = "Retornos", col = "lightblue", border = "black")
abline(v = VaR_parametrico_porcentaje, col = "red", lwd = 2, lty = 2)
abline(v = VaR_no_parametrico_porcentaje, col = "blue", lwd = 2, lty = 2)
# Densidad de Retornos
plot(density(retornos), main = "Densidad de Retornos", xlab = "Retornos", col = "darkgreen", lwd = 2)
abline(v = VaR_parametrico_porcentaje, col = "red", lwd = 2, lty = 2)
abline(v = VaR_no_parametrico_porcentaje, col = "blue", lwd = 2, lty = 2)
# Histograma de simulaciones Monte Carlo
hist(simulaciones, breaks = 50, main = "Simulaciones de Monte Carlo", xlab = "Retornos Simulados", col = "lightgreen", border = "black")
abline(v = VaR_montecarlo_porcentaje, col = "purple", lwd = 2, lty = 2)
# Retornos en el tiempo
plot(datos$DATE[-1], retornos, type = "l", col = "darkblue", lwd = 2, main = "Retornos en el Tiempo", xlab = "Fecha", ylab = "Retornos")
