##APIs
#install.packages("quantmod")
#install.packages("dplyr")
#install.packages("ggplot2")
library(quantmod)
## 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(dplyr)
##
## ######################### Warning from 'xts' package ##########################
## # #
## # The dplyr lag() function breaks how base R's lag() function is supposed to #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
## # source() into this session won't work correctly. #
## # #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
## # dplyr from breaking base R's lag() function. #
## # #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## ###############################################################################
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
##
## first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
Lista de acciones
accion <- c('GFINBURO.MX', 'VESTA.MX','GRUMAB.MX','WALMEX.MX',"PE&OLES.MX","GFNORTEO.MX","AC.MX","PINFRA.MX","ALSEA.MX","OMAB.MX","CUERVO.MX","ALFAA.MX","BIMBOA.MX","LIVEPOLC-1.MX","ASURB.MX","GMEXICOB.MX","BBAJIOO.MX","LABB.MX","CEMEXCPO.MX","BOLSAA.MX","ORBIA.MX","GCARSOA1.MX","GCC.MX","SITESB-1.MX","RA.MX","KIMBERA.MX","ELEKTRA.MX","Q.MX","GAPB.MX","KOFUBL.MX","MEGACPO.MX","TLEVISACPO.MX","VOLARA.MX","FEMSAUBD.MX")
accion
## [1] "GFINBURO.MX" "VESTA.MX" "GRUMAB.MX" "WALMEX.MX"
## [5] "PE&OLES.MX" "GFNORTEO.MX" "AC.MX" "PINFRA.MX"
## [9] "ALSEA.MX" "OMAB.MX" "CUERVO.MX" "ALFAA.MX"
## [13] "BIMBOA.MX" "LIVEPOLC-1.MX" "ASURB.MX" "GMEXICOB.MX"
## [17] "BBAJIOO.MX" "LABB.MX" "CEMEXCPO.MX" "BOLSAA.MX"
## [21] "ORBIA.MX" "GCARSOA1.MX" "GCC.MX" "SITESB-1.MX"
## [25] "RA.MX" "KIMBERA.MX" "ELEKTRA.MX" "Q.MX"
## [29] "GAPB.MX" "KOFUBL.MX" "MEGACPO.MX" "TLEVISACPO.MX"
## [33] "VOLARA.MX" "FEMSAUBD.MX"
getSymbols(accion, from='2020-01-01',to="2020-12-31" )
## Warning: Unable to import "SITESB-1.MX".
## HTTP error 404.
## [1] "GFINBURO.MX" "VESTA.MX" "GRUMAB.MX" "WALMEX.MX"
## [5] "PE&OLES.MX" "GFNORTEO.MX" "AC.MX" "PINFRA.MX"
## [9] "ALSEA.MX" "OMAB.MX" "CUERVO.MX" "ALFAA.MX"
## [13] "BIMBOA.MX" "LIVEPOLC-1.MX" "ASURB.MX" "GMEXICOB.MX"
## [17] "BBAJIOO.MX" "LABB.MX" "CEMEXCPO.MX" "BOLSAA.MX"
## [21] "ORBIA.MX" "GCARSOA1.MX" "GCC.MX" "RA.MX"
## [25] "KIMBERA.MX" "ELEKTRA.MX" "Q.MX" "GAPB.MX"
## [29] "KOFUBL.MX" "MEGACPO.MX" "TLEVISACPO.MX" "VOLARA.MX"
## [33] "FEMSAUBD.MX"
dataEnv <- new.env()
getSymbols(accion, from='2020-01-01', to="2020-12-31" ,env=dataEnv)
## Warning: Unable to import "SITESB-1.MX".
## HTTP error 404.
## [1] "GFINBURO.MX" "VESTA.MX" "GRUMAB.MX" "WALMEX.MX"
## [5] "PE&OLES.MX" "GFNORTEO.MX" "AC.MX" "PINFRA.MX"
## [9] "ALSEA.MX" "OMAB.MX" "CUERVO.MX" "ALFAA.MX"
## [13] "BIMBOA.MX" "LIVEPOLC-1.MX" "ASURB.MX" "GMEXICOB.MX"
## [17] "BBAJIOO.MX" "LABB.MX" "CEMEXCPO.MX" "BOLSAA.MX"
## [21] "ORBIA.MX" "GCARSOA1.MX" "GCC.MX" "RA.MX"
## [25] "KIMBERA.MX" "ELEKTRA.MX" "Q.MX" "GAPB.MX"
## [29] "KOFUBL.MX" "MEGACPO.MX" "TLEVISACPO.MX" "VOLARA.MX"
## [33] "FEMSAUBD.MX"
Obtenemos los precios ajustados
plist <- eapply(dataEnv, Ad)
adj_prices <- do.call(merge, plist)
tail(adj_prices)
## GCC.MX.Adjusted GAPB.MX.Adjusted GMEXICOB.MX.Adjusted
## 2020-12-22 110.7244 179.3552 68.79227
## 2020-12-23 112.2026 182.1707 71.40289
## 2020-12-24 113.0000 180.5559 70.41000
## 2020-12-28 114.7601 181.9057 72.87511
## 2020-12-29 114.7310 185.7314 74.15904
## 2020-12-30 116.4619 185.0028 73.86802
## BIMBOA.MX.Adjusted GRUMAB.MX.Adjusted OMAB.MX.Adjusted
## 2020-12-22 40.01189 214.0622 95.99937
## 2020-12-23 41.06583 216.3085 99.73840
## 2020-12-24 40.43916 216.8863 98.09199
## 2020-12-28 40.89492 219.8223 96.64561
## 2020-12-29 41.50259 223.2335 99.09984
## 2020-12-30 41.02785 224.0164 99.90766
## GFNORTEO.MX.Adjusted PE.OLES.MX.Adjusted KIMBERA.MX.Adjusted
## 2020-12-22 83.46488 341.5805 27.74463
## 2020-12-23 88.24847 345.1388 28.51698
## 2020-12-24 86.61661 342.7000 28.27670
## 2020-12-28 86.57662 346.2883 28.70578
## 2020-12-29 91.04823 345.5986 29.37515
## 2020-12-30 88.78442 347.1579 29.16061
## TLEVISACPO.MX.Adjusted PINFRA.MX.Adjusted CUERVO.MX.Adjusted
## 2020-12-22 29.92121 145.3018 47.70890
## 2020-12-23 30.73093 147.0538 48.69960
## 2020-12-24 30.36463 149.4485 48.60248
## 2020-12-28 30.74057 150.6107 48.88415
## 2020-12-29 31.81057 153.0670 48.85501
## 2020-12-30 32.12867 158.4198 48.84529
## CEMEXCPO.MX.Adjusted Q.MX.Adjusted RA.MX.Adjusted
## 2020-12-22 10.15 90.10672 77.19232
## 2020-12-23 10.37 90.58311 77.44388
## 2020-12-24 10.25 90.04609 77.51096
## 2020-12-28 10.32 92.64458 76.47121
## 2020-12-29 10.26 91.05083 77.72058
## 2020-12-30 10.37 93.20758 77.56964
## GCARSOA1.MX.Adjusted ASURB.MX.Adjusted WALMEX.MX.Adjusted
## 2020-12-22 50.52049 295.5761 53.68070
## 2020-12-23 54.77736 296.4933 54.36966
## 2020-12-24 57.40576 293.2464 54.11736
## 2020-12-28 59.25326 294.4112 54.40847
## 2020-12-29 62.36733 301.7672 55.73787
## 2020-12-30 63.51965 299.2266 55.73787
## ORBIA.MX.Adjusted BOLSAA.MX.Adjusted GFINBURO.MX.Adjusted
## 2020-12-22 42.28829 38.89530 18.99
## 2020-12-23 42.68607 39.40697 19.94
## 2020-12-24 43.01756 40.20005 20.23
## 2020-12-28 43.57635 40.90786 20.66
## 2020-12-29 44.12568 41.20633 21.26
## 2020-12-30 44.55187 41.59861 21.20
## LIVEPOLC.1.MX.Adjusted BBAJIOO.MX.Adjusted MEGACPO.MX.Adjusted
## 2020-12-22 63.60074 18.86911 61.46287
## 2020-12-23 64.48576 19.44521 61.85791
## 2020-12-24 64.74389 20.02879 62.43330
## 2020-12-28 65.03889 19.66966 62.87127
## 2020-12-29 65.61045 20.23079 63.35218
## 2020-12-30 65.01124 20.20087 64.34838
## ALSEA.MX.Adjusted AC.MX.Adjusted ALFAA.MX.Adjusted LABB.MX.Adjusted
## 2020-12-22 25.37 85.19300 13.14796 15.85230
## 2020-12-23 25.84 85.98935 14.09207 15.76674
## 2020-12-24 25.98 85.81040 14.00263 15.92929
## 2020-12-28 25.73 85.58670 14.20139 15.70686
## 2020-12-29 26.01 86.82151 14.08213 15.80952
## 2020-12-30 26.02 86.39201 14.28089 16.01484
## KOFUBL.MX.Adjusted ELEKTRA.MX.Adjusted FEMSAUBD.MX.Adjusted
## 2020-12-22 72.88837 1273.712 140.1551
## 2020-12-23 73.67825 1270.405 140.8980
## 2020-12-24 73.21410 1271.915 140.6503
## 2020-12-28 74.89156 1296.511 142.4124
## 2020-12-29 75.68143 1297.765 144.0506
## 2020-12-30 75.62443 1308.320 144.2888
## VOLARA.MX.Adjusted VESTA.MX.Adjusted
## 2020-12-22 22.22 37.37091
## 2020-12-23 22.61 37.37091
## 2020-12-24 22.01 38.13520
## 2020-12-28 22.76 38.33372
## 2020-12-29 23.63 38.69106
## 2020-12-30 23.90 38.94913
Buscamos missing values
sum(is.na(adj_prices))
## [1] 0
#No encontramos valores faltantes
Cambiamos los nombres de las columnas con solo el nombre de la acción
colnames(adj_prices)
## [1] "GCC.MX.Adjusted" "GAPB.MX.Adjusted" "GMEXICOB.MX.Adjusted"
## [4] "BIMBOA.MX.Adjusted" "GRUMAB.MX.Adjusted" "OMAB.MX.Adjusted"
## [7] "GFNORTEO.MX.Adjusted" "PE.OLES.MX.Adjusted" "KIMBERA.MX.Adjusted"
## [10] "TLEVISACPO.MX.Adjusted" "PINFRA.MX.Adjusted" "CUERVO.MX.Adjusted"
## [13] "CEMEXCPO.MX.Adjusted" "Q.MX.Adjusted" "RA.MX.Adjusted"
## [16] "GCARSOA1.MX.Adjusted" "ASURB.MX.Adjusted" "WALMEX.MX.Adjusted"
## [19] "ORBIA.MX.Adjusted" "BOLSAA.MX.Adjusted" "GFINBURO.MX.Adjusted"
## [22] "LIVEPOLC.1.MX.Adjusted" "BBAJIOO.MX.Adjusted" "MEGACPO.MX.Adjusted"
## [25] "ALSEA.MX.Adjusted" "AC.MX.Adjusted" "ALFAA.MX.Adjusted"
## [28] "LABB.MX.Adjusted" "KOFUBL.MX.Adjusted" "ELEKTRA.MX.Adjusted"
## [31] "FEMSAUBD.MX.Adjusted" "VOLARA.MX.Adjusted" "VESTA.MX.Adjusted"
Calculamos los retornos omitiendo los missing values
retornos_precios <- diff(adj_prices, arithmetic = FALSE) - 1
retornos_precios <- na.omit(retornos_precios)
head(retornos_precios)
## GCC.MX.Adjusted GAPB.MX.Adjusted GMEXICOB.MX.Adjusted
## 2020-01-03 -0.0057430471 0.005315559 0.002408632
## 2020-01-06 -0.0075689485 -0.008805282 -0.023567528
## 2020-01-07 0.0006020018 0.007340570 0.002177045
## 2020-01-08 0.0034099762 0.027265902 0.026822871
## 2020-01-09 -0.0018491911 0.013654597 -0.001103734
## 2020-01-10 -0.0020526418 0.003005175 0.020810294
## BIMBOA.MX.Adjusted GRUMAB.MX.Adjusted OMAB.MX.Adjusted
## 2020-01-03 0.0002826482 0.009576161 -0.004709487
## 2020-01-06 0.0043823440 -0.012361263 -0.009817165
## 2020-01-07 -0.0133710038 -0.011085515 -0.009058564
## 2020-01-08 -0.0008557932 0.021892352 0.014899805
## 2020-01-09 0.0231296995 0.014952099 -0.002517784
## 2020-01-10 -0.0039074427 0.009771067 0.010558318
## GFNORTEO.MX.Adjusted PE.OLES.MX.Adjusted KIMBERA.MX.Adjusted
## 2020-01-03 0.002735589 0.020422989 -0.0005253091
## 2020-01-06 0.001091320 0.008062589 0.0063040855
## 2020-01-07 -0.029069794 -0.001505547 0.0326286963
## 2020-01-08 0.017776996 -0.010507463 0.0449949992
## 2020-01-09 0.037598735 -0.016047601 -0.0170536503
## 2020-01-10 -0.025870381 -0.011082656 -0.0163653936
## TLEVISACPO.MX.Adjusted PINFRA.MX.Adjusted CUERVO.MX.Adjusted
## 2020-01-03 0.002215861 0.017884221 -0.0019976743
## 2020-01-06 -0.016913641 -0.011056170 0.0030026234
## 2020-01-07 -0.019678356 0.004719216 -0.0047043154
## 2020-01-08 0.011011628 0.026926513 -0.0002862329
## 2020-01-09 -0.008622623 -0.009955032 -0.0090259361
## 2020-01-10 0.001144538 0.002396532 -0.0172038528
## CEMEXCPO.MX.Adjusted Q.MX.Adjusted RA.MX.Adjusted
## 2020-01-03 0.004189974 -0.0022562544 -0.007278673
## 2020-01-06 0.001390786 0.0134421583 0.002153755
## 2020-01-07 -0.018055506 0.0063220449 -0.005990127
## 2020-01-08 0.018387501 -0.0190932690 0.016284771
## 2020-01-09 -0.013888876 0.0215370283 0.007423486
## 2020-01-10 0.011267595 0.0006762148 -0.032530547
## GCARSOA1.MX.Adjusted ASURB.MX.Adjusted WALMEX.MX.Adjusted
## 2020-01-03 0.0058193973 0.004910132 -0.007801205
## 2020-01-06 0.0049110722 -0.018260866 0.010696701
## 2020-01-07 -0.0178748882 0.011036614 -0.005336962
## 2020-01-08 0.0076345749 0.010067757 0.013277511
## 2020-01-09 0.0002704426 0.007654685 -0.002513021
## 2020-01-10 0.0128499755 0.017269657 0.010797163
## ORBIA.MX.Adjusted BOLSAA.MX.Adjusted GFINBURO.MX.Adjusted
## 2020-01-03 0.0152173503 -0.021008444 -0.0024370988
## 2020-01-06 -0.0009515129 -0.004768714 0.0073290028
## 2020-01-07 -0.0366756089 0.007187290 -0.0210186121
## 2020-01-08 -0.0106301920 0.002854489 -0.0045416477
## 2020-01-09 -0.0009997261 -0.001423293 0.0091248158
## 2020-01-10 0.1363182404 -0.003087679 0.0004110246
## LIVEPOLC.1.MX.Adjusted BBAJIOO.MX.Adjusted MEGACPO.MX.Adjusted
## 2020-01-03 0.017728196 0.008695545 -0.0006455945
## 2020-01-06 0.006481682 -0.004618125 0.0016792765
## 2020-01-07 -0.013886021 -0.003093166 -0.0288846207
## 2020-01-08 0.011836639 -0.008997751 -0.0091620074
## 2020-01-09 -0.015480015 -0.011271188 -0.0026803354
## 2020-01-10 0.018181870 -0.029132361 0.0051062565
## ALSEA.MX.Adjusted AC.MX.Adjusted ALFAA.MX.Adjusted LABB.MX.Adjusted
## 2020-01-03 7.964255e-03 0.008927563 0.012376382 0.0005326892
## 2020-01-06 9.637827e-05 -0.003743463 0.010696563 0.0015965047
## 2020-01-07 -4.817714e-04 0.009418668 -0.024493420 0.0042506783
## 2020-01-08 -5.205330e-03 -0.003287601 0.019218916 -0.0100530581
## 2020-01-09 -8.720576e-04 -0.005820620 -0.002433095 0.0026725768
## 2020-01-10 -1.697217e-02 0.001073268 -0.023170719 -0.0010661575
## KOFUBL.MX.Adjusted ELEKTRA.MX.Adjusted FEMSAUBD.MX.Adjusted
## 2020-01-03 0.008137697 -0.002681136 0.010248488
## 2020-01-06 -0.005839409 0.006785905 -0.000600076
## 2020-01-07 -0.003714226 0.005297346 0.007749494
## 2020-01-08 -0.004595155 -0.002042009 -0.005956948
## 2020-01-09 -0.004747013 -0.005491384 -0.005066414
## 2020-01-10 -0.004419490 -0.001348897 -0.006351578
## VOLARA.MX.Adjusted VESTA.MX.Adjusted
## 2020-01-03 0.008491512 0.019619163
## 2020-01-06 -0.019564163 -0.015364753
## 2020-01-07 0.013387188 -0.008312924
## 2020-01-08 0.009471612 0.004706080
## 2020-01-09 0.007160516 -0.015807923
## 2020-01-10 0.009070824 0.011302557
Vemos los promedios de los retornos de las acciones
means <- colMeans(retornos_precios)
class(means)
## [1] "numeric"
means
## GCC.MX.Adjusted GAPB.MX.Adjusted GMEXICOB.MX.Adjusted
## 9.667412e-04 5.609244e-04 2.458631e-03
## BIMBOA.MX.Adjusted GRUMAB.MX.Adjusted OMAB.MX.Adjusted
## 1.248940e-03 1.172048e-03 2.705326e-04
## GFNORTEO.MX.Adjusted PE.OLES.MX.Adjusted KIMBERA.MX.Adjusted
## 5.401707e-04 2.723872e-03 -5.153585e-06
## TLEVISACPO.MX.Adjusted PINFRA.MX.Adjusted CUERVO.MX.Adjusted
## -5.699518e-04 3.366997e-05 1.753477e-03
## CEMEXCPO.MX.Adjusted Q.MX.Adjusted RA.MX.Adjusted
## 2.078723e-03 1.672834e-03 -6.286011e-05
## GCARSOA1.MX.Adjusted ASURB.MX.Adjusted WALMEX.MX.Adjusted
## 1.183151e-04 3.402292e-05 4.020335e-04
## ORBIA.MX.Adjusted BOLSAA.MX.Adjusted GFINBURO.MX.Adjusted
## 1.223323e-03 1.119446e-03 -8.424948e-05
## LIVEPOLC.1.MX.Adjusted BBAJIOO.MX.Adjusted MEGACPO.MX.Adjusted
## -7.351414e-04 -2.683867e-04 2.231849e-04
## ALSEA.MX.Adjusted AC.MX.Adjusted ALFAA.MX.Adjusted
## -1.829510e-03 1.246221e-04 3.987629e-04
## LABB.MX.Adjusted KOFUBL.MX.Adjusted ELEKTRA.MX.Adjusted
## 3.776133e-04 -4.812561e-04 -1.350427e-04
## FEMSAUBD.MX.Adjusted VOLARA.MX.Adjusted VESTA.MX.Adjusted
## -3.868589e-04 1.754671e-03 8.860643e-04
##Desviación Estándar Calculamos la desviación estándar con la función sd.
stddev <- as.data.frame(retornos_precios) %>% summarise_if(is.numeric, sd)
stddev
## GCC.MX.Adjusted GAPB.MX.Adjusted GMEXICOB.MX.Adjusted BIMBOA.MX.Adjusted
## 1 0.0230919 0.03545378 0.02645614 0.02804818
## GRUMAB.MX.Adjusted OMAB.MX.Adjusted GFNORTEO.MX.Adjusted PE.OLES.MX.Adjusted
## 1 0.02213441 0.03569064 0.03124074 0.03627431
## KIMBERA.MX.Adjusted TLEVISACPO.MX.Adjusted PINFRA.MX.Adjusted
## 1 0.02309146 0.03602294 0.02307857
## CUERVO.MX.Adjusted CEMEXCPO.MX.Adjusted Q.MX.Adjusted RA.MX.Adjusted
## 1 0.02256646 0.03476335 0.02862548 0.03513402
## GCARSOA1.MX.Adjusted ASURB.MX.Adjusted WALMEX.MX.Adjusted ORBIA.MX.Adjusted
## 1 0.03249476 0.029566 0.01751217 0.03184466
## BOLSAA.MX.Adjusted GFINBURO.MX.Adjusted LIVEPOLC.1.MX.Adjusted
## 1 0.02974209 0.031974 0.02938293
## BBAJIOO.MX.Adjusted MEGACPO.MX.Adjusted ALSEA.MX.Adjusted AC.MX.Adjusted
## 1 0.02951595 0.02242532 0.04089855 0.01648622
## ALFAA.MX.Adjusted LABB.MX.Adjusted KOFUBL.MX.Adjusted ELEKTRA.MX.Adjusted
## 1 0.04164251 0.02790459 0.01863899 0.008432233
## FEMSAUBD.MX.Adjusted VOLARA.MX.Adjusted VESTA.MX.Adjusted
## 1 0.02226895 0.0447807 0.02346043
class(stddev)
## [1] "data.frame"
##Sharpe Ratio
Calculamos el valor el Sharpe Ratio con una tasa de 3% diaria.