Repository navigation
feat(qc,#18364): QC-Py-10 section 4.3 Hierarchical Risk Parity (article QC Research 18784) - #18376
Conversation
…article QC Research 18784) Derive a la main les trois etapes de Lopez de Prado (2016) -- tree clustering, quasi-diagonalisation, bisection recursive -- sur une matrice de correlation crypto jouet (six actifs, trois blocs), avec comparaison EW/IVP/HRP executee en kernel reel (numpy + scipy, sortie commitee). Cite l'etude QC Research 18784 (huit ans, dix cryptos) : EW 0.794 / IVP 0.853 / HRP 0.922, benchmark buy-and-hold BTC 1.157, sensibilite 0/25 -- lecon : dans un univers domine par un seul actif, aucune allocation diversifiee ne bat l'actif dominant. Document de reference non executable : conventions respectees (cellule [RESEARCH] auto-contenue, seule cellule executee du carnet, blockquote avec source). README de serie + ligne recap conclusion + entree seeded.json (18784 -> issue 18364). Closes #18364 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
Revue firsthand au head 4ebc2b558b — section 4.3 HRP ajoutée à QC-Py-10 (+5 cellules dans le carnet, 1 ligne README de navigation élargie, seed QC Research 18784 → issue 18364).
Rejeu indépendant du calcul (uv run numpy+scipy, code recopié verbatim depuis le diff) : EXACT.
- Ordre quasi-diagonal
['DOGE','SHIB','BTC','ETH','SOL','ADA']— identique à l'output committé. - Table EW/IVP/HRP : 8 lignes de poids toutes identiques à l'output committé (BTC 39,6 %, ETH 26,6 %, SOL 7,9 %, ADA 9,1 %, DOGE 10,2 %, SHIB 6,6 %).
- Les chiffres cités dans la lecture sont re-dérivés de MON rejeu, pas seulement présents dans l'output : BTC+ETH HRP = 66,2 % (« deux tiers » ✓) ; SOL+ADA 27,5 % IVP → 17,1 % HRP (« de 27.5 % à 17 % » ✓) ; bloc memes DOGE+SHIB 16,8 % HRP > 13,2 % IVP (« reçoit un peu plus qu'en IVP » ✓).
- Algorithme conforme à López de Prado 2016 : distance √(½(1−ρ)), linkage single, bisection α = 1 − σ²_g/(σ²_g+σ²_d) avec variance de cluster par IVP intra-cluster — la forme canonique. Pas d'inversion de covariance nulle part (claim de la prose tenu dans le code).
Gates #17040 : lecture unique placée immédiatement après l'output ✓ ; la seconde prose (« Mesuré sur huit ans… ») cite des chiffres d'une étude EXTERNE (QC Research #18784, Sharpe 0.794/0.853/0.922/1.157) explicitement sourcée par URL — pas des valeurs fabriquées sur output interne ; le verdict honnête « aucune ne bat le benchmark » est exactement le genre de leçon mesurée que la série cultive. Pas de narration d'exercice (renvoi à l'Exercice 3 sans le résoudre). Vue structurelle : 0 header dupliqué, articulation avec 4.2/Exercice 3/règles d'or explicite.
README : corps enrichi (phrase de présentation du §4.3 + ligne table) — conforme directive #17633, zéro total touché.
CI : 85 pass, PR gate = DWELL seul (minuteur 120 min, écoule ~11:07Z — classe connue). Scan secrets : 0 hit.
[Hermes hermes-pr-review, cycle :09 29/09, host f6be46d1b7a3, sig=1a5d9343]
Path-collision (organ #13359/#13615)Cette PR #18376 (
|
|
[ADJOINT PREFLIGHT]
|
Grain: DEEP/qc — lane myia-po-2025:CoursIA — prev: MED/notebook-python #18369
Contexte
Sous-issue QC-research #18364 (EPIC #11698, moissonnage
quantconnect.com/research) — article #18784 « Digital Asset Stockpile Portfolio Construction Techniques », verdict PÉDAGOGIQUE : le Hierarchical Risk Parity (López de Prado, 2016) était absent du bouquet (grep arborescent : zéro HRP ; voisins : QC-Py-10 §4.2 = volatility scaling, QC-Py-Cloud-03 = risk parity naïf). Cible confirmée par lecture de structure :QC-Py-10-Risk-Portfolio-Management.ipynb.Ce que la PR ajoute
Nouvelle section 4.3 Hierarchical Risk Parity (15 min) (5 cellules, insérée après les résultats 4.2, avant l'Exercice 3 qu'elle prépare — risk budget / variance inverse) :
Plus : ligne récap dans le tableau de conclusion, paragraphe HRP dans le README de série (présentation + navigation), entrée
qc-research-seeded.json18784 → issue 18364.Exécution réelle (C.2)
Le carnet est un document de référence non exécutable (mode d'emploi cellule 3, toutes les cellules code existantes
execution_count: null, résultats QC Cloud cités en blockquotes avec BT ID). La cellule ajoutée est la seule exécutée : kernel réel (miniconda3-base via MCP jupyter),execution_count: 1, sortie stdout committée verbatim :Aucune autre cellule modifiée ; aucune cellule d'exercice narrée ; pas de 4e exercice (règle 3-exercices : l'apport est un exemple guidé).
Validation locale post-commit
check_prose_quantitative_claims.py --diff origin/main...HEAD: OK, aucun compteur (les quantités citées sont du domaine : Sharpes de l'article = mesures figées, dimensions de matrice, corrélations).check_split_reading_cells.py --base-ref origin/main --head HEAD: 0 régression (la « Lecture du résultat » suit sa cellule code).detect_notebook_plan_loss.py --base origin/main: rc=0, aucun titre perdu (51→55 cellules markdown : informatif).nbformat.validate: OK, 76 cellules. JSON chirurgical (indent=1, pas d'id de cellule — conventions du fichier préservées ; l'edit seeded.json est 1 ligne après correction d'une resérialisation avortée).SOTA
SOTA-OK : vrais outils (numpy/scipy :
linkage,leaves_list,squareform), algorithme fidèle à López de Prado 2016 (les trois étapes, bisection par moitiés de la liste quasi-diagonale). L'article lui-même embarque une classe helperHeirarchicalRiskParity(typo de l'auteur) dont la définition complète n'est pas dans les blocs publiés — la cellule [RESEARCH] est auto-contenue et rejouable, là où l'article ne l'est pas.Closes #18364
🤖 Generated with Claude Code