Skip to content

feat(qc,#18902): port chapitre 07-01 RL options hedging -- PPO vs delta BS, verdict NO BEATS - #19667

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/rl-options-hedging-18902
Oct 7, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/rl-options-hedging-18902

Conversation

@jsboige

@jsboige jsboige commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/qc — lane myia-po-2023:CoursIA — prev: DEEP/qc #19055

Closes #18902

Portage du chapitre 07-01 du livre — RL-Options-Hedging

Position courte d'un call ATM 30 j sur SPY, couverte chaque séance. Deux voies comparées sur les mêmes trajectoires : couverture delta BS quotidienne (référence) contre agent PPO (action = ratio a ∈ [0,1] appliqué au delta ; a = 1 reproduit exactement la baseline).

Livrables

  • research.ipynb — exécuté de bout en bout : BS pricing, GBM 3 régimes (calme 12 % / 2020 35 % / 2022 25 %), environnement gymnasium (état 5-dim du plan README, récompense = P&L terminal), sanity checks (a=1 → delta ; a=0 → dispersion nue), PPO 8 seeds × 120 000 pas (CPU, sans frais), évaluation sur 2 000 trajectoires nouvelles/régime avec et sans frais (5 bps).
  • rl_policy.py — poids de la seed médiane, MLP numpy pur (reproductible : re-entraînement déterministe, std par régime vérifié identique au tableau du notebook).
  • main.py — algorithme QC double comptabilité (livre delta vs livre rl sur la même short call réelle, frais par livre comme au notebook).
  • README dé-stubbé + BOOK_MAPPING 07-01 → COVERED.

Résultats simulation (variance + CVaR 95 % du P&L de couverture)

Régime Frais std P&L delta std RL (moy. 8 seeds) std RL (meilleure) CVaR95 delta CVaR95 RL (moy.)
calme 12 % 0 / 5 bps 0,573 / 0,570 1,272 0,790 −1,26 −3,60
2020 35 % 0 / 5 bps 1,691 / 1,689 3,724 2,292 −3,88 −10,94
2022 25 % 0 / 5 bps 1,194 / 1,192 2,539 1,556 −2,60 −7,05

P&L par trajectoire de 21 séances ($, spot initial 100), 2 000 trajectoires nouvelles par régime, mesure physique (dérive 8 %/an), 8 seeds PPO (120 000 pas chacune, CPU).

Verdict simulation

NO BEATS — net et mesuré. Aucune des 8 seeds ne bat la couverture delta BS dans aucun régime, avec ni sans frais : meilleure seed +30 à +38 % d'écart-type au-dessus du delta selon le régime (calme +37,8 % ; 2020 +35,5 % ; 2022 +30,3 %), moyenne inter-seeds ~2,2×, CVaR 95 % ~2,8× plus profonde. Les frais changent ~0,03 % — ils ne décident pas.

Deux échecs d'apprentissage mesurés et corrigés en cours de route, documentés dans le notebook : (1) sous mesure neutre (μ=0), E[P&L]=0 pour toute politique → gradient nul, 4/8 seeds effondrées — l'entraînement passe en mesure physique, comme le livre qui apprend sur données réelles ; (2) clip d'action à la borne = gradient nul → reparamétrage [-1,1]. Après correction, 3/8 seeds restent quasi non couvertes : PPO à récompense terminale est structurellement fragile ici. Suites naturelles (non couvertes) : récompense risque-aversion (Kolm & Ritter 2019), Q-learning par pas (Halperin 2020).

Backtests QuantConnect (projet 30800109, fenêtres 2018-2024 / 2020 / 2022 / 2018-2019)

Fenêtre Séances Livre P&L total ($) Var. quotidienne ($²) CVaR 95 % quotidien ($)
calme 2018-01-01 → 2019-12-31 503 delta +459 38 597 −534
rl −1 665 28 865 −442
2020 (COVID) 253 delta −611 195 752 −1 272
rl −2 447 145 099 −1 072
2022 (hausse des taux) 251 delta −1 546 150 960 −922
rl +1 786 88 668 −625
2018-01-01 → 2024-12-31 1761 delta +386 98 450 −873
rl −5 533 61 971 −675

Statistiques moteur par run (compte réel aplati = short call + couverture combinée des deux livres, 1 M $, 1 contrat) : calme Sharpe −16,093, CAGR +0,243 %, pire baisse 0,1 %, 495 ordres · 2020 Sharpe −1,847, CAGR +0,088 %, 0,5 %, 241 ordres · 2022 Sharpe −7,266, CAGR −0,076 %, 0,2 %, 259 ordres · 2018-2024 Sharpe −9,965, CAGR +0,239 %, 0,5 %, 1747 ordres.

Ce que ces quatre runs disent, et ce qu'ils ne disent pas. Ils disent que sur le chemin réellement réalisé, le livre RL divise la variance quotidienne (0,59× à 0,75×) et raccourcit la queue (CVaR 95 % moins profond dans les quatre fenêtres) — mais qu'il paie cette régularité en niveau : il perd 3 fenêtres sur 4, et ne gagne qu'en 2022 (+1 786 contre −1 546), l'année où la tendance baissière soutenue rend une couverture sous-delta payante. Sept ans de SPY coûtent ≈ −5 900 $ au livre RL sur un compte de 1 M $.

Ils ne reproduisent pas la mesure du notebook, et il faut le dire : le notebook mesure la variance cross-sectionnelle du P&L terminal sur 2 000 trajectoires neuves par régime (le critère du livre, figures 7.3-7.8), là où var_daily du backtest est la variance temporelle des variations quotidiennes d'une seule trajectoire réalisée. Ce sont deux objets différents, et le second ne peut pas valider le premier. Sur le critère du livre, la simulation reste sans appel (RL plus dispersé partout) ; sur le chemin réel, la régularité quotidienne s'améliore. Les deux mesures sont reportées telles quelles.

Écart de fidélité déclaré : le livre couvre des options TSLA, le portage utilise SPY (liquidité et chaîne d'options complètes sur toute la fenêtre, sans trou de données). Le livre ne publie aucun chiffre de backtest, donc la comparaison reste NON COMPARABLE (voir BOOK_MAPPING) ; l'écart porte sur le sous-jacent, pas sur la méthode.

Verdict final honnête

L'agent ne bat pas la couverture delta BS au sens du livre. Sur le critère que le livre se fixe — réduire la variance du P&L de couverture — le PPO entraîné est plus dispersé que le delta dans les trois régimes simulés, avec ou sans frais, sur les 8 seeds ; la meilleure seed reste +30 à +38 % au-dessus du delta selon le régime (calme +37,8 % ; 2020 +35,5 % ; 2022 +30,3 %), la moyenne inter-seeds ~2,2×, et la queue ~2,8× plus profonde. Les frais (5 bps) déplacent les chiffres de ~0,03 % : ils ne décident rien ici, la hiérarchie est déjà tranchée sans eux.

Un résultat secondaire, réel et non anticipé. Sur les backtests QC — donc sur des données de marché véritables et non sur des trajectoires simulées — le livre RL réduit la variance quotidienne (0,59× à 0,75×) et raccourcit la queue CVaR 95 % dans les quatre fenêtres. Il ne gagne en niveau que dans une seule, 2022. Autrement dit : la politique apprise achète de la régularité avec du rendement, et cette régularité apparaît sur données réelles alors que la dispersion cross-sectionnelle se dégrade. Les deux mesures ne portent pas sur le même objet (voir ci-dessus) et ne se contredisent donc pas — mais aucune des deux ne permet de dire que l'agent « bat » le delta.

Ce qui reste à faire, et qui n'est pas fait ici. Deux suites sont identifiées dans le notebook et laissées ouvertes : la récompense risque-aversion (Kolm & Ritter 2019), qui attaque directement l'objectif de variance au lieu du P&L terminal, et l'apprentissage par pas de temps (Halperin 2020), qui supprime la fragilité du crédit terminal — 3 seeds sur 8 restent quasi non couvertes après correction des deux échecs d'apprentissage documentés. Verdict : NO BEATS, mesuré, avec la nuance de régularité quotidienne reportée telle quelle.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 7, 2026 07:07
…ta BS, verdict NO BEATS

- research.ipynb : BS pricing, GBM 3 regimes, environnement gymnasium 5-dim,
  sanity checks, PPO 8 seeds x 120k steps (CPU, mesure physique derive 8%),
  evaluation 2000 trajectoires nouvelles/regime avec et sans frais 5 bps.
  Deux echecs d'apprentissage mesures et corriges : gradient nul sous mesure
  neutre (E[P&L]=0 pour toute politique), clip d'action a la borne = gradient
  nul -> reparametrage [-1,1].
- rl_policy.py : politique seed mediane, MLP numpy pur, exporte par le
  notebook (re-entrainement deterministe verifie).
- main.py : algorithme QC double comptabilite (livre delta vs livre rl sur la
  meme short call SPY ~30 DTE, frais 5 bps comptes par livre).
- README de-stubbe + BOOK_MAPPING 07-01 -> COVERED.
- Verdict simulation : NO BEATS -- meilleure seed ~+38-40% de std au-dessus
  du delta BS partout, moyenne inter-seeds ~2,2x, CVaR95 ~2,8x.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…cktest QC

Trois defauts reveles par les probes sur QC Cloud : le compile PEX n'importe
pas les modules du projet, donc seul un backtest les voit.

- OptionContract n'expose pas .ask ni .strike_price : ce sont .ask_price et
  .strike (symbol.id, lui, garde .strike_price -- les deux API different).
- numpy n'est pas fourni par `from AlgorithmImports import *` : import
  explicite, comme les autres main.py du depot.

Backtests QC apres correction (projet 30800109, SPY, 1 contrat, frais 5 bps
par livre) : 2018-2024 (1761 seances, 1747 ordres), 2020 (253), 2022 (251) et
2018-2019 (503) completes sans erreur.

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

github-actions Bot commented Oct 7, 2026

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

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 10
  • 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 Oct 7, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.5s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.4s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 19.6s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.1s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.8s

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

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@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.

[NanoClaw]

VERDICT: CONCERNS

Review structurelle et de contenu — feat(qc,#18902), +2750/−36, 5 fichiers, head b0796996. Périmètre : 1 notebook neuf (research.ipynb, exécuté), 2 modules neufs (rl_policy.py exporté, main.py QC), 2 docs modifiées (README du projet dé-stubbé, BOOK_MAPPING 07-01).

Ce qui est solide (vérifié firsthand)

  • Notebook réellement exécuté de bout en bout : execution_count 1→10 sans trou, chaque cellule code porte une sortie réelle (streams horodatés des 8 entraînements — 85,7 s cumulés par seed, 667,1 s au total ; execute_result avec DataFrames complets). Aucun output fabriqué, aucun N/A.
  • Le tableau du body est exactement l'agrégat committé — recalculé depuis les sorties de la section 6 : moyenne inter-seeds 2,22× / 2,20× / 2,13× le delta, CVaR 95 % 2,85× / 2,82× / 2,71×, meilleure seed 0,790 / 2,292 / 1,556, delta 0,5729 / 1,6914 / 1,1940. Tout concorde.
  • rl_policy.py est dérivé, pas décoré : la seed retenue (4) est calculée dans le notebook (tri des std moyens par seed, index 8//2), les formes de couches exportées (64,5) (64,64) (1,64) correspondent au MLP, et la passe avant numpy (tanh → tanh → mu, puis clip et (x+1)/2) reproduit la reparamétrisation de l'environnement.
  • main.py cohérent avec le notebook : même short call ATM 30 j, deux livres sur le même chemin de clôture quotidienne, frais par livre, état à 5 dimensions aligné (position courante normalisée par multiplier × contracts), politique importée de rl_policy. Les paramètres QC du README correspondent au projet 30800109.
  • Sanity checks présents et honnêtes : a = 1 reproduit la couverture delta (std 0,570 contre 0,5729 en baseline), a = 0 disperse (1,157).
  • Verdict NO BEATS assumé, y compris contre son propre résultat secondaire : le body rapporte que le livre RL réduit la variance quotidienne dans les quatre fenêtres QC tout en perdant en niveau, et prévient explicitement que variance cross-sectionnelle (notebook) et variance temporelle (backtest) ne sont pas le même objet. C'est le contraire de la complaisance.
  • BOOK_MAPPING 07-01 passe de STUB à COVERED sur la ligne d'inventaire, et la ligne de fidélité est réécrite en conservant NON COMPARABLE et l'écart TSLA→SPY déclaré.
  • 0 secret (mon scan et Gitleaks concordent).

CONCERN 1 — « ~38-40 % partout » n'est pas ce que montrent les sorties

Le body, le README et la conclusion du notebook (M18) affirment que « la meilleure seed reste ~38-40 % au-dessus de l'écart-type du P&L delta partout ». Recalculé depuis les sorties committées :

Régime std meilleure seed std delta écart réel
calme 12 % 0,7896 0,5729 +37,8 %
2020 35 % 2,2916 1,6914 +35,5 %
2022 25 % 1,5556 1,1940 +30,3 %

Le plancher réel est ~30 %, pas 38 % — seul le régime calme atteint 38 %. La direction du résultat est bonne (le delta reste imbattu), mais le chiffre cité en trois endroits surestime le pire cas d'environ 8 points. À formuler en « +30 à +38 % selon le régime », ou en nommant le régime.

CONCERN 2 — README : « exécuté tel quel » démenti par son propre verdict

Le README porte une section « Conception (plan d'origine du stub, exécuté tel quel) » dont la puce Simulation annonce « GBM sous probabilité neutre au risque (μ = 0) ». Ce n'est pas ce qui a été exécuté : M4 documente que μ = 0 annule le gradient (4 seeds sur 8 s'effondrent) et que l'entraînement et la simulation d'évaluation passent en mesure physique (μ = 8 %/an, DRIFT) — ce que le paragraphe Verdict du même README répète. Le titre « exécuté tel quel » est démenti par sa propre puce.

Réserves

  • Chiffres QC non re-mesurables depuis ce siège : les quatre fenêtres de backtest (P&L totaux, Sharpe, variance quotidienne, CVaR quotidien) viennent de la plateforme QuantConnect, pas du dépôt — pris tels que rapportés.
  • M4 cite une expérience écartée (mesure neutre : 4/8 seeds effondrées, « std ~4,2 ») dont le run n'est pas parmi les sorties committées ; le 4,2 coïncide avec les deux pires seeds du run final (4,181 / 4,228). Non vérifiable depuis l'artefact, non bloquant.
  • Nit : M12 situe « vol 20 % » en « section 2 », or la section 2 ne liste que 12 / 35 / 25 % — la vol d'entraînement (HedgingEnv(0.20, …)) n'est documentée nulle part dans le plan.
  • Nit : PR gate est rouge sur un timeout d'infra (math-render annulé à 10 min 04 s sur un timeout-minutes: 10), pas sur un verdict de contenu — un re-run du run enfant qui porte le job le trancherait.

… +30 a +38 % selon regime, mesure physique documentee, provenance run ecarte, pointeur vol d'entrainement

CONCERN 1 -- le claim '~38-40 % partout' (body, README verdict, conclusion M18)
surestimait le pire cas d'environ 8 points. Recalcule depuis les sorties
committes : calme 12 % +37,8 %, 2020 35 % +35,5 %, 2022 25 % +30,3 %.
Reformule '+30 a +38 % selon le regime' avec les trois valeurs nommees,
sur les trois surfaces.

CONCERN 2 -- le titre 'plan d'origine du stub, execute tel quel' etait dementi
par sa propre puce Simulation (mu = 0) alors que M4 et le Verdict documentent
le passage en mesure physique (mu = 8 %/an) pour l'entrainement ET l'evaluation.
Titre devient 'execute avec deux adaptations mesurees' ; la puce distingue
plan d'origine (mu = 0) et execution (mesure physique, raison du changement).

Nit M12 -- 'vol 20 % -- section 2' mal attribue (la section 2 ne liste que
12/35/25 %) : la phrase nomme desormais la vol d'entrainement via
HedgingEnv(0.20, ...), distincte des trois regimes d'evaluation.

Reserve M4 -- le 'std ~4,2' de l'experience neutre ecartee est marque comme
issu du run non conserve dans les sorties committes (provenance explicite).

Markdown-only : aucune cellule code ni output touchee (git diff : 0 ligne
outputs/execution_count), pas de re-execution due. Body de la PR corrige
des les deux occurrences du claim.

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

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

Réponse à la review NanoClaw — corrigé au commit ece49983ee (markdown-only : aucune cellule code ni output touchée, git diff = 0 ligne outputs/execution_count, pas de re-exécution due).

CONCERN 1 — « ~38-40 % partout » n'est pas ce que montrent les sorties. Constaté et corrigé sur les quatre surfaces (body de la PR ×2, README verdict, conclusion du notebook) : reformulation en « +30 à +38 % selon le régime (calme 12 % : +37,8 % ; 2020 35 % : +35,5 % ; 2022 25 % : +30,3 %) » — vos trois valeurs recalculées, reprises telles quelles. La direction du résultat (delta imbattu) est inchangée.

CONCERN 2 — README « exécuté tel quel » démenti par μ = 0. Corrigé : le titre devient « plan d'origine du stub, exécuté avec deux adaptations mesurées — cf. Enseignements », et la puce Simulation distingue désormais explicitement le plan d'origine (GBM sous mesure neutre au risque, μ = 0) de l'exécution (mesure physique, μ = 8 %/an, pour l'entraînement et la simulation d'évaluation), avec le motif mesuré (gradient annulé, 4/8 seeds effondrées). Le README n'est plus auto-contradictoire.

Nit M12 — « vol 20 % » en « section 2 ». Corrigé : la phrase nomme désormais la vol d'entraînement via HedgingEnv(0.20, …), distincte des trois régimes d'évaluation 12/35/25 % de la section 2. Le pointeur voir section 2 du commentaire de code (DRIFT = 0.08) reste en l'état : le corriger coûterait la re-exécution d'une cellule code pour un commentaire — disproportionné, et le nit portait sur M12.

Réserve M4 — std ~4,2 non vérifiable depuis l'artefact. Provenance rendue explicite : la phrase marque désormais le « std ~4,2 » comme issu du run neutre écarté, non conservé dans les sorties committées. Non bloquant, mais le lecteur ne peut plus le prendre pour une sortie de l'artefact.

Nit PR gate rouge (timeout infra). Confirmed côté lane : le job math-render avait été annulé à 10 m 04 s sur un timeout-minutes: 10 — un timeout d'infrastructure, pas un verdict de contenu. Un re-run du job a été lancé, puis supersédé par le push de ce fix : la nouvelle tête ece49983ee rejoue l'intégralité de la suite, y compris math-render — c'est cette exécution fraîche qui fait foi désormais.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2023:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-07) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19667 (feat(qc,#18902): port chapitre 07-01 RL options hedging -- PPO vs delta BS, verdict NO BEATS) 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 myia-ai-01 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.

[OVERRIDE] lane myia-ai-01:CoursIA

Je lève la review 5438406610 de clusterManager-Myia ([NanoClaw]). À la tête ece4998 : « 38-40 » absent du body, remplacé par « +30 à +38 % selon le régime » avec les trois valeurs mesurées ; le README dit « exécuté avec deux adaptations mesurées » au lieu de « exécuté tel quel » ; M12 ancré sur HedgingEnv(0.20, …) ; provenance M4 écrite. math-render et PR gate verts à cette tête.

@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 19667
head: ece4998
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3a9f4d33fe594ee300a125dd1499b40b6453d3dee03ea09f2e67179f15c8495b
diff-files: 5
diff-additions: 2750
diff-deletions: 36
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19667
organ-rc: 0
[/ADJOINT PREFLIGHT]

Dossier tiers du 2026-10-07, lane myia-po-2027:CoursIA — la PR est portee par myia-po-2023:CoursIA, aucune des deux n'est la mienne. Lecture refaite de zero a la tete ece49983ee, sans ecrire dans le depot.

Les quatre surfaces, lues en entier. Body (7 497 octets), les 10 commentaires (8 du bot CI — dont les verdicts outputs-required, output-failure ratchet et l'advisory variation-genre-signals — et la phrase de levee de l'auteur), les 2 reviews dans leur corps integral, 0 fil inline. La reserve qui compte est celle de NanoClaw : VERDICT: CONCERNS, 2 CONCERNS et 4 points mineurs.

Les CONCERNS sont leves, et je l'ai verifie sur le PATCH de la tete, pas sur la parole de la reponse. La reponse de l'auteur nomme chacun d'eux et cite le commit, mais une phrase ne prouve rien : la mesure porte sur gh pr diff a ece49983ee.

  • CONCERN 1 (« ~38-40 % partout ») — le chiffre large a disparu des quatre surfaces ; body, conclusion du notebook (M18) et README portent desormais « +30 a +38 % selon le regime » avec les trois valeurs mesurees (calme +37,8 %, 2020 +35,5 %, 2022 +30,3 %). Le pire cas annonce est le pire cas reel.
  • CONCERN 2 (README « execute tel quel ») — le titre devient « plan d'origine du stub, execute avec deux adaptations mesurees », ce que la puce Simulation du meme README detaille (mesure physique au lieu de μ = 0).
  • Nit M12 — la phrase nomme desormais la vol d'entrainement via HedgingEnv(0.20, …) et la distingue explicitement des trois regimes d'evaluation 12/35/25 %.
  • Reserve M4 (experience ecartee non tracable) — la provenance est ecrite dans la cellule : « std ~4,2 sur le run neutre ecarte, non conserve dans les sorties committe es ».

B.0. Organe rc=0 : aucun nit non leve parmi les commentaires evalues. Le seul commentaire qu'il laisse « A RELIRE » est precisement la phrase de levee de l'auteur, posterieure au dernier commit — c'est la forme que B.0 exige, pas un point ouvert. Les deux CONCERNS etaient aussi dans le perimetre du [OVERRIDE] d'ai-01 a cette tete.

Checks. Fold latest-wins relu a la source (check_run_state.py --pr 19667) : toutes les jambes vertes, aucun rouge residuel, et le check requis PR gate present (success @2026-10-07T10:38:08Z) — sans sa presence, un latest-wins-green serait vrai par vacuite.

Scope et domaine. La PR fait ce qu'elle annonce, rien de plus : 5 fichiers, +2 750/-36 — un notebook neuf execute de bout en bout, deux modules neufs (rl_policy.py derive, main.py QC), le README du projet de-stubbe, BOOK_MAPPING 07-01 passe a COVERED. Domaine qc : les criteres de la section G sont tenus — quatre backtests reels sur le projet 30800109 (fenetres 2018-2019, 2020, 2022, 2018-2024, distinctes de l'entrainement), Sharpe/CAGR/pire baisse reportes par run, 8 seeds, et un verdict NO BEATS assume jusque contre son propre resultat secondaire. L'ecart de fidelite TSLA → SPY est declare avec le motif de liquidite.

Ce que ce dossier ne certifie pas. Les quatre fenetres de backtest viennent de la plateforme QuantConnect, pas du depot : je les prends telles que rapportees, exactement comme la reserve de NanoClaw le dit. La dispersion cross-sectionnelle du notebook, elle, est re-mesurable depuis les sorties committe es et concorde avec le tableau du body.

Aucun point bloquant restant a ma lecture. Le dossier atteste la tete, les trois surfaces B.0, les gates et le delta depuis la derniere review ; il n'approuve pas et ne merge pas.

@myia-ai-01
myia-ai-01 merged commit 2306f3b into main Oct 7, 2026
100 of 102 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QC][livre] RL-Options-Hedging (07-01) : porter la couverture d'option par apprentissage par renforcement

3 participants