12 algorithmes d'optimisation de portefeuille comparés : HRP, Black-Litterman, NCO et au-delà
Chaque optimiseur de portefeuille répond à la même question : étant donné l'historique de prix d'une poignée d'actifs, quelle fraction du capital devrait se trouver dans chacun d'eux ? Le hic, c'est qu'il n'existe pas de réponse unique et correcte — seulement une famille de réponses, chacune étant le produit d'une hypothèse différente sur le comportement des marchés et sur le degré de confiance que vous accordez à vos propres estimations.
Alors plutôt que de parier sur une seule méthode, nous avons construit un outil qui en exécute douze côte à côte, toutes derrière une seule interface, et qui vous permet de les regarder être en désaccord sur des données réelles. C'est open source, écrit en Rust, et disponible en direct sur portfolio-optimizer.marketmaker.cc. Cet article est la carte : ce en quoi chaque algorithme croit, d'où vient la mathématique, et ce qui se passe lorsqu'on pointe les douze sur le même panier de cryptos.
Une interface, douze opinions
Chaque algorithme du projet expose exactement la même signature de fonction :
pub fn optimize(prices: &[Vec<f64>]) -> Vec<f64>
Des prix en entrée, des poids en sortie. Les poids sont exclusivement longs, non négatifs, et somment à 1,0. Cette uniformité est tout l'intérêt de la chose — elle signifie que vous pouvez remplacer Hierarchical Risk Parity par Mean-Variance Optimization sans toucher une seule ligne du code appelant, et que vous pouvez comparer les douze sur des entrées identiques. Chaque algorithme vit dans son propre crate (portfolio-hrp, portfolio-mvo, portfolio-nco, …), afin que vous puissiez ne dépendre que de celui dont vous avez besoin.
Sous le capot, ils ne pourraient pas être plus différents. Parcourons les familles.
Le classique : Mean-Variance Optimization (MVO)
C'est là que la théorie moderne du portefeuille a commencé — Harry Markowitz, 1952. MVO traite l'allocation comme une optimisation sous contraintes : maximiser le rendement attendu pour un niveau de risque donné. Formellement, on résout
où est le vecteur des rendements attendus, est la matrice de covariance, et est votre aversion au risque. Lorsque les entrées sont bonnes, MVO est imbattable : il constitue, par construction, la frontière efficiente.
Le problème, c'est que les entrées ne sont jamais bonnes. Les rendements attendus sont estimés à partir d'un historique bruité, et MVO y est exquisément sensible — un minuscule changement dans une estimation peut faire basculer l'allocation de 80 % dans un actif à 80 % dans un autre. Les praticiens appellent cela la « maximisation de l'erreur » : l'optimiseur déverse joyeusement du capital dans l'actif dont le rendement a été le plus surestimé. MVO est la référence à laquelle tout le monde se compare et l'histoire édifiante que tout le monde cite.
La famille hiérarchique : HRP, HERC, GHRP, MHRP
En 2016, Marcos López de Prado a proposé une idée différente : ne jamais inverser la matrice de covariance. Hierarchical Risk Parity (HRP) contourne l'instabilité de MVO en ne résolvant jamais directement le problème d'optimisation. Il fonctionne en trois étapes :
- Clustering en arbre — convertir la matrice de corrélation en une métrique de distance, , et construire une hiérarchie d'actifs de sorte que les actifs similaires se retrouvent sur la même branche.
- Quasi-diagonalisation — réordonner la matrice de covariance de sorte que les actifs corrélés soient adjacents, concentrant les grandes valeurs le long de la diagonale.
- Bissection récursive — diviser l'arbre du haut vers le bas, en allouant le capital entre les deux moitiés en proportion inverse de leur variance.
Le résultat est un portefeuille qui respecte la structure du marché — les actifs corrélés se disputent le poids entre eux, et non avec tout le reste à la fois. HRP est nettement plus stable hors échantillon que MVO, précisément parce qu'il n'inverse jamais une matrice mal conditionnée.
Le projet propose quatre membres de cette famille :
- HRP — l'algorithme original de López de Prado.
- HERC (Hierarchical Equal Risk Contribution) — remplace la division par variance inverse par une règle de contribution égale au risque à chaque nœud, de sorte que chaque cluster contribue également au risque total.
- GHRP (Generalized HRP) — une généralisation paramétrée qui permet d'ajuster les étapes de clustering et d'allocation.
- MHRP (Modified HRP) — une variante qui ajuste la pondération de la bissection pour des distributions de rendement à queues plus épaisses.
Ce sont des cousins proches, mais sur des données réelles ils divergent de façon significative — c'est précisément pourquoi il est utile de disposer des quatre.
Injecter un point de vue : Black-Litterman
Le modèle Black-Litterman (Goldman Sachs, années 1990) a été conçu pour corriger le défaut le plus pratique de MVO : il vous oblige à fournir des rendements attendus pour chaque actif, même ceux sur lesquels vous n'avez aucun avis. Black-Litterman part au contraire d'un équilibre implicite de marché neutre et vous permet d'y mélanger vos propres points de vue, pondérés selon le degré de confiance que vous leur accordez.
Ici est le rendement d'équilibre, et encodent vos points de vue (« l'actif A surperformera l'actif B de 2 % »), et est l'incertitude de ces points de vue. Lorsque vous n'avez aucun point de vue, il retombe sur le portefeuille de marché ; lorsque vous êtes certain, il penche fortement vers vos paris. C'est le plus sensible aux opinions des douze.
L'hybride : Nested Clustered Optimization (NCO)
NCO, également de López de Prado, est un mariage astucieux des deux mondes ci-dessus. Il regroupe les actifs comme HRP, puis exécute une petite Mean-Variance Optimization bien conditionnée à l'intérieur de chaque cluster et à nouveau entre les clusters. En n'inversant jamais que de petites sous-matrices stables, NCO capture l'optimalité de MVO là où il est sûr de l'utiliser, tout en évitant l'instabilité d'inverser une seule matrice de covariance géante. C'est souvent le meilleur des deux comportements.
Le reste de la formation
- Entropy Pooling (Meucci) — un cadre probabiliste qui trouve la distribution la plus proche de votre a priori (au sens de l'entropie relative) tout en satisfaisant un ensemble de points de vue en tant que contraintes. Élégant lorsque vous souhaitez exprimer une incertitude plutôt que des prévisions ponctuelles.
- OLPS (Online Portfolio Selection) — une famille de stratégies séquentielles (portefeuilles universels, follow-the-winner, retour à la moyenne) qui se rééquilibrent à mesure que de nouveaux prix arrivent, avec des bornes de regret démontrables. La seule méthode véritablement en ligne de l'ensemble.
- RBA (Robust Bayesian Allocation) — enveloppe l'allocation dans une couche de rétrécissement bayésien, tirant les estimations bruitées vers un a priori raisonnable afin qu'un seul mois étrange ne puisse pas dominer les poids.
- TIC (Theory-Implied Correlation) — remplace la matrice de corrélation d'échantillon brute par une matrice débruitée par rapport à une structure théorique (souvent une taxonomie économique), ce qui peut nettement améliorer les méthodes hiérarchiques qui se nourrissent de corrélations.
- Pipeline — notre algorithme composite « maison » : une ossature HRP avec une surcouche long/short optionnelle et une contrainte CVaR (risque de queue). Via le point d'entrée uniforme
optimize()exclusivement long, il se comporte comme HRP ; sa machinerie long/short et de risque de queue s'active lorsque vous le pilotez avec des signaux explicites. Nous le décortiquons entièrement dans une analyse approfondie dédiée : Inside Our House Algorithm: HRP + Long/Short + CVaR with Hull-White.
Ce qui se passe quand on fait courir les douze ensemble
Voici la partie amusante. Nous avons pointé les douze sur un panier mixte délibéré — trois grands gagnants (ZEC, Tether Gold, 1000RATS) et trois lourds perdants (FLOW, KAVA, LINEA) — sur la fenêtre septembre 2025 à février 2026, et avons laissé chacun allouer.
| Algorithme | Rendement annualisé | Sharpe |
|---|---|---|
| RBA | +149% | — |
| MVO | +74% | 2.52 |
| Entropy Pooling | +57% | 1.93 |
| NCO | +44% | — |
| HERC | +30% | — |
| Black-Litterman | +7% | — |
| OLPS | −74% | — |
| MHRP | −78% | — |
| GHRP | −95% | — |
| HRP / Pipeline | −103% | −2.45 |
| TIC | −131% | — |
Un avertissement retentissant avant d'en tirer la moindre conclusion : ces chiffres proviennent d'un seul panier sur une seule fenêtre, et le panier a été délibérément truqué pour contenir des gagnants et des perdants extrêmes. Ce n'est pas une affirmation de performance et absolument pas un conseil — c'est une démonstration de divergence comportementale. Exécutez-le sur vos propres actifs et le classement se réorganisera complètement.
Mais la forme du résultat est la leçon. Les méthodes en quête de rendement — MVO, RBA, Entropy Pooling, NCO — ont concentré le capital sur les gagnants et imprimé de solides rendements positifs. Les méthodes de pure risk parity — HRP, TIC, MHRP, GHRP — ont réparti le poids uniformément par souci de diversification, ce qui signifiait aussi détenir les perdants, et ont viré au négatif. Aucun des deux comportements n'est « faux ». La risk parity est conçue pour survivre lorsqu'on ne peut pas distinguer à l'avance les gagnants des perdants ; sur un panier dont l'avenir a été truqué pour être connaissable, elle paie le prix de son humilité. Cette tension — concentration contre diversification, conviction contre robustesse — c'est tout le domaine résumé en un seul tableau.
Open source et en direct
L'ensemble est ouvert : douze crates d'algorithmes Rust en tant que sous-modules git, un backend HTTP Axum qui les orchestre tous, et un frontend Next.js avec un graphique interactif de frontière efficiente et un tableau comparatif côte à côte. Vous pouvez :
- l'essayer en direct sur portfolio-optimizer.marketmaker.cc — choisir des actifs, une plage de dates et un algorithme, et regarder les poids et la frontière se mettre à jour ;
- ouvrir l'onglet Compare Methods pour exécuter les douze à la fois sur des prix identiques ;
- dépendre de n'importe quel crate individuel (
portfolio-hrp,portfolio-nco, …) dans votre propre projet Rust.
À retenir
- Il n'existe pas d'optimiseur universellement meilleur. Le bon choix dépend du degré de confiance que vous accordez à vos estimations de rendement. Si vous leur faites confiance → MVO/Black-Litterman. Sinon → HRP et ses cousins.
- MVO est optimal et fragile. Il définit la frontière efficiente mais maximise l'erreur d'estimation. Traitez ses poids avec méfiance à moins que vos entrées ne soient réellement fiables.
- Les méthodes hiérarchiques échangent la performance de pointe contre la stabilité. Elles arrivent rarement en tête d'un seul backtest, mais n'explosent pas non plus souvent — ce qui compte réellement lorsque l'avenir est inconnu.
- Une interface uniforme est un superpouvoir. Une fois que chaque algorithme est
prices -> weights, les comparer honnêtement ne coûte rien, et changer d'algorithme est gratuit.
La meilleure façon de comprendre douze algorithmes est de les regarder se disputer. Allez lancer la comparaison sur des actifs qui vous tiennent réellement à cœur.
Références
- Markowitz, H. (1952). Portfolio Selection. The Journal of Finance.
- López de Prado, M. (2016). Building Diversified Portfolios that Outperform Out of Sample. The Journal of Portfolio Management.
- López de Prado, M. (2020). Machine Learning for Asset Managers. Cambridge University Press.
- Black, F., & Litterman, R. (1992). Global Portfolio Optimization. Financial Analysts Journal.
- Meucci, A. (2008). Fully Flexible Views: Theory and Practice. Risk.
- Marketmaker.cc: marketmaker.cc
Citation
@article{soloviov2026portfoliooptimization,
author = {Soloviov, Eugen and Zhuravleva, Marina and Kiselev, Kirill},
title = {12 Portfolio Optimization Algorithms, Compared: HRP, Black-Litterman, NCO and Beyond},
year = {2026},
url = {https://marketmaker.cc/en/blog/post/portfolio-optimization-algorithms-compared},
description = {A tour of twelve portfolio allocation algorithms — MVO, the hierarchical family (HRP, HERC, GHRP, MHRP), Black-Litterman, NCO, Entropy Pooling, OLPS, RBA, TIC and a composite pipeline — behind a single Rust interface, with an honest side-by-side comparison on a mixed crypto basket.}
}
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.
Financial mathematics
Fifth-year student at Bauman Moscow State Technical University (Automatic Control Systems), specializing in financial mathematics. Background in calibrating stochastic-volatility (Heston) and local-volatility (Dupire) models, fair pricing of options including exotics via both Monte-Carlo and analytic formulas, hedging-error reduction, and exposure to LSV models.
Portfolio optimization
Fourth-year student at the Faculty of Mechanics and Mathematics, Novosibirsk State University (NSU); thesis on Heston-model calibration and delta-hedging within the same model. Works on portfolio optimization.