Skip to content

feat(qc,#16239): QC-Py-14b — liquidité et coûts d'exécution (proxys, capacité, stress COVID réel) - #17753

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/16239-qcpy14b-liquidity
Sep 25, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/16239-qcpy14b-liquidity

Conversation

@jsboige

@jsboige jsboige commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #17579

Summary

Tranche « risque de liquidité et coûts d'exécution » de #16239 — ligne 4 de la matrice de couverture (« Mesures de liquidité et incidence sur exécution / sizing à rendre explicites »), livrée en notebook de série : QC-Py-14b-Liquidity-Execution-Costs.ipynb (34 cellules, 10 cellules de code exécutées localement, 4 figures, 3 exercices).

Sujet. QC-Py-14 construit un portefeuille sous deux hypothèses implicites — exécution à un prix unique, taille sans effet ; 14b les chiffre.

  • Quatre proxys mesurés, pas un (ADV en dollars, Amihud, écart de Corwin-Schultz, jours sans rendement) sur 12 titres, 2022-01-03 → 2024-12-31, plus leur matrice de corrélation ;
  • indicateur falsifiable distinct du risque de marché : corrélation de rang illiquidité / volatilité +0,82, 1 titre hors diagonale (T — illiquide sans être volatil). Le notebook énonce lui-même la portée : réfutation bornée, test faible en z-scores, la preuve décisive étant la traduction en dollars ;
  • traduction en dollars : appariement par volatilité (< 3 points d'écart) → la paire la plus divergente (AAPL/T, 1,8 point d'écart de volatilité) a des capacités de 40,7 M$ contre 558,1 M$ — facteur 13,7 ;
  • coût et capacité : demi-écart + loi racine k·σ·√participation + frais ; capacité par titre (contraignant : CVNA, 0,59 M$) ; portefeuille équipondéré mensuel à 50 M$ → CAGR brut 7,51 % / net 7,38 %, drag 12 bp/an ;
  • stress sur données réelles (février → mars 2020) : l'ADV médian monte (×1,49 ; 10 titres sur 12) pendant que l'écart triple (×3,41) et que la capacité médiane tombe à 0,101 — 12 titres sur 12 en contraction. Le filtre d'univers le plus répandu (dollar volume) relâche au pire moment.

Preuves

Contrôle Résultat
Exécution locale (notebook_tools.py execute, kernel python3) SUCCESS, 10/10 cellules execution_count 1..10, 0 erreur, 4 figures committées (C.2)
validate_pr_notebooks.py origin/main <nb> 1/1 passed (10 cellules)
check_null_exec.py (H.3) OK — aucun null + outputs vide
check_cell_source_parses.py 0 finding
check_notebook_nav_chain.py --check 0 NEW finding vs baseline (rc=0)
scrub_papermill_paths.py --apply 2 chemins absolus ramenés au basename

Nav recâblée par accrétion (b, comme 06b/12b/23b/28b) : 13 → 14 → 14b → 15 → 16.

README (Python/README.md, commit d646e2e526) : ligne de statut + ligne de nav thématique en Phase 3, comme chaque module b précédent. Aucun total mis à jour à la main — CATALOG-STATUS et COURSE_CATALOG.generated.* restent byte-identiques à main (l'inscription catalogue appartient à la régénération automatisée, règle 1 catalog-pr-hygiene).

Ce que la PR ne fait pas (et qui est nommé)

  • Aucune édition du catalogue généré : CATALOG-STATUS et COURSE_CATALOG.generated.* restent byte-identiques à main — l'inscription d'un nouveau notebook appartient à l'automatisation (catalog-pr-hygiene règle 1) ;
  • aucun backtest QuantConnect exécuté : la partie 7 donne le code Cloud à copier (VolumeShareSlippageModel, filtre d'univers DollarVolume) et dit explicitement ce qu'il ne modélise pas (l'impact de marché). Les chiffres committés sont mesurés localement, pas simulés par QC — le notebook ne revendique aucun run Cloud.

Limites (écrites dans le notebook, §9)

Le niveau des écarts est posé par une ancre de calibrage (seuls les ratios entre titres sont mesurés) ; données quotidiennes uniquement (ni carnet, ni VWAP intraday) ; univers survivant choisi ex post ; un seul épisode de stress, non généralisable.

See #16239 — livrable partiel (ligne 4) ; l'EPIC reste ouverte.

🤖 Generated with Claude Code

…capacité, stress COVID réel)

Nouveau notebook de série (accrétion `b`) : quatre proxys de liquidité mesurés sur
12 titres (2022-2024), test falsifiable liquidité != volatilité, coût d'exécution
(demi-écart + loi racine) traduit en capacité en dollars, et stress sur la fenêtre
réelle février -> mars 2020 (volume x1,49, écart x3,41, capacité médiane 0,101).

Exécuté localement (yfinance, kernel python3) : 10/10 cellules, 0 erreur, 4 figures.
Nav recâblée 13 -> 14 -> 14b -> 15 -> 16.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- e1a2d3a

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion bfce31f re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base bfce31f530d8ef01c4d7eadb5f01b03db2c26483 re-scanned (2 of 3 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +1  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-14b-Liquidity-Execution-Costs.ipynb
        +1 H1-DEEP

=== drift: +1 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 3
  • Code cells validated: 66
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 11.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 9.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 7.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.3s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 38.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.5s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM

[Hermes] — CoursIA #17753, head e1a2d3a1 — review P4 (1596 lignes, 3 fichiers). Lecture complète du notebook (FULL READ), pas diff-only.

Vérifié (preuves ré-exécutées, pas lues) :

  • Science re-exécutée localement : formule Corwin-Schultz conforme au papier 2012 (beta/gamma/k=3−2√2/alpha, clip + rolling 21 — comportement négatif sur fenêtres volatiles correctement clippé, standard) ; loi racine demi-écart + k·σ·√p + frais avec k=0.5 reproduit le tableau committé (SPY 1.2/1.6/2.8/6.6 bp vs committé 1.2/1.6/2.7/6.5 — frontière d'arrondi, valeurs en bp) ; participation_max = ((B−d−f)/(k·σ))² redonne la capacité SPY à ±0.8 % près (4076 vs 4108 M$, écart = arrondi de σ_journalier) ; drag 35 bp / 2.99 ans = 11.7 → « 12 bp/an » ✓ ; facteur AAPL/T 558.1/40.7 = 13.7 ✓.
  • Gates #17040 programmatiques : 12/12 valeurs chiffrées du body présentes verbatim dans les outputs committés (+0.82, 40.7, 558.1, 13.7, 0.59, ×1.49, ×3.41, 0.101, 7.51, 7.38, 1.8) ; exec_counts 1..10 séquentiels, aucun null ; une seule lecture markdown après chaque cellule de code, structure code→lecture respectée sur les 10 blocs ; zéro header dupliqué après dénumérotation ; zéro prose empilée ; exercices = stubs TODO étudiants, section « Attendus » = guidance sans réciter la solution.
  • Périmètre : README/catalogue byte-identiques à main (correct — appartient à catalog-pr-hygiene) ; voisins QC-Py-14/-15 touchés d'une ligne chacun (recâblage nav accrétion 13→14→14b→15→16, conforme au motif 06b/12b/23b/28b) ; scan secrets sur le diff : néant.
  • Honnêteté du socle : §9 pose l'ancre de calibrage (0.5 bp) comme hypothèse, univers survivant ex post, un seul épisode de stress — les limites sont écrites dans le notebook, pas seulement dans le body.

Un point mineur (non bloquant, éditorial) : deux sections portent le numéro « ## 3. » (« Mesure » puis « Le test falsifiable ») — la numérotation suivante (4..9) est donc décalée d'un cran. Les renvois internes (« partie 5 », « partie 3 ») restent résolvables, mais un futur renvoi à « partie 3 » sera ambigu. À corriger dans une passe éditoriale, pas dans cette PR.

Fond solide, exécution réelle, frontières nommées. APPROVE explicite après checklist (sécurité ✓, cross-repo néant, notebooks ✓ full read, pas une PR fix/incident).

[Hermes hermes-pr-review, cycle :05 25/09, host f6be46d1b7a3]

…que)

Comme les precedents modules b (06b, 12b, 23b, 28b) : ligne de statut
(EXECUTE, preuve locale) + ligne de nav thematique en Phase 3. Aucun
total mis a jour a la main — CATALOG-STATUS et catalogue genere restent
byte-identiques a main (regeneration par l'automatisation).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- d646e2e

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion bfce31f re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base bfce31f530d8ef01c4d7eadb5f01b03db2c26483 re-scanned (2 of 3 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +1  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-14b-Liquidity-Execution-Costs.ipynb
        +1 H1-DEEP

=== drift: +1 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- d646e2e

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion bfce31f re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base bfce31f530d8ef01c4d7eadb5f01b03db2c26483 re-scanned (2 of 3 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +1  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-14b-Liquidity-Execution-Costs.ipynb
        +1 H1-DEEP

=== drift: +1 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

prose-counts (strict, #9377) refuse « 10/10 cellules code » dans le detail
de la ligne de statut : les comptes sont tenus par le CI, pas par la prose.
Mesure retiree, predicat garde (cellules executees, figures commitees).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- a92b9ed

Cette PR augmente le compte de defauts de rendu markdown
par rapport a la base de fusion bfce31f re-scannee.
Nouveaux defauts imputables au diff :

reference: merge base bfce31f530d8ef01c4d7eadb5f01b03db2c26483 re-scanned (2 of 3 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +1  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-14b-Liquidity-Execution-Costs.ipynb
        +1 H1-DEEP

=== drift: +1 across 1 notebook(s), 0 burned down ===

Corriger (ex. - # Indice : ... -> - **Indice :** ...). See #11831.

jsboige added a commit that referenced this pull request Sep 25, 2026
…te prose-counts)

Le workflow prose-counts refusait la PR : 15 compteurs quantitatifs en
prose dans Tweety/README.md, tous sur des lignes ajoutees par la tranche
D (reproduit localement : check_prose_quantitative_claims.py --diff
origin/main...HEAD --strict, rc=1). Correction conforme a la prescription
de l'organe (#9377 : supprimer la mesure, garder le predicat) :

- comptes d'etat du depot retires du corps (« 36 notebooks principaux »,
  « 18 notebooks », « 12 fichiers », « 6 modules ») ;
- deltas historiques du changelog reformules en forme nom-d'abord
  (« notebooks principaux 33 -> 34 », « lignes 31 -> 33 ») : le fait
  historique reste, la forme perissable part ;
- « (+1 ligne 2e) » -> « (+ entree 2e) ».

Le rouge avait d'abord ete attribue a tort a la base par le picker
(« ROUGE IMPUTE A LA BASE, tache COORDINATEUR ») ; la lecture du corps du
job + le temoin de controle (PR #17753 verte sur le meme check a
06:19:33Z) etablissent qu'il etait propre a cette PR.

See #15066, See #9377.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@jsboige jsboige left a comment •

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM (contrainte token : COMMENT only)

[Hermes hermes-pr-review] — Notebook FULL READ au head a92b9ed494 (34 cellules, 10 code, toutes executees, 0 null exec, 4 figures PNG reelles [image/png ~33-52KB]).

Gates #17040

  • 6 lectures, toutes placees immediatement APRES leur code cell (5/8/11/14/17/20) ;
  • 10 claims du body verifies verbatim dans les outputs : correlation +0.82, capacite 40.7 vs 558.1 (facteur 13.7), CAGR 7.51/7.38, drag 12 bp/an, stress ADV x1.49, ecart x3.41, capacite mediane 0.101 — tous retrouves dans les streams committes ;
  • 3 exercices avec stubs # TODO etudiant, pas de solution leak.

Substance

  • Quatre proxys mesures (ADV$, Amihud, Corwin-Schultz, jours sans rendement) sur 12 titres 2022-2024, univers heterogene assumé (ETF + mega + mid + titres agites, pas de biais de survie intragroupe declare) ;
  • Test falsifiable : correlation de rang illiquidite/volatilite +0.82, 1 titre hors diagonale (T) — le notebook enonce lui-meme la portee (refutation bornee, test faible en z-scores) ;
  • Traduction en dollars : appariement par volatilite AAPL/T (1.8 pt d'ecart) → capacites 40.7 vs 558.1 M$, facteur 13.7 ;
  • Stress COVID reel (fev-mar 2020) : ADV median monte x1.49 (10/12) pendant que l'ecart triple (x3.41) et la capacite mediane tombe a 0.101 — 12/12 en contraction ;
  • Portefeuille equipondere mensuel a 50 M$ : CAGR brut 7.51% / net 7.38%, drag 12 bp/an.

README (+2/-0) : ligne QC-Py-14b substantielle (statut EXECUTE, resume, lien) — conforme README-TOTALS #17633. Les deux autres fichiers (+1/-1) sont des liens de navigation dans QC-Py-14 et QC-Py-15.

Securite : 0 hit.

Bloquant : aucun. LGTM de substance.

Marker cycle: hermes-pr-review 25/09 09:00Z

[Hermes hermes-pr-review, cycle :08 25/09, host f6be46d1b7a3]

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17753 (feat(qc,#16239): QC-Py-14b — liquidité et coûts d'exécution (proxys, capacité, stress COVID réel)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

myia-ai-01 pushed a commit that referenced this pull request Sep 25, 2026
…LK (Tweety-02e) (#17757)

* Add(notebooks,#15066): tranche D — atelier calculs de preuve Hilbert/LK (Tweety-02e)

Tweety-02e-Preuves-Hilbert-Gentzen-Lean : la même micro-théorie {p, q, r}
calculée par trois moteurs, avec les mesures qui les séparent.

- Hilbert : les trois axiomes vérifiés par deux oracles réels, une preuve
  construite par chaînage avant (coût en instances/MP), plus une
  contre-expérience qui réfute par la mesure l'hypothèse d'un vivier
  simplement trop étroit.
- LK : hauteur et taille d'un arbre de dérivation mesurées avant/après
  élimination des coupures — identité 0/1, coupure 2/4, après Hauptsatz 6/7.
  Résultat honnête : le théorème garantit la suppression des coupures,
  jamais l'économie de l'arbre.
- Le Hauptsatz est invoqué comme théorème du noyau
  (Derivation.Canonical.constructiveHauptsatz, témoin IsCutFree), et
  #print axioms nomme [propext, Classical.choice, Quot.sound].

Le versant Lean vit dans le notebook : les fichiers d'index du lake
formal_logic_lean sont sous claim actif d'une autre lane (mesuré, cf. body).

README.md : audit fichier-entier (§E) — recensement unifié (38 fichiers =
37 racine + 1 probe ; 1165 cellules dont 438 code), Tweety-02d entre dans les
tables, résidus déclarés plutôt qu'inventés.

Ré-exécution réelle par batch_reexecute.py : SUCCESS 1038 s, 13/13 cellules
exécutées, 0 sortie vide, 0 erreur ; sorties Lean réelles ([exit 0]).
Seule normalisation : metadata.papermill.*_path ramené au basename.

See #15066

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(readme,#15066): retirer les compteurs d'artefacts de la prose (gate prose-counts)

Le workflow prose-counts refusait la PR : 15 compteurs quantitatifs en
prose dans Tweety/README.md, tous sur des lignes ajoutees par la tranche
D (reproduit localement : check_prose_quantitative_claims.py --diff
origin/main...HEAD --strict, rc=1). Correction conforme a la prescription
de l'organe (#9377 : supprimer la mesure, garder le predicat) :

- comptes d'etat du depot retires du corps (« 36 notebooks principaux »,
  « 18 notebooks », « 12 fichiers », « 6 modules ») ;
- deltas historiques du changelog reformules en forme nom-d'abord
  (« notebooks principaux 33 -> 34 », « lignes 31 -> 33 ») : le fait
  historique reste, la forme perissable part ;
- « (+1 ligne 2e) » -> « (+ entree 2e) ».

Le rouge avait d'abord ete attribue a tort a la base par le picker
(« ROUGE IMPUTE A LA BASE, tache COORDINATEUR ») ; la lecture du corps du
job + le temoin de controle (PR #17753 verte sur le meme check a
06:19:33Z) etablissent qu'il etait propre a cette PR.

See #15066, See #9377.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17753
head: a92b9ed
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3edc64946628a94997a1827280df2297af7264d50d4612275297728729e1ef91
diff-files: 4
diff-additions: 1598
diff-deletions: 2
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

Re-stamp secretaire c.140 -- tiers au titulaire (Tell c.111 strict). NO-DOSSIER -> READY. PR gate SUCCESS, B.0 rc=0 OK. Lane secretaire myia-po-2026:CoursIA-3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants