El asset allocation es uno de los pilares fundamentales en la gestión de carteras, ya que consiste en distribuir los activos de inversión en diferentes clases para maximizar el retorno ajustado al riesgo, según los objetivos y el perfil de riesgo del inversor. Tradicionalmente, los portafolios han estado compuestos por acciones, bonos, efectivo y otros activos tangibles, pero en la última década, las criptomonedas han surgido como una nueva clase de activo que presenta tanto oportunidades como desafíos.
Incluir criptomonedas en la gestión de una cartera puede diversificar el riesgo, ya que su comportamiento no siempre sigue los patrones de los activos tradicionales, como las acciones o los bonos. Esta baja correlación histórica con los mercados financieros convencionales sugiere que las criptomonedas pueden actuar como una herramienta útil de diversificación, lo que potencialmente mejora el perfil de riesgo-retorno de la cartera.
No obstante, las criptomonedas también están sujetas a una mayor volatilidad, lo que hace necesario un enfoque estratégico en su asignación dentro de una cartera diversificada. La inclusión de activos como Bitcoin y Ethereum permite a los gestores de portafolio aprovechar las ganancias potenciales de este mercado emergente, pero al mismo tiempo exige una rigurosa gestión del riesgo para mitigar el impacto de sus fluctuaciones extremas.
Para este ejemplo, puedes usar Yahoo Finance para descargar datos históricos de las Criptomonedas: Bitcoin (BTC-USD) y Ethereum (ETH-USD). Las acciones: Apple (AAPL), Microsoft (MSFT), Home Depot (HD), Visa (V), Tesla (TSLA), Nvidia (NVDA), NIO (NIO), y Dick’s Sporting Goods (DKS). y los Fondos: Vanguard FTSE Emerging Markets ETF (VWO), iShares 20+ Year Treasury Bond ETF (TLT), e iShares iBoxx $ Investment Grade Corporate Bond ETF (LQD).
# Descargar los datos desde Yahoo Finance
symbols <- c("BTC-USD", "ETH-USD", "AAPL", "MSFT", "HD", "V", "TSLA", "V", "NVDA", "NIO", "DKS",
"VWO", "TLT", "LQD")
getSymbols(symbols, src = "yahoo", from = "2020-01-01",
to = "2023-01-01")
## [1] "BTC-USD" "ETH-USD" "AAPL" "MSFT" "HD" "V" "TSLA"
## [8] "NVDA" "NIO" "DKS" "VWO" "TLT" "LQD"
# Obtener los retornos logarítmicos
retornos <- na.omit(cbind(
dailyReturn(Cl(`BTC-USD`[1:756])),
dailyReturn(Cl(`ETH-USD`[1:756])),
dailyReturn(Cl(AAPL)),
dailyReturn(Cl(MSFT)),
dailyReturn(Cl(HD)),
dailyReturn(Cl(TSLA)),
dailyReturn(Cl(V)),
dailyReturn(Cl(NVDA)),
dailyReturn(Cl(NIO)),
dailyReturn(Cl(DKS)),
dailyReturn(Cl(VWO)),
dailyReturn(Cl(TLT)),
dailyReturn(Cl(LQD))
))
# Renombrar las columnas
colnames(retornos) <- c("Bitcoin", "Ethereum", "Apple", "Microsoft", "HD", "TSLA", "V", "NVDA", "NIO",
"DKS", "VWO", "TLT", "LQD")
Define dos portafolios: uno que incluye las criptomonedas y otro que no.
# Portafolio con criptomonedas
portafolio_cripto <- portfolio.spec(assets = colnames(retornos))
portafolio_cripto <- add.constraint(portafolio_cripto, type = "weight_sum", min_sum = 1, max_sum = 1)
# Pesos entre 5% y 50%
portafolio_cripto <- add.constraint(portafolio_cripto, type = "box", min = 0.05, max = 0.5)
portafolio_cripto <- add.objective(portafolio_cripto, type = "return", name = "mean")
portafolio_cripto <- add.objective(portafolio_cripto, type = "risk", name = "StdDev")
# Portafolio sin criptomonedas (solo acciones)
portafolio_sin_cripto <- portfolio.spec(assets = c("Apple", "Microsoft", "HD",
"TSLA", "V", "NVDA", "NIO",
"DKS", "VWO", "TLT", "LQD"))
portafolio_sin_cripto <- add.constraint(portafolio_sin_cripto, type = "weight_sum", min_sum = 1, max_sum = 1)
# Pesos entre 5% y 50%
portafolio_sin_cripto <- add.constraint(portafolio_sin_cripto, type = "box", min = 0.05, max = 0.5)
portafolio_sin_cripto <- add.objective(portafolio_sin_cripto, type = "return", name = "mean")
portafolio_sin_cripto <- add.objective(portafolio_sin_cripto, type = "risk", name = "StdDev")
Utilizamos un algoritmo de optimización para encontrar las asignaciones óptimas de activos en ambos portafolios:
# Optimización del portafolio con criptomonedas
opt_portafolio_cripto <- optimize.portfolio(retornos, portfolio = portafolio_cripto,
optimize_method = "ROI", trace = TRUE)
# Optimización del portafolio sin criptomonedas
opt_portafolio_sin_cripto <- optimize.portfolio(retornos, portfolio = portafolio_sin_cripto,
optimize_method = "ROI", trace = TRUE)
opt_portafolio_cripto
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
##
## Call:
## optimize.portfolio(R = retornos, portfolio = portafolio_cripto,
## optimize_method = "ROI", trace = TRUE)
##
## Optimal Weights:
## Bitcoin Ethereum Apple Microsoft HD TSLA V NVDA
## 0.0500 0.1116 0.0500 0.0500 0.0500 0.3373 0.0500 0.0500
## NIO DKS VWO TLT LQD
## 0.0511 0.0500 0.0500 0.0500 0.0500
##
## Objective Measure:
## mean
## 0.003457
##
##
## StdDev
## 0.02537
opt_portafolio_sin_cripto
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
##
## Call:
## optimize.portfolio(R = retornos, portfolio = portafolio_sin_cripto,
## optimize_method = "ROI", trace = TRUE)
##
## Optimal Weights:
## Apple Microsoft HD TSLA V NVDA NIO DKS
## 0.0500 0.0500 0.0500 0.4478 0.0500 0.0500 0.1022 0.0500
## VWO TLT LQD
## 0.0500 0.0500 0.0500
##
## Objective Measure:
## mean
## 0.003563
##
##
## StdDev
## 0.02826
Puedes calcular otras métricas de rendimiento como el retorno esperado, la volatilidad y el ratio de Sharpe para cada portafolio.
# Retorno esperado y riesgo del portafolio con criptomonedas
retorno_esperado_cripto <- sum(opt_portafolio_cripto$weights * colMeans(retornos))
riesgo_cripto <- sqrt(t(opt_portafolio_cripto$weights) %*% cov(retornos) %*% opt_portafolio_cripto$weights)
# Retorno esperado y riesgo del portafolio sin criptomonedas
retorno_esperado_sin_cripto <- sum(opt_portafolio_sin_cripto$weights * colMeans(retornos[
, c("Apple", "Microsoft",
"HD", "TSLA", "V",
"NVDA", "NIO",
"DKS", "VWO", "TLT","LQD")]))
riesgo_sin_cripto <- sqrt(t(opt_portafolio_sin_cripto$weights) %*% cov(retornos[,c("Apple", "Microsoft",
"HD", "TSLA", "V",
"NVDA", "NIO",
"DKS", "VWO", "TLT",
"LQD")])%*%opt_portafolio_sin_cripto$weights)
# Imprimir resultados
cat("Portafolio con criptomonedas: Retorno esperado:", retorno_esperado_cripto, "Riesgo:", riesgo_cripto, "\n")
## Portafolio con criptomonedas: Retorno esperado: 0.003457135 Riesgo: 0.02537066
cat("Portafolio sin criptomonedas: Retorno esperado:", retorno_esperado_sin_cripto, "Riesgo:",
riesgo_sin_cripto, "\n")
## Portafolio sin criptomonedas: Retorno esperado: 0.003563164 Riesgo: 0.02826468
Al comparar los dos portafolios, uno que incluye criptomonedas y otro que no, observamos diferencias significativas en sus características de rendimiento y riesgo.
La inclusión de criptomonedas en un portafolio puede ser beneficiosa desde el punto de vista de la diversificación, ya que contribuye a reducir el riesgo total sin sacrificar el rendimiento esperado de manera notable. Esto sugiere que, para los inversores dispuestos a aceptar un cierto nivel de volatilidad, las criptomonedas pueden ser un complemento valioso que no solo diversifica, sino que también puede contribuir a un rendimiento general más equilibrado.
Sin embargo, es fundamental considerar la tolerancia al riesgo y los objetivos de inversión individuales, dado que la naturaleza volátil de las criptomonedas puede no ser adecuada para todos los inversores. La decisión de incluir criptomonedas en un portafolio debe ser cuidadosamente evaluada dentro del contexto de la estrategia de inversión global.