σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours Optimization›Module 5 · L'optimisation en pratique›Sujet 5.2·~1 h 40 minAvancé

Projet final : optimisation de portefeuille sous contraintes avec limites de rotation et de coûts

Position dans le parcoursModule 5 sur 5 · Sujet 2 sur 2
5.2 Projet final : optimisation de portefeuille sous contraintes avec limites de rotation et de coûts
—Score du lab— / 100XP total—Série—

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.

wₖ₊₁=Π(wₖ-η·2Σwₖ), η=1/(2λₘₐₓ(Σ))

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.

w=w₀+α(wₜ-w₀), α=min(1, τ/(‖wₜ-w₀‖₁)), c ‖w-w₀‖₁

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.

Ce que disent les vraies donnéesPour douze grandes actions américaines depuis 2010, avec une fenêtre de 126 jours réestimée tous les 42 jours, un coût de 10 points de base et 4 058 jours hors échantillon, le portefeuille long seulement de variance minimale a une volatilité d'environ 13,4 % par an, un rendement d'environ 13,8 % et une rotation d'environ 0,36 par rééquilibrage. Limiter la rotation à 0,2 donne une volatilité d'environ 13,6 %, un rendement d'environ 14,0 % et une rotation de 0,20 : un peu plus de risque, mais moins de transactions et aucune perte de rendement net. Les poids égaux ont une volatilité d'environ 18,4 %, un rendement d'environ 21,4 % et aucune transaction. Ils rapportent plus seulement parce que ces douze survivantes, Apple, Amazon et Nvidia en tête, ont très bien fait.
  • 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 window derniers jours, détenir step jours, retrancher les coûts et rapporter les chiffres hors échantillon mis bout à bout.
Deux simplifications à retenirLe backtest ignore la dérive des poids dans un bloc (les poids sont fixes) et facture un coût plat par unité de rotation, alors que l'impact réel croît avec la taille traitée et l'illiquidité. Les deux rendent les chiffres un peu trop flatteurs. Voyez l'exercice comme un modèle propre de l'arbitrage entre risque, rotation et coût, non comme une prévision de performance réelle.

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
Explorateur · lab-op-11
▾ lab-op-11
▾ data
…
bash · dans le navigateur
learner@quantcraft:~/lab-op-11$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-op-11 revient aux fichiers de départ et le terminal est vidé. Votre solution actuelle sera perdue : cette action est irréversible.

Sera réinitialisé
  • main.py → code de départ
  • Historique du terminal et sortie des tests
  • Modifications non soumises
Sera conservé
  • Meilleur score du lab
  • Votre XP et votre série
  • Progression du cours et notes

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub