Optimización de cartera
1# Instalar la librería PyPortfolioOpt
2!pip install PyPortfolioOpt
3
4# Importar librerías necesarias
5import pypfopt as ppo
6import yfinance as yf
7import pandas as pd
8import numpy as np
9import matplotlib.pyplot as plt
10
11# Importar módulos específicos de PyPortfolioOpt
12from pypfopt import EfficientFrontier
13from pypfopt import risk_models
14from pypfopt import expected_returns
15from pypfopt import objective_functions # Para la regularización L2
16from pypfopt import plotting
17from pypfopt import HRPOpt
1# Definir los símbolos de las acciones a analizar
2simbolos = ["AAPL", "MSFT", "TSLA", "META", "NVDA"]
3
4# Descargar los datos históricos desde Yahoo Finance
5df = yf.download(simbolos, start='2021-01-01', end='2023-12-31', rounding=True)
6
7# Extraer los precios ajustados
8precios = df['Adj Close']
9
10# Calcular los rendimientos diarios
11rendimientos = precios.pct_change()[1:]
12
13# Calcular los rendimientos esperados (promedio diario)
14rendEsp = rendimientos.mean()
15
16# Mostrar los rendimientos esperados
17print(rendEsp)
18
19# Confirmar el tipo de objeto
20type(rendEsp) # <class 'pandas.core.series.Series'>
1# Rendimientos esperados diarios simples calculados directamente a partir de los precios ajustados
2# Ticker
3# AAPL 0.000705
4# META 0.000816
5# MSFT 0.000916
6# NVDA 0.002320
7# TSLA 0.000715
1# Calcular los rendimientos esperados anuales utilizando PyPortfolioOpt
2rendEsp1 = expected_returns.mean_historical_return(
3 precios,
4 returns_data=False,
5 compounding=True,
6 frequency=252,
7 log_returns=False
8)
9
10# Mostrar los rendimientos anuales calculados
11print(rendEsp1)
12
13# Graficar los rendimientos esperados como barra horizontal
14rendEsp1.plot(kind="barh")
1# Rendimientos esperados anuales usando retorno histórico medio
2# Ticker
3# AAPL 0.149113
4# META 0.096424
5# MSFT 0.211736
6# NVDA 0.562126
7# TSLA 0.007140
1# Calcular el rendimiento histórico medio ponderado exponencialmente
2rendEsp2 = expected_returns.ema_historical_return(
3 precios,
4 returns_data=False,
5 compounding=True,
6 span=500,
7 frequency=252,
8 log_returns=False
9)
10
11# Mostrar los rendimientos calculados
12rendEsp2
1# Rendimientos esperados anuales usando retorno ponderado exponencialmente (EMA)
2# Ticker
3# AAPL 0.227246
4# META 0.647593
5# MSFT 0.341232
6# NVDA 1.058095
7# TSLA 0.263132
1# Calcular el rendimiento esperado usando el modelo CAPM
2rendEsp3 = expected_returns.capm_return(
3 precios,
4 market_prices=None,
5 returns_data=False,
6 risk_free_rate=0.02,
7 compounding=True,
8 frequency=252,
9 log_returns=False
10)
11
12# Mostrar los rendimientos calculados
13rendEsp3
14
15# Graficar los rendimientos esperados
16rendEsp3.plot(kind='barh')
1# Calcular matriz de covarianza tradicional
2matrizCov = rendimientos.cov()
3print(matrizCov)
4
5# Calcular matriz de covarianza con PyPortfolioOpt
6matrizCov1 = risk_models.sample_cov(precios)
7print(matrizCov1)
8
9# Graficar matriz de covarianza como matriz de correlación
10plotting.plot_covariance(matrizCov1, plot_correlation=True, show_tickers=True)
1# Calcular la matriz de covarianza usando el método de Ledoit-Wolf
2matrizCov2 = risk_models.CovarianceShrinkage(precios).ledoit_wolf()
3print(matrizCov2)
Explora el Proyecto
Contenido Relacionado
Introducción a la optimización de carteras en Python
La optimización de carteras en Python implica el uso de herramientas y métodos de Python para crear una cartera de inversiones que busca maximizar la rentabilidad y minimizar el riesgo. A continuación, se explica cómo usar el paquete de Python PyPortfolioOpt para la optimización de carteras.
PyPortfolioOpt
PyPortfolioOpt es una biblioteca que implementa métodos de optimización de cartera, incluidas las técnicas clásicas de frontera eficiente y la asignación de Black-Litterman, así como desarrollos más recientes en el campo como la contracción y la paridad de riesgo jerárquica, junto con algunas características experimentales novedosas como matrices de covarianza ponderadas exponencialmente.
Comentarios
Cargando comentarios...