CommencerCommencez gratuitement

Calculer des portefeuilles

Nous allons maintenant générer des portefeuilles afin d'identifier le meilleur de chaque mois. La fonction random.random() de numpy génère des nombres aléatoires selon une loi uniforme, puis nous les normalisons pour qu'ils somment à 1 grâce à l'opérateur /=. Nous utilisons ensuite ces pondérations pour calculer le rendement et la volatilité. Le rendement est la somme des pondérations multipliées par les rendements individuels. La volatilité est plus complexe et fait intervenir les covariances entre les différentes actions.

Enfin, nous stockerons les valeurs dans des dictionnaires pour un usage ultérieur, avec les dates des mois comme clés.

Ici, nous ne générerons que 10 portefeuilles par date pour accélérer l'exécution, mais dans un cas d'usage réel, vous voudriez plutôt utiliser entre 1 000 et 5 000 portefeuilles générés aléatoirement pour quelques actions.

Cet exercice fait partie du cours

<cours>Machine Learning pour la finance en Python</cours>
Voir le cours

Instructions de l’exercice

  • Générez 3 nombres aléatoires pour les pondérations avec np.random.random().
  • Calculez returns en prenant le produit scalaire (np.dot() ; multiplie élément par élément et somme deux tableaux) de weights avec les rendements mensuels pour la date courante dans la boucle.
  • Utilisez la méthode .setdefault() pour ajouter une liste vide ([]) au dictionnaire portfolio_weights pour la date courante, puis ajoutez-y weights avec append.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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])
Modifier et exécuter le code