Comece agoraComece grátis

Calcular portfólios

Agora vamos gerar portfólios para encontrar o melhor de cada mês. O random.random() do numpy gera números aleatórios de uma distribuição uniforme; em seguida, normalizamos esses números para que somem 1 usando o operador /=. Usamos esses pesos para calcular retorno e volatilidade. O retorno é a soma dos pesos multiplicados pelos retornos individuais. A volatilidade é mais complexa e envolve as covariâncias das diferentes ações.

Por fim, vamos armazenar os valores em dicionários para uso posterior, usando as datas dos meses como chaves.

Neste caso, vamos gerar apenas 10 portfólios para cada data para o código rodar mais rápido, mas em um caso de uso real você provavelmente usaria algo entre 1000 e 5000 portfólios gerados aleatoriamente para algumas ações.

Este exercicio faz parte do curso

Machine Learning para Finanças em Python

Ver curso

Instruções do exercicio

  • Gere 3 números aleatórios para os pesos usando np.random.random().
  • Calcule returns fazendo o produto escalar (np.dot(); multiplica elemento por elemento e soma dois arrays) de weights com os retornos mensais para a date atual no loop.
  • Use o método .setdefault() para adicionar uma lista vazia ([]) ao dicionário portfolio_weights para a date atual e, em seguida, acrescente weights a essa lista.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

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 e Executar Código