Des pièces à un optimiseur qui fonctionne
Un portefeuille de variance minimale sur le papier n'a pas de règles. Un vrai mandat est long seulement, entièrement investi et paie pour trader ; le seul moyen de voir ce que ces règles font est de construire l'optimiseur soi-même et de le tester sur des jours qu'il n'a pas vus. Ce projet final utilise trois idées de la compétence : la descente de gradient pour la boucle, une projection pour la règle budgétaire long seulement et une limite L1 sur les transactions. NumPy suffit et aucun solveur de bibliothèque n'est permis.
La descente de gradient projetée fait un pas de gradient ordinaire sur la variance wᵀΣw, de gradient 2Σw, puis ramène le résultat au portefeuille long seulement entièrement investi le plus proche par la projection Π. Le pas 1/L, avec L=2λₘₐₓ(Σ) la plus grande valeur propre de la hessienne, est toujours stable. La projection sur {w≥0, Σw=1} a une réponse exacte : trier le vecteur par ordre décroissant, prendre les sommes cumulées moins un, trouver la dernière position ρ où la valeur triée dépasse encore sa somme cumulée divisée par k, poser θ égal à cette somme cumulée divisée par ρ+1 et renvoyer max(v-θ,0). Tous les poids sont décalés de la même quantité et ceux qui deviendraient négatifs sont coupés à zéro.
La rotation est la norme L1 de la transaction, ‖w-w₀‖₁. Pour la garder sous une limite τ tout en restant admissible, on ne parcourt que la fraction α du chemin entre le portefeuille actuel w₀ et la cible wₜ de l'optimiseur. Un point du segment entre deux portefeuilles long seulement entièrement investis est lui aussi long seulement et entièrement investi, et la norme L1 croît linéairement le long du segment, donc la transaction vaut exactement min(écart,τ). Chaque rééquilibrage coûte alors c fois sa rotation, que le backtest retranche du premier jour du bloc de détention. Les poids d'un bloc ne peuvent utiliser que les jours qui le précèdent, et le résultat à rapporter est la volatilité et le rendement des jours hors échantillon, nets et mis bout à bout.
- Descente de gradient projetée : pas de gradient 2Σw avec le pas 1/L, puis projection sur le simplexe.
- Limite de rotation : avancer de la fraction α=min(1,τ/écart) vers la cible ; le portefeuille reste admissible.
- Backtest honnête : estimer sur les
windowderniers jours, détenirstepjours, retrancher les coûts et rapporter les chiffres hors échantillon mis bout à bout.
Lab : ce qui est noté
- Projection sur le simplexe20 pts
- Descente de gradient projetée25 pts
- Une limite de rotation15 pts
- Un backtest glissant avec coûts25 pts
- Comparer les politiques15 pts