EmpezarEmpieza gratis

Calcular carteras

Ahora vamos a generar carteras para encontrar la mejor de cada mes. random.random() de numpy genera números aleatorios de una distribución uniforme; después los normalizamos para que sumen 1 usando el operador /=. Usamos estos pesos para calcular rentabilidades y volatilidad. Las rentabilidades son sumas de pesos por rentabilidades individuales. La volatilidad es más compleja e implica las covarianzas de las distintas acciones.

Por último, guardaremos los valores en diccionarios para usarlos más adelante, con las fechas de los meses como claves.

En este caso, solo generaremos 10 carteras para cada fecha para que el código se ejecute más rápido, pero en un caso real querrías usar entre 1000 y 5000 carteras generadas aleatoriamente para unas pocas acciones.

Este ejercicio forma parte del curso

Machine Learning para finanzas con Python

Ver curso

Instrucciones del ejercicio

  • Genera 3 números aleatorios para los pesos usando np.random.random().
  • Calcula returns haciendo el producto punto (np.dot(); multiplica elemento a elemento y suma dos arrays) de weights con las rentabilidades mensuales para la date actual en el bucle.
  • Usa el método .setdefault() para añadir una lista vacía ([]) al diccionario portfolio_weights para la date actual y, a continuación, añade weights a la lista.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

portfolio_returns, portfolio_volatility, portfolio_weights = {}, {}, {}

# Get portfolio performances at each month
for date in sorted(covariances.keys()):
    cov = covariances[date]
    for portfolio in range(10):
        weights = np.random.random(____)
        weights /= np.sum(weights) # /= divides weights by their sum to normalize
        returns = np.dot(____, returns_monthly.loc[____])
        volatility = np.sqrt(np.dot(weights.T, np.dot(cov, weights)))
        portfolio_returns.setdefault(date, []).append(returns)
        portfolio_volatility.setdefault(date, []).append(volatility)
        portfolio_weights.setdefault(date, ____).append(____)
        
print(portfolio_weights[date][0])
Editar y ejecutar código