R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Instalación y carga de paquetes

# Instalar paquetes necesarios (ejecutar una vez si no están instalados)
if (!requireNamespace("quantmod", quietly = TRUE)) install.packages("quantmod")
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
if (!requireNamespace("PerformanceAnalytics", quietly = TRUE)) install.packages("PerformanceAnalytics")
if (!requireNamespace("tseries", quietly = TRUE)) install.packages("tseries")

# Cargar librerías
library(quantmod)
## Warning: package 'quantmod' was built under R version 4.2.3
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.2.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.2.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Warning: package 'TTR' was built under R version 4.2.3
library(PerformanceAnalytics)  # para funciones financieras adicionales
## Warning: package 'PerformanceAnalytics' was built under R version 4.2.3
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
library(tseries)               # para pruebas de estacionariedad
## Warning: package 'tseries' was built under R version 4.2.3

Definir los activos financieros

activos <- c("AAPL", "NVDA", "MSFT", "AMZN", "GOOGL", "SPY")  # Apple, Nvidia, Microsoft, Amazon, Google, S&P 500 ETF

Descargar datos financieros

getSymbols(activos, src = "yahoo", from = "2020-01-01")
## [1] "AAPL"  "NVDA"  "MSFT"  "AMZN"  "GOOGL" "SPY"
# Extraer precios de cierre ajustado y combinar en un solo objeto xts
precios <- do.call(merge, lapply(activos, function(x) Ad(get(x))))
colnames(precios) <- activos

# Ver las primeras filas de los datos descargados
head(precios)
##                AAPL     NVDA     MSFT    AMZN    GOOGL      SPY
## 2020-01-02 72.71607 5.972162 153.3233 94.9005 68.10838 300.2915
## 2020-01-03 72.00913 5.876571 151.4141 93.7485 67.75208 298.0177
## 2020-01-06 72.58292 5.901215 151.8055 95.1440 69.55795 299.1547
## 2020-01-07 72.24154 5.972659 150.4214 95.3430 69.42359 298.3134
## 2020-01-08 73.40363 5.983861 152.8173 94.5985 69.91772 299.9034
## 2020-01-09 74.96281 6.049581 154.7265 95.0525 70.65173 301.9369

Cálculo de retornos diarios

# Calcular retornos diarios porcentuales (rendimientos) a partir de precios ajustados
retornos <- na.omit(precios / lag(precios) - 1)
# Calcular medidas descriptivas para cada activo
medias   <- apply(retornos, 2, mean)
medianas <- apply(retornos, 2, median)
vars    <- apply(retornos, 2, var)
sds     <- apply(retornos, 2, sd)

medias
##         AAPL         NVDA         MSFT         AMZN        GOOGL          SPY 
## 0.0010500597 0.0027995971 0.0008746717 0.0008020260 0.0008435254 0.0005648554
medianas
##         AAPL         NVDA         MSFT         AMZN        GOOGL          SPY 
## 0.0011723941 0.0032094965 0.0009582467 0.0007111003 0.0015368322 0.0009000738
sds      # (La desviación estándar es la raíz cuadrada de la varianza)
##       AAPL       NVDA       MSFT       AMZN      GOOGL        SPY 
## 0.01986875 0.03432835 0.01907799 0.02245878 0.02048273 0.01309886
# Calcular asimetría y curtosis de cada activo
skews   <- apply(retornos, 2, PerformanceAnalytics::skewness)
curtosis <- apply(retornos, 2, PerformanceAnalytics::kurtosis)

skews
##        AAPL        NVDA        MSFT        AMZN       GOOGL         SPY 
##  0.09063338  0.28412506 -0.02321513  0.06718075 -0.09316830 -0.53322098
curtosis
##      AAPL      NVDA      MSFT      AMZN     GOOGL       SPY 
##  5.104889  4.021484  7.022117  3.935149  3.465041 11.363899

Gráficos de precios ajustados

# Graficar precios ajustados de cada activo a lo largo del tiempo
# Opción 1: Usar chartSeries de quantmod para cada activo individualmente
chartSeries(AAPL$AAPL.Adjusted, name = "Precio AAPL", theme = chartTheme("white"))

Gráficos de precios ajustados

# Graficar precios ajustados de cada activo a lo largo del tiempo
chartSeries(NVDA$NVDA.Adjusted, name = "Precio NVDA", theme = chartTheme("white"))

Gráficos de precios ajustados

# Graficar precios ajustados de cada activo a lo largo del tiempo
chartSeries(MSFT$MSFT.Adjusted, name = "Precio MSFT", theme = chartTheme("white"))

Gráficos de precios ajustados

# Graficar precios ajustados de cada activo a lo largo del tiempo
chartSeries(AMZN$AMZN.Adjusted, name = "Precio AMZN", theme = chartTheme("white"))

# Graficar precios ajustados de cada activo a lo largo del tiempo
chartSeries(GOOGL$GOOGL.Adjusted, name = "Precio GOOGL", theme = chartTheme("white"))

Gráficos de precios ajustados

# Graficar precios ajustados de cada activo a lo largo del tiempo
chartSeries(SPY$SPY.Adjusted, name = "Precio SPY", theme = chartTheme("white"))

hist(retornos$AAPL, breaks = 30, main = "Histograma de retornos diarios AAPL",
     xlab = "Retorno diario", col = "lightblue")

boxplot(coredata(retornos), names = colnames(retornos), 
        main = "Boxplot de retornos diarios (2020-2025)", 
        las = 2, cex.axis = 0.7) # Reduce tamaño de etiquetas

Análisis de Retornos y Volatilidad

¿Qué activos muestran las colas más pesadas según la curtosis?

La curtosis mide qué tan pesadas son las colas de la distribución de los retornos. Según los resultados obtenidos, los activos con valores de curtosis más altos presentan colas más pesadas, lo que indica una mayor frecuencia de retornos extremos.

En este caso, observamos que [NVDA] muestran colas más pesadas, lo que sugiere mayor riesgo de eventos atípicos.

¿Qué nos indica la asimetría de los retornos de estos activos?

La asimetría indica si los retornos tienen una distribución equilibrada o si tienden a tener más valores extremos en un sentido particular.

  • Asimetría positiva (> 0): Más valores extremos positivos (subidas grandes).
  • Asimetría negativa (< 0): Más caídas fuertes que subidas grandes.

Según los resultados, [activo con asimetría positiva] tiene más movimientos alcistas extremos, mientras que [activo con asimetría negativa] presenta mayores caídas abruptas.

¿En qué periodos la volatilidad alcanzó un pico y qué activo es más volátil?

Analizando la volatilidad móvil de 21 días, identificamos que los picos más altos ocurrieron en [fechas detectadas], coincidiendo con eventos como la crisis del COVID-19 en marzo de 2020.

El activo más volátil es [activo más volátil], mientras que el más estable es [activo más estable], lo que sugiere diferentes niveles de riesgo.

¿Es apropiado asumir una distribución normal para estos retornos?

Los resultados de curtosis y los tests de normalidad indican que la mayoría de los activos no siguen una distribución normal, ya que presentan colas más pesadas y asimetrías significativas.

Este fenómeno es importante en gestión de riesgos, ya que los modelos tradicionales podrían subestimar la probabilidad de caídas severas. Considerar colas pesadas permite tomar mejores decisiones y diseñar estrategias más robustas.

# Cálculo de la media y desviación estándar por activo
media_retornos <- colMeans(retornos, na.rm = TRUE)  # Media de retornos diarios
desv_est_retornos <- apply(retornos, 2, sd, na.rm = TRUE)  # Desviación estándar

# Identificar activo con mayor media y mayor desviación estándar
activo_mayor_media <- names(which.max(media_retornos))
activo_mayor_desv <- names(which.max(desv_est_retornos))

# Mostrar los resultados en formato Markdown
cat("### Análisis de Retornos Diarios\n\n")

Análisis de Retornos Diarios

cat("**1. Activo con mayor media de retornos diarios:**", activo_mayor_media, "\n\n")

1. Activo con mayor media de retornos diarios: NVDA

cat("**2. Activo con mayor desviación estándar:**", activo_mayor_desv, "\n\n")

2. Activo con mayor desviación estándar: NVDA

cat("**Interpretación:** Un activo con una media alta sugiere un mejor rendimiento esperado, \n",
    "mientras que una mayor desviación estándar indica mayor volatilidad y riesgo.\n\n")

Interpretación: Un activo con una media alta sugiere un mejor rendimiento esperado, mientras que una mayor desviación estándar indica mayor volatilidad y riesgo.

# Análisis de simetría y curtosis
library(moments)
## 
## Attaching package: 'moments'
## The following objects are masked from 'package:PerformanceAnalytics':
## 
##     kurtosis, skewness
asimetria <- apply(retornos, 2, skewness, na.rm = TRUE)  # Cálculo de asimetría
curtosis <- apply(retornos, 2, kurtosis, na.rm = TRUE)  # Cálculo de curtosis

cat("**3. Asimetría y curtosis en los histogramas:**\n")

3. Asimetría y curtosis en los histogramas:

cat("   - Valores de asimetría: \n", asimetria, "\n")
  • Valores de asimetría: 0.09063338 0.2841251 -0.02321513 0.06718075 -0.0931683 -0.533221
cat("   - Valores de curtosis: \n", curtosis, "\n\n")
  • Valores de curtosis: 8.104889 7.021484 10.02212 6.935149 6.465041 14.3639
cat("Si la asimetría es distinta de 0, la distribución no es perfectamente simétrica. \n",
    "Si la curtosis es alta, la distribución tiene colas más pesadas (eventos extremos más frecuentes).\n\n")

Si la asimetría es distinta de 0, la distribución no es perfectamente simétrica. Si la curtosis es alta, la distribución tiene colas más pesadas (eventos extremos más frecuentes).

# Análisis de mayor volatilidad en el boxplot
rango_intercuartilico <- apply(retornos, 2, IQR, na.rm = TRUE)
activo_mayor_volatilidad <- names(which.max(rango_intercuartilico))

cat("**4. Activo con mayor rango de volatilidad en el boxplot:**", activo_mayor_volatilidad, "\n\n")

4. Activo con mayor rango de volatilidad en el boxplot: NVDA

# Identificación de outliers en los retornos
outliers <- lapply(retornos, function(x) x[which(x < quantile(x, 0.25, na.rm = TRUE) - 1.5 * IQR(x, na.rm = TRUE) |
                                                 x > quantile(x, 0.75, na.rm = TRUE) + 1.5 * IQR(x, na.rm = TRUE))])

cat("**5. Outliers detectados en los retornos diarios:**\n")

5. Outliers detectados en los retornos diarios:

outliers_detectados <- sapply(outliers, length)
print(outliers_detectados)

AAPL NVDA MSFT AMZN GOOGL SPY 54 37 65 52 70 67

cat("\nLos outliers pueden corresponder a eventos de mercado extremos, como caídas abruptas o repuntes inusuales.\n")

Los outliers pueden corresponder a eventos de mercado extremos, como caídas abruptas o repuntes inusuales.

# Seleccionar los retornos de NVDA
asset <- retornos$NVDA

# Graficar la densidad de los retornos observados
plot(density(asset, na.rm = TRUE), main = "Densidad de Retornos Diarios NVDA",
     xlab = "Retorno Diario", lwd = 2, col = "blue")

# Seleccionar los retornos de NVDA
asset <- retornos$NVDA

# Calcular media y desviación estándar
media_nvda <- mean(asset, na.rm = TRUE)
sd_nvda <- sd(asset, na.rm = TRUE)

# Primero, generar el gráfico vacío para evitar errores
plot.new()

# Graficar la densidad empírica de los retornos
plot(density(asset, na.rm = TRUE), main = "Densidad de Retornos Diarios NVDA",
     xlab = "Retorno Diario", lwd = 2, col = "black")

# Superponer la curva normal teórica
curve(dnorm(x, mean = media_nvda, sd = sd_nvda), col = "red", lwd = 2, add = TRUE)

# Agregar la leyenda solo si el gráfico ya está generado
legend("topright", legend = c("Empírica", "Normal teórica"), 
       lwd = 2, col = c("black", "red"))

# Seleccionar los retornos de NVDA
asset <- retornos$NVDA

# Verificar que no haya valores NA para evitar errores
asset <- na.omit(asset)

# Gráfico Q-Q de los retornos de NVDA contra distribución normal
qqnorm(asset, main="Q-Q Plot de Retornos NVDA", col="blue", pch=16)
qqline(asset, col="red", lwd=2)

# Cargar la librería necesaria
library(zoo)

# Calcular la volatilidad móvil de 21 días para cada activo
vol_mov_21 <- rollapply(retornos, width = 21, FUN = sd, by.column = TRUE, align = "right", na.rm = TRUE)

# Graficar la volatilidad móvil para SPY y NVDA
plot(vol_mov_21$SPY, type = "l", col = "blue", ylim = c(0, max(vol_mov_21, na.rm = TRUE)),
     main = "Volatilidad Móvil (21 días) - SPY vs NVDA", ylab = "Desviación Estándar (21 días)", xlab = "Fecha")

# Agregar la volatilidad de NVDA en la misma gráfica
lines(vol_mov_21$NVDA, col = "red")

# Agregar leyenda
legend("topleft", legend = c("SPY", "NVDA"), col = c("blue", "red"), lty = 1)

# Cargar la librería necesaria
library(moments)

# Calcular curtosis para cada activo
curtosis_activos <- apply(retornos, 2, kurtosis)

# Calcular asimetría para cada activo
asimetria_activos <- apply(retornos, 2, skewness)

# Mostrar los resultados en una tabla
curtosis_asimetria <- data.frame(Activo = colnames(retornos),
                                 Curtosis = curtosis_activos,
                                 Asimetría = asimetria_activos)
print(curtosis_asimetria)
##       Activo  Curtosis   Asimetría
## AAPL    AAPL  8.104889  0.09063338
## NVDA    NVDA  7.021484  0.28412506
## MSFT    MSFT 10.022117 -0.02321513
## AMZN    AMZN  6.935149  0.06718075
## GOOGL  GOOGL  6.465041 -0.09316830
## SPY      SPY 14.363899 -0.53322098

Análisis de Retornos y Volatilidad

¿Qué activos muestran las colas más pesadas según la curtosis?

La curtosis mide qué tan pesadas son las colas de la distribución de los retornos. Según los resultados obtenidos, los activos con valores de curtosis más altos presentan colas más pesadas, lo que indica una mayor frecuencia de retornos extremos.

En este caso, observamos que [mencionar activos con mayor curtosis] muestran colas más pesadas, lo que sugiere mayor riesgo de eventos atípicos.

¿Qué nos indica la asimetría de los retornos de estos activos?

La asimetría indica si los retornos tienen una distribución equilibrada o si tienden a tener más valores extremos en un sentido particular.

  • Asimetría positiva (> 0): Más valores extremos positivos (subidas grandes).
  • Asimetría negativa (< 0): Más caídas fuertes que subidas grandes.

Según los resultados, [activo con asimetría positiva] tiene más movimientos alcistas extremos, mientras que [activo con asimetría negativa] presenta mayores caídas abruptas.

¿En qué periodos la volatilidad alcanzó un pico y qué activo es más volátil?

Analizando la volatilidad móvil de 21 días, identificamos que los picos más altos ocurrieron en [fechas detectadas], coincidiendo con eventos como la crisis del COVID-19 en marzo de 2020.

El activo más volátil es [activo más volátil], mientras que el más estable es [activo más estable], lo que sugiere diferentes niveles de riesgo.

¿Es apropiado asumir una distribución normal para estos retornos?

Los resultados de curtosis y los tests de normalidad indican que la mayoría de los activos no siguen una distribución normal, ya que presentan colas más pesadas y asimetrías significativas.

Este fenómeno es importante en gestión de riesgos, ya que los modelos tradicionales podrían subestimar la probabilidad de caídas severas. Considerar colas pesadas permite tomar mejores decisiones y diseñar estrategias más robustas.

# Convertir xts de retornos a data frame
df_ret <- data.frame(fecha = index(retornos), coredata(retornos))
head(df_ret)
##        fecha         AAPL         NVDA         MSFT         AMZN        GOOGL
## 1 2020-01-03 -0.009721918 -0.016006107 -0.012451988 -0.012139035 -0.005231374
## 2 2020-01-06  0.007968210  0.004193503  0.002585086  0.014885574  0.026654092
## 3 2020-01-07 -0.004703273  0.012106747 -0.009117850  0.002091620 -0.001931535
## 4 2020-01-08  0.016086231  0.001875523  0.015928154 -0.007808640  0.007117652
## 5 2020-01-09  0.021241096  0.010982809  0.012492916  0.004799175  0.010498070
## 6 2020-01-10  0.002260643  0.005349223 -0.004626755 -0.009410597  0.006458532
##            SPY
## 1 -0.007571987
## 2  0.003815187
## 3 -0.002812184
## 4  0.005329747
## 5  0.006780545
## 6 -0.002877641
# Regresión lineal de retornos de AAPL en función de SPY
modelo_AAPL_SPY <- lm(AAPL ~ SPY, data = df_ret)
summary(modelo_AAPL_SPY)
## 
## Call:
## lm(formula = AAPL ~ SPY, data = df_ret)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.045983 -0.006704 -0.000111  0.006005  0.094938 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.0003803  0.0003416   1.113    0.266    
## SPY         1.1857650  0.0260648  45.493   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01239 on 1317 degrees of freedom
## Multiple R-squared:  0.6111, Adjusted R-squared:  0.6108 
## F-statistic:  2070 on 1 and 1317 DF,  p-value: < 2.2e-16

Análisis de Regresiones

¿Cuál es el valor de la pendiente en la regresión AAPL ~ SPY?

El coeficiente de la pendiente en la regresión AAPL ~ SPY representa cuánto cambia el retorno de Apple en respuesta a un cambio del 1% en SPY.

Según nuestros resultados, la pendiente (beta) es β = [valor]. Esto significa que, si SPY sube un 1% en un día, esperaríamos que Apple suba aproximadamente [β]%, según el modelo.

¿Es estadísticamente significativo este coeficiente?

Para determinar la significancia estadística del coeficiente de la pendiente, observamos su p-valor.

  • Si el p-valor < 0.05, podemos rechazar la hipótesis nula y concluir que el coeficiente es estadísticamente significativo.
  • Si el p-valor > 0.05, el coeficiente no es concluyente.

En este caso, el p-valor de la pendiente es [valor], por lo que [sí / no] es estadísticamente significativo.

En cuanto al intercepto, su p-valor es [valor], lo que indica que [sí / no] es estadísticamente significativo.

¿Qué porcentaje de la variabilidad de Apple explican los movimientos del mercado (R²)?

El de la regresión AAPL ~ SPY nos indica qué fracción de la variabilidad en los retornos de Apple puede explicarse por los movimientos del mercado (SPY).

En nuestro modelo, R² = [valor], lo que significa que aproximadamente el [porcentaje]% de la variabilidad de los retornos de Apple está explicada por el mercado.

Si este valor es cercano a 1, indica una relación fuerte entre Apple y el mercado; si está más cerca de 0, la relación es débil o moderada.

En este caso, consideramos que la relación es [fuerte / moderada / débil].

Comparación de betas: Apple, Microsoft, Nvidia

Para comparar la sensibilidad de diferentes acciones al mercado, analizamos sus betas individuales obtenidas al regresarlas contra SPY:

  • Apple (β_AAPL = [valor])
  • Microsoft (β_MSFT = [valor])
  • Nvidia (β_NVDA = [valor])

🔹 La acción con beta más alta es [mencionar acción], lo que indica que reacciona con más fuerza a los movimientos del mercado.

🔹 La acción con beta más baja es [mencionar acción], lo que implica que es menos sensible a los cambios del índice SPY.

Comparación de R²: NVDA ~ AAPL vs. cada una contra SPY

En la regresión NVDA ~ AAPL, obtenemos un R² de [valor], que es [mayor / menor] que el R² obtenido al regredir NVDA y AAPL contra SPY.

Esto implica que la relación entre dos acciones individuales (Nvidia y Apple) es [más fuerte / más débil] en comparación con su relación con el mercado general.

Este resultado es importante porque nos ayuda a entender si las acciones tecnológicas se mueven de manera más sincronizada entre ellas o si siguen más de cerca el comportamiento del mercado en general.

colnames(df_ret) summary(df_ret) df_ret <- na.omit(df_ret) modelo_AAPL_SPY <- lm(AAPL ~ SPY, data = df_ret) summary(modelo_AAPL_SPY)

modelo_NVDA_AAPL <- lm(NVDA ~ AAPL, data = df_ret) summary(modelo_NVDA_AAPL)

# Autocorrelación de la serie de precios ajustados de Microsoft
acf(precios$MSFT, main="ACF Precios MSFT (nivel)")

# Autocorrelación de la serie de retornos diarios de Microsoft
acf(retornos$MSFT, main="ACF Retornos MSFT (diarios)")

# Cargar librería necesaria
library(tseries)

# Prueba ADF en precios de Amazon
adf_precios <- adf.test(precios$AMZN, k=1)

# Prueba ADF en retornos de Amazon
adf_retornos <- adf.test(retornos$AMZN, k=0)
## Warning in adf.test(retornos$AMZN, k = 0): p-value smaller than printed p-value
# Mostrar resultados
adf_precios
## 
##  Augmented Dickey-Fuller Test
## 
## data:  precios$AMZN
## Dickey-Fuller = -1.8488, Lag order = 1, p-value = 0.6423
## alternative hypothesis: stationary
adf_retornos
## 
##  Augmented Dickey-Fuller Test
## 
## data:  retornos$AMZN
## Dickey-Fuller = -37.46, Lag order = 0, p-value = 0.01
## alternative hypothesis: stationary

{r respuestas-seccion-4, echo=FALSE}

Respuestas a las preguntas de la Sección 4

1. Tendencias en los precios de NVDA

Durante el periodo 2020-2021, los precios de NVDA mostraron una tendencia alcista significativa, impulsada por el auge del sector tecnológico y la creciente demanda de semiconductores. Sin embargo, en 2022, la acción experimentó una corrección debido a factores como la inflación, el endurecimiento de la política monetaria y la desaceleración del sector tecnológico.

2. Diferencias en los gráficos ACF de precios vs retornos

Los gráficos ACF de precios muestran una autocorrelación alta y persistente, lo que indica que los precios dependen fuertemente de sus valores pasados. En cambio, los retornos tienen muy poca autocorrelación, lo que sugiere que los cambios diarios en los precios no siguen un patrón predecible. Esto es consistente con la teoría de mercados eficientes, donde los precios reflejan rápidamente la información disponible.

3. Resultados de las pruebas ADF

Las pruebas ADF sugieren que los precios no son estacionarios, ya que no tienen una media y varianza constantes en el tiempo, sino que siguen un proceso de caminata aleatoria. Sin embargo, al diferenciar (tomar retornos), la serie se vuelve estacionaria. Esto significa que los retornos tienen una media cercana a cero y varianza constante, sin una tendencia marcada.

4. Implicaciones de la autocorrelación en retornos

Si los retornos de un activo mostraran autocorrelación significativa en ciertos rezagos, esto indicaría que los retornos pasados pueden predecir los futuros en cierta medida. Esto podría sugerir ineficiencias en el mercado, donde los precios no reflejan toda la información disponible de manera instantánea, permitiendo potencialmente estrategias de trading basadas en patrones de retornos pasados.

Referencias

  • Fama, E. F. (1970). Efficient Capital Markets: A Review of Theory and Empirical Work. The Journal of Finance, 25(2), 383-417.
  • Bollerslev, T. (1986). Generalized autoregressive conditional heteroskedasticity. Journal of Econometrics, 31(3), 307-327.
  • Engle, R. F. (1982). Autoregressive Conditional Heteroscedasticity with Estimates of the Variance of United Kingdom Inflation. Econometrica, 50(4), 987-1007.
  • Campbell, J. Y., Lo, A. W., & MacKinlay, A. C. (1997). The Econometrics of Financial Markets. Princeton University Press.
  • Tsay, R. S. (2010). Analysis of Financial Time Series (3rd ed.). Wiley.
  • Dickey, D. A., & Fuller, W. A. (1979). Distribution of the Estimators for Autoregressive Time Series with a Unit Root. Journal of the American Statistical Association, 74(366), 427-431.

Nota: Asegúrate de que estas referencias sean relevantes para tu trabajo. Si has utilizado otros artículos o materiales específicos, puedes reemplazar o agregar fuentes según sea necesario.