Tarea 6

Resultados

Buscando entender en su totalidad y explorar a profundidad el modelo CAPM, realizaremos el analisis de un portafolio de inversión. Como equipo decidimos en las acciónes de BIMBO, FIBRA DANHOS, COCACOLA FEMSA, CEMEX y GRUPO CARSO, utilizando unicamente empresas nacionales. Nuestro críterio de selección fue utilizar empresas que son nombres importantes en diferentes mercados, empresas que el público en general haya escuchado de ellas. Esto con el proposito de simular simplemente un portafolio que no fue analizado a profundidad con modelos de asignación de fondos, usando unicamente empresas que se pueden llegar a escuchar en el día a día. Por esta misma razón, decidimos invertir en 50 acciones de cada una, sin tomar en cuenta su costo ni rendimientos anteriores, para simular un conocimiento base en temas de educación financiera. Lo que buscamos sacar de esta tarea es ver que tan redituable sería crear un portafolio con los críterios anteriormente mencionados, sin utilizar toda la información que está disponible en el mercado. En diversas clases de información financiera y mercados, se nos ha dicho que tomar decisiones sin tomar en cuenta toda la informacion disponible es una mala desicion, pero es esto cierto? Nuestros resultados nos dicen que mientras no es la mejor decisión, puesto que comparando con nuestros compañeros hay portafolios que dieron mayores rendimientos, nuestro portafolio aún asi fue más redituable que invertir en el IPC.

El riesgo total del portafolio es de 35.291%, de los cuales se atribuye 21.954% al riesgo sistematico y 13.336% al riesgo no sistematico. El portafolio tiene una beta de 0.88117 y un alpha de 0.006.

Con una beta de 0.88117, el portafolio es menos volátil que el mercado. Esto significa que está algo protegido en periodos de alta volatilidad, moviéndose menos que el mercado general en términos porcentuales.

Con un alpha de 0.006, el portafolio ha logrado generar un rendimiento superior al esperado para su nivel de riesgo.

A continuación encontrará el código y procesos llevados a cabo para encontrar los resultados anteriormente mencionados.

Código

Librerías Utilizadas

library(quantmod)
## Warning: package 'quantmod' was built under R version 4.2.3
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(lubridate)
## Loading required package: timechange
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(readxl)
library(xts)

Decidimos acciones, en este caso BIMBO, FIBRA DANHOS, COCACOLA FEMSA, CEMEX y GRUPO CARSO. Creamos lista al mismo tiempo.

clave1 <- "BIMBOA.MX"
clave2 <- "DANHOS13.MX"
clave3 <- "KOF"
clave4 <- "CEMEXCPO.MX"
clave5 <- "GCARSOA1.MX"
datos <- new.env()

Descargamos los últimos 5 años de datos y asignamos las cotizaciones de cada una cada acción a su propia constante

getSymbols(clave1 ,from=today()-(365*5),to=today(), env=datos)
## [1] "BIMBOA.MX"
getSymbols(clave2 ,from=today()-(365*5),to=today(), env=datos)
## [1] "DANHOS13.MX"
getSymbols(clave3 ,from=today()-(365*5),to=today(), env=datos)
## [1] "KOF"
getSymbols(clave4 ,from=today()-(365*5),to=today(), env=datos)
## [1] "CEMEXCPO.MX"
getSymbols(clave5 ,from=today()-(365*5),to=today(), env=datos)
## [1] "GCARSOA1.MX"
precio_1 <- datos[[clave1]][,6]
precio_2 <- datos[[clave2]][,6]
precio_3 <- datos[[clave3]][,6]
precio_4 <- datos[[clave2]][,6]
precio_5 <- datos[[clave3]][,6]

Definimos cuantas acciones de cada activo se quieren, para encontrar el valor inicial del portafolio. Decidimos invertir en 50 acciones de CU. El resultado es el comportamiento del precio a traves del tiempo.

precio_portafolio <- (precio_1*50 + precio_2*50 + precio_3*50 +  precio_4*50 + precio_5*50)
names(precio_portafolio) <- c("Valor_Portafolio")
head(precio_portafolio, 10)
##            Valor_Portafolio
## 2019-09-30         8322.626
## 2019-10-01         8237.763
## 2019-10-02         8192.467
## 2019-10-03         8222.507
## 2019-10-04         8448.902
## 2019-10-07         8288.207
## 2019-10-08         8279.036
## 2019-10-09         8355.906
## 2019-10-10         8405.509
## 2019-10-11         8437.306
tail(precio_portafolio, 10)
##            Valor_Portafolio
## 2024-09-12          14047.0
## 2024-09-13          14179.0
## 2024-09-17          14531.5
## 2024-09-18          14521.5
## 2024-09-19          14697.5
## 2024-09-20          14326.5
## 2024-09-23          14414.5
## 2024-09-24          14767.5
## 2024-09-25          14489.5
## 2024-09-26          14755.5

Descargamos el compartamiento del IPC para los mismos últimos 5 años

getSymbols("^MXX",from=today()-(365*5),to=today(),env=datos)
## [1] "MXX"
precio_ipc <- datos[["MXX"]][,6]
precio_portafolio_IPC <- (precio_ipc/5.168)
names(precio_portafolio_IPC) <- c("Valor_Portafolio")
head(precio_portafolio_IPC, 10)
##            Valor_Portafolio
## 2019-09-30         8322.614
## 2019-10-01         8308.274
## 2019-10-02         8170.065
## 2019-10-03         8212.715
## 2019-10-04         8401.103
## 2019-10-07         8311.201
## 2019-10-08         8230.484
## 2019-10-09         8224.056
## 2019-10-10         8306.842
## 2019-10-11         8361.959
tail(precio_portafolio_IPC, 10)
##            Valor_Portafolio
## 2024-09-12         10061.87
## 2024-09-13         10065.18
## 2024-09-17         10114.85
## 2024-09-18         10174.71
## 2024-09-19         10239.56
## 2024-09-20         10098.78
## 2024-09-23         10143.62
## 2024-09-24         10381.96
## 2024-09-25         10292.36
## 2024-09-26         10369.68

Volvemos los rendimientos diarios a mensuales tanto del portafolio como del IPC

precio_portafolio_mensual <- to.monthly(precio_portafolio)
precio_portafolio_mensual <- precio_portafolio_mensual[,4]

precio_ipc_mensual <- to.monthly(precio_ipc)
precio_ipc_mensual <- precio_ipc_mensual[,4]

IPC VS PORTAFOLIO Gráfica en términos de rendimientos mensuales

r_portafolio <- monthlyReturn(precio_portafolio_mensual)
names(r_portafolio) <- "Portafolio"
r_ipc <- monthlyReturn(precio_ipc_mensual)
names(r_ipc) <- "IPC"

plot(merge.xts(r_portafolio, r_ipc), legend.loc = "bottom", main = "Comportamiento Mensual")

Descargamos los datos del excel

r_zero <- read_excel("tasa_cete.xlsx")

Cambiamos de porcentajes a decimales y hacemos que los rendimientos sean mensuales

r_zero$SF43936 <- as.numeric(r_zero$SF43936)/100/12

Convertimos la fecha en serie de tiempo y cambiamos temporalidad a meses

r_zero <- as.xts(r_zero$SF43936, order.by = r_zero$Fecha)
r_zero <- to.monthly(r_zero)[,4]
names(r_zero) <- "Cete"

Graficamos IPC VS CETES

plot(merge.xts(r_zero, r_ipc), legend.loc = "bottom", main = "Comportamiento Mensual")

Obtenemos ER del portafolio e IPC

ER_portafolio <- r_portafolio - r_zero
ER_ipc <- r_ipc - r_zero

Utilizamos CAPM

CAPM <- lm(ER_portafolio~ER_ipc)
summary(CAPM)
## 
## Call:
## lm(formula = ER_portafolio ~ ER_ipc)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.067642 -0.029843 -0.003273  0.026139  0.090150 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.006001   0.004678   1.283    0.205    
## ER_ipc      0.881172   0.089412   9.855 4.43e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.03652 on 59 degrees of freedom
## Multiple R-squared:  0.6221, Adjusted R-squared:  0.6157 
## F-statistic: 97.13 on 1 and 59 DF,  p-value: 4.428e-14

Que porcentaje del riesgo total pertenece al riesgo sistematico

Resultados <- summary(CAPM)
R_Cuadrado <- Resultados$r.squared
R_Cuadrado
## [1] 0.6220989

Calculamos residuales

Resultados$sigma
## [1] 0.03651915

Calculamos el riesgo total del portafolio

RT <- (Resultados$sigma^2)/(1-R_Cuadrado)*100
RT
## [1] 0.3529093

Tabla Final

library(tibble)
tibble("Riesgo Total"=paste(format(RT*100,digits = 5),"%"),
       "Riesgo Sistematico"=paste(format(R_Cuadrado*RT*100, digits = 5),"%"),
       "Riesgo No Sistematico" = paste(format((Resultados$sigma^2)*10000, digits = 5),"%"),
       "Beta" = format(Resultados$coefficients[2], digits = 5),
       "Alpha" = format(Resultados$coefficients[1], digits = 5)
       )
## # A tibble: 1 × 5
##   `Riesgo Total` `Riesgo Sistematico` `Riesgo No Sistematico` Beta    Alpha    
##   <chr>          <chr>                <chr>                   <chr>   <chr>    
## 1 35.291 %       21.954 %             13.336 %                0.88117 0.0060013

Analisis

El riesgo total del activo es de 35.291%, de los cuales se atribuye 21.954% al riesgo sistematico y 13.336% al riesgo no sistematico. El portafolio tiene una beta de 0.88117 y un alpha de 0.006.

Con una beta de 0.88117, el portafolio es menos volátil que el mercado. Esto significa que está algo protegido en periodos de alta volatilidad, moviéndose menos que el mercado general en términos porcentuales.

Con un alpha de 0.006, el portafolio ha logrado generar un rendimiento superior al esperado para su nivel de riesgo.