Modelo de Volatilidad
de los retornos GARCH

# Instalar y cargar librerías necesarias
# install.packages(c("ggplot2", "dplyr", "plotly", "TTR", "zoo"))
library(ggplot2)
library(dplyr)
library(plotly)
library(TTR) # Para Bandas de Bollinger y EMAs
library(zoo)
# Cargar datos desde el archivo CSV
df <- read.csv("cotiza_modified.csv", stringsAsFactors = FALSE)
# Convertir la columna de fecha a formato Date y ordenar
df$date <- as.Date(df$date, format="%m/%d/%Y")
df <- df %>% arrange(date)
# Calcular Bandas de Bollinger y EMAs para **Compra**
bbands_compra <- BBands(df$Compra, n = 10, sd = 2)
df$BB_Upper_Compra <- bbands_compra[, "up"]
df$BB_Lower_Compra <- bbands_compra[, "dn"]
df$BB_Middle_Compra <- bbands_compra[, "mavg"]
df$EMA_20_Compra <- EMA(df$Compra, n = 20)
df$EMA_10_Compra <- EMA(df$Compra, n = 10)
# Calcular Bandas de Bollinger y EMAs para **Venta**
bbands_venta <- BBands(df$Venta, n = 10, sd = 2)
df$BB_Upper_Venta <- bbands_venta[, "up"]
df$BB_Lower_Venta <- bbands_venta[, "dn"]
df$BB_Middle_Venta <- bbands_venta[, "mavg"]
df$EMA_20_Venta <- EMA(df$Venta, n = 20)
df$EMA_10_Venta <- EMA(df$Venta, n = 10)
# Filtrar datos desde una fecha específica para mejorar visualización
df_plot <- df %>% filter(date >= as.Date("2024-03-01"))
# 📈 **Gráfico de Compra (Objeto Separado)**
p_compra <- plot_ly(df_plot, x = ~date) %>%
add_ribbons(ymin = ~BB_Lower_Compra, ymax = ~BB_Upper_Compra,
fillcolor = 'rgba(255, 0, 0, 0.2)', name = "Bollinger Bandas") %>%
add_lines(y = ~Compra, name = "Precio Compra", line = list(color = "black")) %>%
add_lines(y = ~BB_Middle_Compra, name = "Bollinger Media", line = list(color = "blue")) %>%
add_lines(y = ~EMA_20_Compra, name = "EMA 20", line = list(color = "green")) %>%
add_lines(y = ~EMA_10_Compra, name = "EMA 10", line = list(color = "orange", dash = "dot")) %>%
layout(title = "Cotización USDT-BOB (Compra) con Bollinger Bands y EMAs",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Precio Compra (BOB)"))
# 📉 **Gráfico de Venta (Objeto Separado)**
p_venta <- plot_ly(df_plot, x = ~date) %>%
add_ribbons(ymin = ~BB_Lower_Venta, ymax = ~BB_Upper_Venta,
fillcolor = 'rgba(255, 0, 0, 0.2)', name = "Bollinger Bandas") %>%
add_lines(y = ~Venta, name = "Precio Venta", line = list(color = "black")) %>%
add_lines(y = ~BB_Middle_Venta, name = "Bollinger Media", line = list(color = "blue")) %>%
add_lines(y = ~EMA_20_Venta, name = "EMA 20", line = list(color = "green")) %>%
add_lines(y = ~EMA_10_Venta, name = "EMA 10", line = list(color = "orange", dash = "dot")) %>%
layout(title = "Cotización USDT-BOB (Venta) con Bollinger Bands y EMAs",
xaxis = list(title = "Fecha"),
yaxis = list(title = "Precio Venta (BOB)"))
# **Mostrar gráficos separados**
p_compra # Ejecuta para visualizar el gráfico de COMPRA
p_venta # Ejecuta para visualizar el gráfico de VENTA
# Instalar y cargar librerías necesarias
# install.packages("quantmod")
library(quantmod)
# Cargar datos desde el archivo CSV
df <- read.csv("cotiza_modified.csv", stringsAsFactors = FALSE)
# Convertir la columna de fecha a formato Date y ordenar
df$date <- as.Date(df$date, format="%m/%d/%Y")
df <- df[order(df$date), ]
# **Calcular el Spread (Venta - Compra)**
df$Spread <- df$Venta - df$Compra
# **Crear objeto xts con Compra, Venta y Spread**
data_xts <- xts(df[, c("Compra", "Venta", "Spread")], order.by = df$date)
# 📈 **Gráfico de COMPRA con Bollinger y EMAs**
chartSeries(data_xts$Compra,
theme = chartTheme("white"),
name = "Cotización USDT-BOB (Compra)",
TA = list("addBBands(n = 10)", # Bandas de Bollinger (10 días)
"addVo()", # Volumen (si se tiene)
"addEMA(20)", # Media Móvil Exponencial de 20 días
"addEMA(10, col = 2)")) # Media Móvil Exponencial de 10 días en rojo

# 📉 **Gráfico de VENTA con Bollinger y EMAs**
chartSeries(data_xts$Venta,
theme = chartTheme("white"),
name = "Cotización USDT-BOB (Venta)",
TA = list("addBBands(n = 10)", # Bandas de Bollinger (10 días)
"addVo()", # Volumen (si se tiene)
"addEMA(20)", # Media Móvil Exponencial de 20 días
"addEMA(10, col = 2)")) # Media Móvil Exponencial de 10 días en rojo

# 📊 **Gráfico del SPREAD con Bollinger y EMAs**
chartSeries(data_xts$Spread,
theme = chartTheme("white"),
name = "Evolución del Spread (Venta - Compra)",
TA = list("addBBands(n = 10)", # Bandas de Bollinger (10 días)
"addVo()", # Volumen (si se tiene)
"addEMA(20)", # Media Móvil Exponencial de 20 días
"addEMA(10, col = 2)")) # Media Móvil Exponencial de 10 días en rojo
