PORTAFOLIO DE INVERSION

https://rpubs.com/EsmeraldaAN/EM

DESCRIPCION DEL PORTAFOLIO

En el presente trabajo se va aplicar la teoría de portafolios eficientes para la elaboración de una cartera de inversión, en este caso se asume que la cartera de inversión será la de un banco, que tiene cómo política de inversión instrumentos de renta variable con un horizonte de inversión de mediano a corto plazo, se tomara invertir 8 valores bursátiles, que conforman el índice NASDAQ-100.

Valores Bursátiles

Los nueve activos bursatiles de la cartera forman pare del índice NASDAQ-100, se seleccionó el período desde 2017 hasta 2020:

  • Ross Stores(ROST): Su actividad es de venta al por menor, su sede Estados Unidos, su volumen de este es de 5 Millones dentro del Indice de NASDAQ-100.

  • Activison Blizzard(ATVI): Es una empresa estadounidense de videojuegos que posee Activision creadora de la saga Call of Duty, Guitar Hero, Tony Hawk Skylanders entre otras y Blizzard Entertainment. Su volumen dentro del indice es de 6 millones de dolares.

  • Comcast Corporation(CMCSA): Es un conglomerado de medios de comunicación estadounidense que ofrece servicios televisivos por cable, Internet y telefonía. Sus oficinas corporativas se encuentran en Filadelfia, Pensilvania. Su volumen dentro del indice es de 19,83 millones de dolares.

  • Marriott International(MAR): Es una cadena de hoteles de lujo estadounidense con sede en Maryland, Estados Unidos. Su volumen dentro del indice es de 5.29 millones de dolares.

  • Incyte Corporation(INCY):Incyte es una compañía biofarmacéutica global fundada sobre la premisa de que la inversión en ciencia sólida y la búsqueda incesante de la excelencia en I + D pueden traducirse en nuevas soluciones que pueden afectar positivamente la vida de los pacientes. Su volumen dentro del indice es de 2.27 millones de dolares.

  • PepsiCo(PEP): Es una empresa multinacional estadounidense dedicada a la fabricación, comercialización y distribución de bebidas y aperitivos. Tiene su sede en Purchase, Nueva York, Estados Unidos. PepsiCo se formó en 1965 a partir de la fusión de la Pepsi-Cola Company y Frito-Lay. Su volumen dentro del indice es de 3.47 millones de dolares.

  • QUALCOMM Incorporated(QCOM): Es una compañía estadounidense fundada en 1985 que produce chipsets para la tecnología móvil CDMA y W-CDMA. Y son los creadores y diseñadores de los procesadores Snapdragon También es responsable del cliente de correo electrónico Eudora. Su volumen dentro del indice es de 5.56 millones de dolares.

  • Walgreens Boots Alliance(WBA): Es una farmacia minorista la más grande de los Estados Unidos y Europa con más de 170 años de servicio a las comunidades, impulsan la industria y su proposito es ayudar a las personas de todo el mundo a llevar una vida más sanas y feliz. Su volumen dentro del indice es de 9.02 millones de dolares.

Obtención de datos.

A continuación, se obtendrá los datos de las siguientes acciones del periodo 2017-01-01 y 2020-11-19, estos datos tendrán una frecuencia diaria. Para lograr ello, se usará los siguientes códigos:

Ticker <- c("ROST","ATVI","CMCSA","MAR","INCY","PEP","QCOM","WBA")


k <- 1 
acciones <- data.table()
for (i in Ticker){
  dt_base <- data.table(Ad(getSymbols(i, 
                                      from = "2017-01-01",
                                      to= "2020-11-19",
                                      src = "yahoo",
                                      auto.assign = F)),keep.rownames = T)
  if (k == 1){
# si k es igual a 1, el primer elemento, entonces dt_acciones, se le agrega a la primera columna 
    acciones <- copy(dt_base)
  } else {
    acciones <- merge(acciones,dt_base,by = "index", all.x = T, all.y = T)
    
  }
  k <- k + 1
}

indice<- get.hist.quote(instrument = "^IXIC", 
                        start=as.Date("2017-01-01"), 
                        end=as.Date("2020-11-19"), quote = "AdjClose")
## time series starts 2017-01-03
## time series ends   2020-11-18

Como se observa, se utiliza la función getSymbols.yahoo para poder obtener los datos de las acciones indicando en el parámetro from la fecha desde se iniciará la descarga de datos, en el parámetro to colocamos la fecha final del periodo que se analizara y en el parámetro periodicity colocaremos daily pues se trabajaran con datos diarios.

Una vez cargada la base de datos de las acciones que van a comformar el portafolio, cambiaremos index por fecha para una mejor visualización y se seleccionaran solo los precios ajustados ya que estos son los precios de cierre de una acción en cualquier día de negociación que ha sido modificado para incluir cualquier distribución y acciones corporativas que ocurrieron en cualquier momento antes de la apertura del día siguiente, son al precios que han sido descontados los pagos de los dividendos si hubieran.

setnames(acciones,"index","Fecha")# cambiar el nombre
colnames(acciones) <- str_replace_all(colnames(acciones),
                                         pattern = ".Adjusted",
                                         replacement = "")

Para poder confirmar que se tuvieron los datos deseados, se utilizara la función head para mostrar los 5 primeros datos descargados y luego se ejecutara la función tail para exponer los últimos datos de la serie descargada, además se utilizara la función length para determinar el número de datos descargados, para ello se ejecutara el siguiente codigo:

head(acciones, 5) #Mostras los primeros datos de la serie descargada.
##         Fecha     ROST     ATVI    CMCSA      MAR   INCY      PEP     QCOM
## 1: 2017-01-03 63.15343 35.53465 31.71355 79.04015 102.32 91.57735 56.36116
## 2: 2017-01-04 64.05823 36.23292 32.09016 78.88686 102.84 91.75236 56.42149
## 3: 2017-01-05 63.23043 36.79543 32.21876 78.35036 104.81 91.62986 56.49043
## 4: 2017-01-06 62.86465 36.76633 32.27388 78.84854 108.31 91.49858 56.47319
## 5: 2017-01-09 62.99942 36.56267 32.53108 78.80064 118.53 90.53600 56.57662
##         WBA
## 1: 72.43430
## 2: 72.45177
## 3: 72.49541
## 4: 72.55653
## 5: 72.07632
tail(acciones, 5) #Mostrar los últimos datos de la serie descargada.
##         Fecha     ROST     ATVI    CMCSA    MAR  INCY      PEP     QCOM
## 1: 2020-11-12 104.1179 76.34037 47.54363 115.34 82.32 140.6635 141.8879
## 2: 2020-11-13 107.6213 77.17632 48.55435 120.00 82.53 141.5143 142.2330
## 3: 2020-11-16 110.3186 77.06686 49.08945 123.76 84.35 142.5411 146.9754
## 4: 2020-11-17 109.9404 76.73844 49.32726 122.78 82.98 142.0326 146.6501
## 5: 2020-11-18 110.7764 75.13620 48.69308 120.34 82.74 140.2137 144.9838
##         WBA
## 1: 39.56994
## 2: 41.45284
## 3: 42.80192
## 4: 38.67702
## 5: 37.54564
length(acciones$AAL) #Motrar el número de elementos de la serie.
## [1] 0

Por lo que se ve que la base de datos obtenido cuenta con 978 datos. A continuación, se calculara los retornos de la base de datos previamente obtenidas.

Retornos

library(PerformanceAnalytics)

retorno_acc<- data.table(Return.calculate(acciones),keep.rownames = T)
head(retorno_acc,10)
##          index          ROST          ATVI        CMCSA           MAR
##  1: 2017-01-03            NA            NA           NA            NA
##  2: 2017-01-04  0.0143271402  0.0196504825  0.011875364 -0.0019394952
##  3: 2017-01-05 -0.0129226320  0.0155246381  0.004007490 -0.0068008668
##  4: 2017-01-06 -0.0057849832 -0.0007905874  0.001710649  0.0063584139
##  5: 2017-01-09  0.0021438600 -0.0055394969  0.007969355 -0.0006074558
##  6: 2017-01-10  0.0201680746  0.0180372231  0.001270539 -0.0038906662
##  7: 2017-01-11 -0.0032948811  0.0213653658  0.011139119  0.0111071976
##  8: 2017-01-12  0.0006009844 -0.0017857602 -0.004043905 -0.0114678462
##  9: 2017-01-13  0.0051057672 -0.0046001094  0.018902291  0.0091584874
## 10: 2017-01-17  0.0028387559  0.0000000000 -0.002885966 -0.0031461225
##             INCY           PEP          QCOM           WBA
##  1:           NA            NA            NA            NA
##  2:  0.005082056  0.0019110729  0.0010703470  0.0002411979
##  3:  0.019155991 -0.0013351699  0.0012219990  0.0006024422
##  4:  0.033393761 -0.0014327098 -0.0003053083  0.0008430740
##  5:  0.094358796 -0.0105201413  0.0018315241 -0.0066185218
##  6:  0.006496279 -0.0144016850 -0.0003048963  0.0014536536
##  7: -0.033612757 -0.0015691881  0.0071614131  0.0212893706
##  8:  0.019602758  0.0002947511  0.0003027504 -0.0060404694
##  9:  0.001701378 -0.0028477182  0.0114942424 -0.0011916887
## 10: -0.034904467  0.0063024656 -0.0402212864  0.0047723601

Para una mejor visualizacion cambiaremos de nombre a index como fecha y ademas omitiremos la variable na de los retornos.

setnames(retorno_acc, "index","Fecha")# paea cambiar el nombre

retorno_acc <- na.omit(retorno_acc)# botrar en na

A continuacion pasaremos a graficar los retornos previamnete obtenidos con la finalidad de ver la volatilidad de estos:

library(dygraphs)
## Warning: package 'dygraphs' was built under R version 4.0.5
datewindow <- c(min(retorno_acc$Fecha),max(retorno_acc$Fecha))
dygraph(retorno_acc)
dygraph(acciones, main = "Price", group = "Stock") %>%
  dyRangeSelector(dateWindow = datewindow)

Se puede observar en conjunto los históricos de las series temporales y se aprecia el comportamiento creciente en cada uno de ellos con algunos períodos de desaceleración. Por último, la perturbación al final del primer trimestre del 2020 impulsado por la alarma de pandemia del Covid-19. Además se puede observar que la acción que cayó más es MAR y se ha ido recuperando paulatinamente, y el que presenta un mayor precio por accion al termino de Noviembre, PEP y Qcom.

summary(retorno_acc[,-1])
##       ROST                 ATVI               CMCSA           
##  Min.   :-0.2011454   Min.   :-0.123905   Min.   :-0.0836512  
##  1st Qu.:-0.0078635   1st Qu.:-0.010440   1st Qu.:-0.0079115  
##  Median : 0.0015236   Median : 0.002143   Median : 0.0008985  
##  Mean   : 0.0008273   Mean   : 0.001025   Mean   : 0.0005886  
##  3rd Qu.: 0.0092053   3rd Qu.: 0.013009   3rd Qu.: 0.0093983  
##  Max.   : 0.1662877   Max.   : 0.188774   Max.   : 0.1256442  
##       MAR                  INCY                 PEP            
##  Min.   :-0.1519138   Min.   :-2.293e-01   Min.   :-0.1142833  
##  1st Qu.:-0.0078686   1st Qu.:-1.390e-02   1st Qu.:-0.0048469  
##  Median : 0.0010195   Median :-3.866e-04   Median : 0.0007168  
##  Mean   : 0.0007256   Mean   : 9.112e-05   Mean   : 0.0005362  
##  3rd Qu.: 0.0106689   3rd Qu.: 1.368e-02   3rd Qu.: 0.0060795  
##  Max.   : 0.1948205   Max.   : 1.064e-01   Max.   : 0.1293661  
##       QCOM                 WBA            
##  Min.   :-0.1494525   Min.   :-0.1280516  
##  1st Qu.:-0.0090229   1st Qu.:-0.0083519  
##  Median : 0.0009093   Median : 0.0008431  
##  Mean   : 0.0012643   Mean   :-0.0004631  
##  3rd Qu.: 0.0102427   3rd Qu.: 0.0090770  
##  Max.   : 0.2320740   Max.   : 0.1260361
RendimientoPromedio = c(mean(diff(log(indice))),mean(retorno_acc$QCOM),mean(retorno_acc$ROST),mean(retorno_acc$ATVI),mean(retorno_acc$CMCSA),mean(retorno_acc$MAR),mean(retorno_acc$INCY),mean(retorno_acc$PEP),mean(retorno_acc$WBA))

Volatilidad = c(sd(diff(log(indice))),sd(retorno_acc$QCOM),sd(retorno_acc$ROST),sd(retorno_acc$ATVI),sd(retorno_acc$CMCSA),sd(retorno_acc$MAR),sd(retorno_acc$INCY),sd(retorno_acc$PEP), sd(retorno_acc$WBA))

Cuadro = data.frame (rbind(RendimientoPromedio,Volatilidad))
colnames(Cuadro)<- c("NASDAQ","QCOM","ROST","ATVI","CMCSA","MAR","INCY","PEP","WBA")

Cuadro*100 
##                         NASDAQ      QCOM       ROST      ATVI      CMCSA
## RendimientoPromedio 0.07947445 0.1264277 0.08273177 0.1025277 0.05885836
## Volatilidad         1.44704803 2.4537367 2.24398770 2.2750147 1.73099465
##                            MAR        INCY        PEP         WBA
## RendimientoPromedio 0.07255836 0.009112356 0.05361678 -0.04631402
## Volatilidad         2.44051276 2.468378538 1.41330299  2.03864660

Rendimiento promedio esperado:

El rendimiento promedio esperado diario del mercado está representado por el Índice NASDAQ, en este caso es del 0,0795%, un valor por debajo del rendimiento medio diario individual de casi todos los demás activos que componen la cartera.

El activo de mayor rendimiento viene dado por las acciones de QUALCOMM Incorporated (QCOM) con un rendimiento promedio diario esperado de 0,12%; le siguen los valores de Activison Blizzard (ATVI) con un 0,103%; en el tercer puesto se encuentra el instrumento de Ross Stores (ROST) con un 0,0827%. Y los últimos lugares son para Marriott International (MAR) con 0,072%; Comcast Corporation (CMCSA) con 0,0588%, PepsiCo Inc (PEP) 0.0536%, Incyte Corporation (INCY) 0.0009% y Walgreens Boots Alliance (WBA) -0,0463%.

Volatilidad

Observando la volatilidad representada por la desviación estándar del mercado es decir, del NASDAQ para el caso, se ubica en 1,44% el valor más bajo comparado con los activos seleccionados excepto el de Pepsico (PEP).

El activo de menor volatilidad es el de PepsiCo Inc (PEP) con el 1,41% diario; seguido por Comcast Corporation (CMCSA) con el 1,73%; el tercer lugar es para el instrumento de Walmart Corporate (WBA) 2,03%.

Los más volátiles serían, en primer lugar Incyte Corporation (INCY) con 2.46% que a su vez, es el de mayor rendimiento diario; siguen QUALCOMM Incorporated (QCOM) con 2.45%, Marriott International (MAR) con 2.44%,Activison Blizzard (ATVI) con un 2.27% y Ross Stores (ROST) con un 2.24%.

OPTIMIZACION DE PORTAFOLIO

En este apartado se tiene que convertir la base de dato, que en este caso son los precios ajustados de cada acción, previamnete convertidos en retornos, a una serie temporal, con la funcion timeSeries.

library(fPortfolio)
library(fAssets)
library(timeSeries)
library(numDeriv)

# Convertiendo los datos a series de tiempo

date1 <- as.Date(retorno_acc$Fecha,"%Y/%m/%d")
ts_retorno <- timeSeries(retorno_acc[,-1],date1)

PerformanceAnalytics::chart.CumReturns(ts_retorno,legend.loc = "topleft",
                                       main = "Precios de acciones estandarizados ")

Una vez convertida la base de datos en serie de tiempo,según en gráfico, se puede observar que en terminos de retorno acumulados, el que presenta mayores retornos acumulado es QCOM

Modelo de Markowitz

El conjunto eficiente de Markowitz es una cartera con rendimientos que se maximizan para un determinado nivel de riesgo en función de la construcción de la cartera de varianza media .

Tasa Libre de Riesgo

La tasa libre de riesgo representa el interés que un inversionista esperaría de una inversión absolutamente libre de riesgo durante un período de tiempo específico.

Primero vamos a conocer el portafolio con la función showClass, la función formals(portfolioSpec) nos describe todo lo que se necesita para realizar la optimización.

Definimos la especificacion con Spec, pero como no cambiamos nada lo dejamos tan cual se observo en formals(portfolioSpec),este portafolio es de Mean-Varianza, como es de de Markowitz, el tipo de optimizacion que se va realizar es de MinRisk, pero se puede cambiar por MaxReturns, respecto a al estimador existe multiplipes estimadores de covarianza, en este caso se utlizara el covEstimator. Respeco al portafolio se puede poner un target returns o un targetrisk, segun las preferencias del inversor.

Por otro lado, tenemos a la optimizacion, que por defecto se calculara mediante solverRquadprog.

showClass("fPFOLIOSPEC")
## Class "fPFOLIOSPEC" [package "fPortfolio"]
## 
## Slots:
##                                                         
## Name:      model portfolio     optim  messages      ampl
## Class:      list      list      list      list      list
formals(portfolioSpec)
## $model
## list(type = "MV", optimize = "minRisk", estimator = "covEstimator", 
##     tailRisk = list(), params = list(alpha = 0.05))
## 
## $portfolio
## list(weights = NULL, targetReturn = NULL, targetRisk = NULL, 
##     riskFreeRate = 0, nFrontierPoints = 50, status = NA)
## 
## $optim
## list(solver = "solveRquadprog", objective = c("portfolioObjective", 
##     "portfolioReturn", "portfolioRisk"), options = list(meq = 2), 
##     control = list(), trace = FALSE)
## 
## $messages
## list(messages = FALSE, note = "")
## 
## $ampl
## list(ampl = FALSE, project = "ampl", solver = "ipopt", protocol = FALSE, 
##     trace = FALSE)

Restricciones

Spec <- portfolioSpec()

setRiskFreeRate(Spec)<- 0.0001 #Tasa libre de riesgo
setNFrontierPoints(Spec) <- 50 #Cantidad de carteras en frontera
setType(Spec) <- "MV"
setEstimator(Spec) <- "covEstimator"
setOptimize(Spec) <- "minRisk"
setOptimize(Spec) <- "solveRquadprog"
constraints <- "LongOnly" # Que los pesos varien de 0 a 1(posicion larga)

Portafolio Eficiente

El portafolio efiente se esta calculando teniendo en cuenta que se desea optener el minimo riesgo, como se analizo previamente la acción que tenia menos riesgo era la accion PepsiCo Inc. (PEP), es por ello que este que se le asigna mayor peso 0.51, seguido a su vez de Activison Blizzard (ATVI) con un peso de 0.10, Marriott International(MAR) con un peso de 0.1006, Incyte Corporation (INCY) 0.09, Comcast Corporation con un peso ( CMCSA) 0.08, Walmart Corporate (WBA) con un eso de 0.083 Ross Stores (ROST) co un pesp 0.01 y QUALCOMM Incorporated (QCOM) que no se asignpo ningun peso, esto se debe a que este es uno de los activos con mayor riesgo.

efPortfolio<- efficientPortfolio(ts_retorno,Spec);efPortfolio
## 
## Title:
##  MV Efficient Portfolio 
##  Estimator:         covEstimator 
##  Solver:            solveRquadprog 
##  Optimize:          solveRquadprog 
##  Constraints:       LongOnly 
## 
## Portfolio Weights:
##   ROST   ATVI  CMCSA    MAR   INCY    PEP   QCOM    WBA 
## 0.0157 0.1053 0.0849 0.1006 0.0959 0.5141 0.0000 0.0836 
## 
## Covariance Risk Budgets:
##   ROST   ATVI  CMCSA    MAR   INCY    PEP   QCOM    WBA 
## 0.0157 0.1053 0.0849 0.1006 0.0959 0.5141 0.0000 0.0836 
## 
## Target Returns and Risks:
##   mean    Cov   CVaR    VaR 
## 0.0005 0.0123 0.0294 0.0181 
## 
## Description:
##  Sun Jun 27 23:47:18 2021 by user: Esmeralda

Portafolio Tangente

El portafolio tangente se elabora a partir del índice o razón de Sharpe, el cual calcula el exceso de rentabilidad sobre la tasa de interés libre de riesgo logrado por el portafolio por unidad de volatilidad o riesgo propio del portafolio. El ratio de Sharpe muestra la rentabilidad ajustada por la tasa libre de riesgo y el riesgo de la covarianza, en este caso previamente ya definimos la tasa libre de riesgo

setRiskFreeRate(Spec)<- 0.0001
setParams(Spec) <- 0.01 # VAR

tgPortafolio<- tangencyPortfolio(ts_retorno,Spec);tgPortafolio# ratio sharpe
## 
## Title:
##  MV Tangency Portfolio 
##  Estimator:         covEstimator 
##  Solver:            solveRquadprog 
##  Optimize:          minRisk 
##  Constraints:       LongOnly 
## 
## Portfolio Weights:
##   ROST   ATVI  CMCSA    MAR   INCY    PEP   QCOM    WBA 
## 0.1946 0.3279 0.0000 0.0191 0.0000 0.0908 0.3676 0.0000 
## 
## Covariance Risk Budgets:
##   ROST   ATVI  CMCSA    MAR   INCY    PEP   QCOM    WBA 
## 0.1531 0.3282 0.0000 0.0129 0.0000 0.0428 0.4630 0.0000 
## 
## Target Returns and Risks:
##   mean    Cov   CVaR    VaR 
## 0.0010 0.0165 0.0675 0.0472 
## 
## Description:
##  Sun Jun 27 23:47:19 2021 by user: Esmeralda

Se puede observar los pesos, teniendo en cuenta la tasa libre de riesgo añadido.

Optimizacion

RatioSharpeOptimization <- tangencyPortfolio(ts_retorno,Spec,constraints)
RatioSharpeOptimization@portfolio@portfolio$weights#usar los @ para ver los pesos
##       ROST       ATVI      CMCSA        MAR       INCY        PEP       QCOM 
## 0.19459710 0.32794703 0.00000000 0.01905487 0.00000000 0.09078205 0.36761895 
##        WBA 
## 0.00000000
EfficientPortfolio <- efficientPortfolio(ts_retorno,Spec,constraints)

MinimaVarianzaPortfolio <- minvariancePortfolio(ts_retorno,Spec,constraints)#minima varianza

# EfficientPortfolio y MinimaVarianczaPortolio ambos salen igual porque no esta definido un target, ambos minimizan el riesgo
Los pesos obtenidos son los pesos obtenidos con el ratio de Sharpe, donde se optimiza teniendo en cuenta una tasa libre de riesgo de 0.01%.

FRONTERA EFICIENTE DEL PORTALIO

En el gráfico de las fronteras eficientes se realizaron 1000 simulaciones MonteCarlo que son los pequeños puntos negros deseminados en el área, cada uno representa una cartera de rendimiento para un determinando nivel de riesgo.

En la frontera se encuentran veinte (50) círculos pequeños naranja y rojo que son los posibles portafolios, y el punto verde es el punto optimo donde el ratio de sharpe se cumplio, el punto azul es el punto donde los pesos serian iguales.

FronteraEficiente <- portfolioFrontier(ts_retorno,Spec,constraints)

#Graficando
frontierPlot(FronteraEficiente)

frontierPlot(FronteraEficiente,
             col = c("orange","red"),
             pch = 19,
             labels = T)
sharpeRatioLines(FronteraEficiente,col = "green")
monteCarloPoints(FronteraEficiente,
                 mcSteps = 1000,
                 lwd = 0.75,
                 pch = 1,
                 cex = 0.001)
equalWeightsPoints(FronteraEficiente, col = "blue",pch = 20)

frontierPlot(FronteraEficiente,labels = T)

tailoredFrontierPlot(FronteraEficiente)#por default

Pesos de los Portafolios

weightsPlot(FronteraEficiente)

v_pesos <- rep(1,ncol(retorno_acc)-1)/(ncol(retorno_acc)-1)#1/5
v_pesos <- as.vector(RatioSharpeOptimization@portfolio@portfolio$weights)#peso optimizado
v_pesos
## [1] 0.19459710 0.32794703 0.00000000 0.01905487 0.00000000 0.09078205 0.36761895
## [8] 0.00000000
col <- qualiPalette(ncol(retorno_acc), "Pastel1")
weightsPie(efPortfolio, col=col )
mtext(text = "Portafolio eficiente", side = 3, line = 1.5,
        font = 2, cex = 0.7, adj = 0)

weightsPie(tgPortafolio, col=)
mtext(text = "Portafolio tangente", side = 3, line = 1.5,
        font = 2, cex = 0.7, adj = 0)

Participación por portafolio:

Composición del Portafolio Eficiente

  • PepsiCo Inc (PEP): 51.4%
  • Activison Blizzard (ATVI): 10.5%
  • Marriott International(MAR): 10,1%
  • Incyte Corporation (INCY): 9.6%
  • Comcast Corporation (CMCSA): 8.5%
  • Walmart Corporate (WBA): 8.4%
  • Ross Stores (ROS): 1.6%

Composición del Portafolio Tangente

  • QUALCOMM Incorporated (QCOM) :36.8%
  • Activison Blizzard (ATVI): 32.8%
  • Ross Stores (ROS): 19.5%
  • PepsiCo Inc (PEP): 9,1%
  • Marriott International(MAR): 1,9%

VaR SIMULACION MONECARLO

El VAR es una tecnica estadistica para medir el terminos sencillos la probabilidad de sufrir una pérdida monetaria dado niveles de significancias. En este caso se tomaran los siguientes niveles de significancias: α1=0.01

Por otro lado, el VaR Montercarlo es un método para estimar el VaR y este utilizá un software informático para generar miles de posibles resultados según datos iniciales introducidos y en este caso utilizará una simulacón que sigue un Movimiento Geometrico

Parametros Iniciales

Con sapply a cada uno de los elementos le va calcular un vector de medias y ademas el vector de desciacion estandár.

Además, como es diaria la base de datos, la iteracion es diaria un día. Luego se necesita la matriz de correlaciones.

v_medias <- sapply(retorno_acc[,-1],FUN = mean)
v_sigma <- sapply(retorno_acc[,-1],FUN = sd)

dt <- 1
iteraciones <- 10000
nAcciones <- length(v_medias)

MCorr <- cor(retorno_acc[,-1])

1: Simulacion de Variables Aleatorias Estandar

Se va a generar una matriz de 1000 simulaciones de variables aleatorias estandar, distribucion normal.

set.seed(1643)
Z <- matrix(NA,nrow = iteraciones,ncol = nAcciones)
Ret <- matrix(NA,nrow = iteraciones,ncol = nAcciones)

for(i in 1:length(v_sigma)){
  Z[,i] <- rnorm(n= iteraciones)
}

2: Descomposicion de Cholesky

En este caso nos da una matriz triangular superior, que basicamente en la transpuesta.

Lt <-  chol(MCorr)

3: Generar Variables Aleatorias Normal Estandar Correlacionadas

Za <- Z%*%Lt

#Test para verificar: son muy similares mariz de correlacion y la correlacion de la simulación.

  MCorr
##            ROST      ATVI     CMCSA       MAR      INCY       PEP      QCOM
## ROST  1.0000000 0.1697630 0.4384200 0.6011617 0.2175215 0.3793879 0.3526550
## ATVI  0.1697630 1.0000000 0.3471371 0.1494307 0.2590193 0.3130698 0.3712515
## CMCSA 0.4384200 0.3471371 1.0000000 0.4076953 0.2670078 0.5275906 0.4441915
## MAR   0.6011617 0.1494307 0.4076953 1.0000000 0.2294062 0.1933183 0.3463225
## INCY  0.2175215 0.2590193 0.2670078 0.2294062 1.0000000 0.2309891 0.2473220
## PEP   0.3793879 0.3130698 0.5275906 0.1933183 0.2309891 1.0000000 0.4165121
## QCOM  0.3526550 0.3712515 0.4441915 0.3463225 0.2473220 0.4165121 1.0000000
## WBA   0.3228009 0.2287877 0.4486294 0.3461622 0.2313522 0.4063443 0.3058475
##             WBA
## ROST  0.3228009
## ATVI  0.2287877
## CMCSA 0.4486294
## MAR   0.3461622
## INCY  0.2313522
## PEP   0.4063443
## QCOM  0.3058475
## WBA   1.0000000
  cor(Za)
##            ROST      ATVI     CMCSA       MAR      INCY       PEP      QCOM
## ROST  1.0000000 0.1646915 0.4399607 0.6067569 0.2072722 0.3711071 0.3391153
## ATVI  0.1646915 1.0000000 0.3388278 0.1557408 0.2686201 0.3129590 0.3674103
## CMCSA 0.4399607 0.3388278 1.0000000 0.4200735 0.2609709 0.5308810 0.4486656
## MAR   0.6067569 0.1557408 0.4200735 1.0000000 0.2404969 0.1914089 0.3328978
## INCY  0.2072722 0.2686201 0.2609709 0.2404969 1.0000000 0.2275882 0.2500260
## PEP   0.3711071 0.3129590 0.5308810 0.1914089 0.2275882 1.0000000 0.4158731
## QCOM  0.3391153 0.3674103 0.4486656 0.3328978 0.2500260 0.4158731 1.0000000
## WBA   0.3245934 0.2367812 0.4614113 0.3456053 0.2181670 0.4150522 0.3101813
##             WBA
## ROST  0.3245934
## ATVI  0.2367812
## CMCSA 0.4614113
## MAR   0.3456053
## INCY  0.2181670
## PEP   0.4150522
## QCOM  0.3101813
## WBA   1.0000000

4: Generar los Retornos por GBM

El Movimiento Browniano Geométrico (GBM) es un caso particular del proceso Ito. EL GBM se define de la siguiente manera:

\[ S_t=S_0 e^{(\mu −0.5σ^2)\Delta t+\sigma \sqrt{ \Delta t\epsilon}} , \epsilon ∼N(0,1)\]

Al definir el GBM en términos sencillos se obtiene:

\[\Delta S= \mu S\Delta t+\sigma S\Delta z\]

El proceso se denomina como “geométrico” porque tanto los términos de tendencia como de volatilidad son proporcionales al valor de mercado de \(S\) (valor actual). Esta característica es vista empíricamente en los precios de los activos de renta variable como las acciones, cuya peculiar característica denota que las tasas de rendimiento tienen tendencias a ser “más” estacionarias con respecto de las ganancias brutas en términos monetarios: \(\Delta S\). La descripción anterior es aplicable también para las divisas, esta situación se debe a que ΔS/S representa per se a la apreciación del capital, \(\mu\) representa el rendimiento esperado total del activo menos la tasa de pago de ingresos, o para los instrumentos de renta variable como las acciones representa los rendimientos de los dividendos.

for (i in 1:nAcciones){
  Ret[,i] <- (v_medias[i]-0.5*v_sigma[i]^2)*dt + 
    v_sigma[i]*sqrt(dt)*Za[,i]
}

Retorno del Portafolio

Retorno por los pesos es el retorno del portafolio.

RetPort <- rowSums(Ret*v_pesos)
hist(RetPort)

# Calcular el valor en riesgo
alpha <- 0.01
VaR_Montecarlo <- quantile(RetPort,alpha);VaR_Montecarlo
##          1% 
## -0.06757944
CvaR_Montecarlo <- mean(RetPort[RetPort<= VaR_Montecarlo]); CvaR_Montecarlo
## [1] -0.08502964
CvaR_Monetario<-CvaR_Montecarlo*100000; CvaR_Monetario
## [1] -8502.964

Después de realizar las simulaciones del VaR y obtener los valores cuantitativos en términos monetarios al multiplicar los estadísticos por \(\$100,000\) (Valor de la Cartera) se puede indicar que:

  • La pérdida media (esperada) máxima con un nivel de confianza del 99% con una frecuencia diaria es de \(\$8502.968\) dolares.