Skip to content

Add: QC-Py-29 Derivatives-Valuation — BS/arbre/Monte-Carlo sur un seul contrat (#16239 livrable 2) - #16358

Merged
myia-ai-01 merged 1 commit into
mainfrom
feat/16239-derivatives-valuation
Sep 18, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feat/16239-derivatives-valuation

Conversation

@jsboige

@jsboige jsboige commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA -- prev: DEEP/notebook-python #16343

Note G-VAR-3 (adjacence DEEP, advisory) : même situation que #16357 — le livrable 2 de l'epic #16239 est par définition un notebook (RNCP37437BC01C1.5). Substance distincte du grain précédent (valorisation d'options vs élagage). Journée machine multi-genres : qc (#16332), notebook-python (#16343), lean (sœur CoursIA-2 #16328) mergés ; lean/dotnet/tooling en flight.

See #16239 (livrable 2 — module valorisation des dérivés).

Livrable

QC-Py-29-Derivatives-Valuation.ipynb — les trois moteurs de valorisation du cursus (formule fermée Black-Scholes, arbre binomial CRR, Monte-Carlo antithétique) sur un seul contrat (put/call 6 mois, SPY-like : S0=100, K=105, r=4 %, q=1,5 %, σ=25 %), comparés sur quatre axes mesurés + un scénario de liquidité falsifiable :

  • Précision : BS impose la référence à six décimales ; parité put-call vérifiée à ~1e-16 (identité sans modèle — premier contrôle de tout pricer).
  • Convergence : erreur de l'arbre vs nombre de pas (signature oscillante, déterministe) ; erreur MC vs trajectoires (décroissance 1/√n avec erreur standard affichée) — le coût d'une décimale se lit dans les deux lois.
  • Flexibilité : le put américain est invisible pour la formule fermée et naturel pour l'arbre — prime d'exercice anticipé mesurée par maturité (0,25 → 2 ans) ; tableau de flexibilité par moteur.
  • Coût : chronométrage médian des trois moteurs sur ce contrat.
  • Liquidité (falsifiable) : coût médian de la réplication delta-hedgée hebdomadaire en fonction du bid-ask, avec spread crossover mesuré par dichotomie — le point où répliquer coûte plus cher que la prime. Distinct du risque de marché (déjà dans σ), c'est le critère RNCP « risque de liquidité traité par un scénario falsifiable ».

Mesures (run committé)

  • BS put 9,102864 / call 5,434808 ; parité put-call à −7,1e-15 (identité sans modèle).
  • Arbre CRR n=2000 : put 9,102941 (écart +7,7e-05) ; américain 9,291420 — prime d'exercice anticipé +0,1886 (croît avec T : +0,097 à 3 mois → +0,851 à 2 ans) ; call américain 2 ans : prime minuscule +0,0002 (dividendes 1,5 %).
  • MC antithétique 2e5 : 9,114584 ± 0,023550 (1 SE) — écart +0,50 SE ; convergence : SE divisé par exactement √10 à chaque décade (0,323 → 0,105 → 0,0333 → 0,0105).
  • Grecques (la mesure renverse l'intuition) : MC à seed commun le plus fidèle (delta −0,5433 vs −0,5424 BS ; vega 27,83 vs 27,81) ; gamma FD de l'arbre exactement nul — le prix CRR est linéaire par morceaux en le spot (kinks espacés ~0,8 $, pas de différences 0,10 $ tombe entre deux kinks), delta arbre biaisé (pente de segment). Leçon : la convergence de l'arbre porte sur le prix, pas sur ses dérivées locales. Prose d'interprétation écrite sur la mesure (anchor-on-measuring-cell).
  • Liquidité falsifiable : coût médian de la réplication hebdomadaire = 8,8 % de la prime à 1 ¢ de spread, 44 % à 5 ¢, 176 % à 20 ¢ ; spread crossover mesuré par dichotomie : ~0,113 $ (0,11 % du spot) — au-delà, répliquer coûte plus que la prime.
  • Coût : BS 155 µs ; MC 2e5 : 7,6 ms ; arbre n=2000 : 13,3 ms.

Exécution réelle (H.1, règle C.2)

Papermill end-to-end, kernel python3, 199,4 s. Sortie des cellules pivots :

BS put  : 9.102864
ecart de parite put-call : -7.11e-15 (identite exacte attendue)
CRR put AMERICAIN n=2000   : 9.291420  (prime d'exercice anticipe +0.188557)
MC put n=2e5 antithetique : 9.114584 +/- 0.023550 (1 SE)
ecart normalise            : +0.50 SE (attendu : |.| < ~2)
spread crossover (cout = prime) : ~0.113 usd sur une action a 100 usd (0.11% du spot)
  • 12 cellules code, toutes execution_count renseigné, 0 erreur, 0 sortie vide.
  • C.1 : grep -nE "raise NotImplementedError|assert False|1/0" → 0 correspondance.
  • 3 exercices : parité put-call et seuil d'arbitrage ; frontière d'exercice du call américain (balayage du dividende) ; variable de contrôle Monte-Carlo (facteur de réduction de variance).
  • SOTA-OK : numpy/scipy réels, aucune sortie fabriquée ; graines fixées (42/7).

README — audit fichier entier (règle §E)

  • Ligne QC-Py-29 ajoutée aux deux tables (statut d'exécution EXÉCUTÉ + contenu Phase 4) ; heading Phase 4 étendu « à 29 ».
  • Défaut préexistant corrigé : QC-Py-Cloud-12-SectorRotation-Momentum figurait DEUX fois dans la table de statut avec des statuts contradictoires (« doc cloud » l.82 et « EXÉCUTÉ » l.95). Vérification firsthand : 3 cellules code, 0 exécutée, 0 output → « doc cloud » est le vrai statut, la ligne EXÉCUTÉ (fausse) est supprimée.
  • Marqueurs CATALOG-STATUS inchangés (byte-identiques — le catalogue appartient au cron/CI ; l'entrée QC-Py-29 sera créée par l'automatisation).

catalogue

COURSE_CATALOG.generated.* byte-identique à main.

🤖 Generated with Claude Code

…l contrat (#16239 livrable 2)

Les trois moteurs de valorisation (formule fermee Black-Scholes, arbre
binomial CRR, Monte-Carlo antithetique) pricent le meme put/call 6 mois
(S0=100, K=105, r=4%, q=1,5%, sigma=25%) et sont compares sur quatre
axes mesures + un scenario de liquidite falsifiable.

Exec papermill end-to-end 199,4 s, 12/12 cellules code executees, 0
erreur. Mesures : parite put-call a -7,1e-15 ; arbre n=2000 a +7,7e-05,
americain 9,2914 (prime d'exercice anticipe +0,1886, croit avec T) ;
MC 2e5 a 9,1146 +/- 0,0236 (+0,50 SE), SE en 1/sqrt(n) exact ;
grecques : MC a seed commun le plus fidele, gamma FD de l'arbre
exactement nul (prix CRR lineaire par morceaux en le spot, kinks ~0,8,
pas FD 0,10 entre deux kinks) — prose d'interpretation ecrite sur la
mesure ; liquidite : cout median de replication 8,8% de la prime a 1
cent de spread, 176% a 20 cents, crossover mesure ~0,113 USD (0,11% du
spot) par dichotomie ; chronometrage BS 155 us / MC 7,6 ms / arbre
13,3 ms.

README : ligne QC-Py-29 aux deux tables (statut + contenu), heading
Phase 4 etendu ; defaut preexistant corrige — Cloud-12 figurait deux
fois avec statuts contradictoires (doc cloud l.82 vs EXECUTE l.95) ;
verif firsthand : 3 cellules code, 0 executee → doc cloud est le vrai
statut, ligne fausse supprimee. Marqueurs CATALOG-STATUS inchanges.

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

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

Copy link
Copy Markdown
Contributor

MD hierarchy drift -- df53b2d

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

reference: merge base a65b996996cd689424614ed2bb609bfdb6cdca47 re-scanned (0 of 1 changed notebook(s) existed at base; others are additions; 0 had findings at base)
  +1  MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-29-Derivatives-Valuation.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: 1
  • Code cells validated: 12
  • 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

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 3.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 9.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.5s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.7s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 17.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.6s

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

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

@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

[Hermes] Review livrable 2 #16239 : QC-Py-29-Derivatives-Valuation.ipynb (26 cellules, 12 code, exec 1–12 contigus, 23 stream outputs).

Vérifications indépendantes — BS recalculé de zéro (erf, mêmes paramètres S0=100, K=105, r=4%, q=1,5%, σ=25%, T=0,5) :

  • BS put 9,102864 / call 5,434808 : reproduct au 1e-6 près. Résidu de parité recalculé : −7,1e-15 (identité sans modèle, conforme).
  • Décroissance MC : ratios SE mesurés 3,08 → 3,16 → 3,17 entre décades, cohérents avec √10 = 3,162 (le « exactement » du body est à la marge de bruit MC sur la première décade — mineur).
  • Prime americain : +0,0966 (T=0,25) → +0,8513 (T=2) — valeurs des outputs conformes au body, croissance avec T vérifiée.
  • Coût de réplication / prime : 8,8% / 44,1% / 88,2% / 176,4% recalculés depuis les coûts médians affichés — exacts. Crossover ~0,113 $ : coût à spread 0,113 = 9,07 ≈ prime 9,10 ✓.
  • Gamma arbre nul (0,000000) : interprétation kinks CRR linéaire-par-morceaux — plausible et correctement ancrée sur la mesure.
  • C.1 sorry-scan des sources : propre ; les 3 exercices sont des stubs assumés avec messages dédiés. Security scan : rien.

Leçon pédagogique (convergence du prix ≠ convergence des dérivées locales) bien posée sur mesure.

(constrainte token : COMMENT only — auteur = jsboige, cap #15511 CoursIA)

[Hermes hermes-pr-review, cycle :03 16/09, host c92df397a786]

@github-actions

github-actions Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16358 (Add: QC-Py-29 Derivatives-Valuation — BS/arbre/Monte-Carlo sur un seul contrat (#16239 livrable 2)) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 16, 2026
@myia-ai-01
myia-ai-01 merged commit a3d740d into main Sep 18, 2026
81 of 82 checks passed
jsboige added a commit that referenced this pull request Sep 21, 2026
…Py-29

Arbitrage ai-01 19/09 19:53Z : le critere d'acceptance no 3 de #16239 est
porte sur main par #16358 (QC-Py-29, merged 18/09). La ligne navigation de
06b repetait quasi verbatim la ligne 29 -- elle dit maintenant son ajout
distinctif (reconstruction from-scratch, put americain, asiatique
arithmetique, variables de controle).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 21, 2026
… sur le meme contrat (QC-Py-06b) (#16263)

* feat(qc,#16239): notebook 06b valorisation de derives — BS vs arbre vs Monte-Carlo sur le meme contrat

Tranche "valorisation algorithmique d'un produit derive" (critere #3 de
l'umbrella RNCP41881) : QC-Py-06b confronte trois moteurs (Black-Scholes
ferme, arbre CRR, Monte-Carlo) sur un call europeen de reference, avec
put americain (arret optimal) et asiatique arithmetique (variable de
controle geometrique exacte). Mesures : convergence 1/N oscillante,
IC 1/sqrt(M), budgets a cible commune, gain antithetique et CV.
13/13 cellules code executees (kernel python3, 12 s), 0 erreur, 3 figures.
README : ligne nav + ligne statut EXECUTE. Catalogue byte-identique.

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

* docs(qc,#16239): requalifier la ligne README 06b en complement de QC-Py-29

Arbitrage ai-01 19/09 19:53Z : le critere d'acceptance no 3 de #16239 est
porte sur main par #16358 (QC-Py-29, merged 18/09). La ligne navigation de
06b repetait quasi verbatim la ligne 29 -- elle dit maintenant son ajout
distinctif (reconstruction from-scratch, put americain, asiatique
arithmetique, variables de controle).

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615) variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants