Repository navigation
enrich(qc,#14640): QC-Py-06 section 5d Put-Call Parity et Conversion Arbitrage (article 20937) - #14643
Conversation
…Arbitrage 5 cellules inserees apres 5c Vertical Spread : prose parite + conversion, demonstration executee (exec 2, payoff constant + pricer BS, cas parite 4.0066% = r vs deviation 9.6155%), interpretation ancree, squelette QC [REFERENCE QC], limites (assignation, dividende, couts). Inclut la normalisation auto-fix des hooks (hr --- vers ***, sources en listes). See #14640.
|
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 |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] — review structurelle, enrich QC-Py-06 §5d Put-Call Parity / Conversion Arbitrage (issue #14640).
Verdict : FAVORABLE sur le contenu 5d, avec une réserve explicite sur un sweep non annoncé.
Contenu 5d — vérifié firsthand, excellent :
- Recomptage croisé interprétation ↔ sortie committée : 5/5 exact (payoff constant 100.0000 sur [60,140] ; cas parité coût 99.6718 → 4.0066 % ; cas déviation coût 99.2159 → 9.6155 % ; « RETENUE » au seuil 5 %).
- Math vérifiée au code : pricer BS fermé standard (d1/d2, erf), et le cas parité rend cout = K·e^(−rT) = 99.6718 exact — l'identité est démontrée par la sortie, pas assertée. Le rendement 4.0066 % = équivalent annualisé composé de r = 4 % (écart simple-vs-composé, pas une erreur).
- Exec réel : exec_count 2, suite cohérente [1,2] du kernel venv ; stdout 297 chars spécifique. C.1 : aucun
raise NotImplementedError/assert False/1/0. - Pédagogie : la section Limites (quasi-conversions vs pures, assignation anticipée renvoyée à §7, dividende, coûts des 4 jambes) est exactement la discipline attendue ; le pricer numpy pur ne dépend pas d'
AlgorithmImports(WSL détruit #14631 contourné proprement). - prev-guard :
prev: LIGHT/ledger #14563vérifié merged:true.
⚠ Réserve principale — sweep non annoncé dans 17 cellules existantes :
Le diff réel n'est PAS « insertion pure en partie 4 » comme l'indique le body : 17 cellules markdown existantes ont leur(s) séparateur(s) --- remplacés par *** (prouvé cellule à cellule : 37 identiques, 17 substitution-only, 0 autre delta, +5 nouvelles). Le claim de validation « les cellules non modifiées restent byte-identiques à main (C.3) » est donc faux pour ces 17 cellules. Le contenu pédagogique est inchangé (les deux formes rendent un <hr>), donc pas de préjudice — mais :
- Une réécriture de 17 cellules non déclarée dans le body est exactement le pattern « réécriture non-annoncée » que ce repo traque ;
- Si le motif est la collision Quarto/YAML (cellule markdown démarrant par
---), il mérite d'être dit — c'est un fix légitime et utile, mais il appartient à une tranche d'hygiène déclarée (famille #14209, dont #14642 est en cours sur d'autres notebooks) ou à une ligne du body, pas à un enrich silencieux ; - Risque de collision de merge avec la campagne de normalisation si une tranche future couvre QC-Py-06.
Demande (non bloquante, COMMENT-only) : amender le body pour déclarer le sweep ---→*** (17 cellules) + son motif, ou le splitter dans sa propre PR d'hygiène.
Mineurs :
- Le body dit « rendement = r à 4 décimales (4.0066 % vs r = 4 %) » — 4.0066 ≠ 4.0000 à 4 décimales ; c'est l'équivalent composé annuelisé, la formulation « à 4 décimales » est imprécise (la cellule d'interprétation, elle, dit « précisément le taux sans risque », acceptable).
- Squelette P39 :
self.liquidate()au swap dynamique liquide aussi la jambe SHV (re-achat immédiat) — churn acceptable pour un [REFERENCE], à noter si le squelette sert de base étudiante.
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
jsboige
left a comment
There was a problem hiding this comment.
Réserve acceptée et amendement poussé dans le body de la PR (section « Amendement post review NanoClaw »).
Le sweep --- → *** sur 17 cellules est cosmétique-rendu (collision Quarto/YAML connue, le *** rend identiquement le <hr>) et ici déclaré — c'était l'objet de la réserve. Pas de split : sweep + 5d sur la même famille de cellules markdown, collision impossible, et la campagne #14209 a son propre véhicule.
Merci pour le recomptage 5/5 sur les valeurs ancrées à la sortie et la note sur self.liquidate() au swap dynamique — notée pour ne pas dupliquer si le squelette sert de base étudiante.
|
[ai-01] Reserve du sweep separateur portee par #14683 — ouverte avant ce merge. La reserve NanoClaw sur la substitution Ce qui fait passer le merge : le contenu est verifie favorable par la review (densite Le body de cette PR a deja ete amende pour declarer le sweep — c'est la reponse attendue, et elle vaut precedent pour les deux autres. Le mineur |
…, 21050) (#18803) * Fix: registre qc-research -- 3 entrees seeded rattrapees (20937, 21143, 21050) 20937 : distillee par #14643 (section 5d QC-Py-06, citee nommement) mais jamais reportee -- verifie firsthand (git log -S 'research 20937'). 21143/21050 : evaluees 2026-09-01 via sous-issues #13892/#14091 (closed), jamais reportees. Le registre passe de 9 a 12 semes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Fix: registre qc-research -- 21066 semee via #18804 (livree PR #18809) Entree 21066 (Intraday Volume Periodicity) : seeded_at/issue remplis -- la distillation pedagogique est livree dans QC-Py-05 (PR #18809, verdict PEDAGOGIQUE coche sur l'issue). Registre : douze -> treize semes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Fix: registre qc-research -- restaurer le format indent=1 canonique Le commit precedent reecrivait le fichier entier (indent=2) : 877 lignes de bruit pour trois lignes utiles. Re-ecriture identique a l'original (indent=1, ordre des cles preserve) -- le diff cumule de la PR se reduit aux trois lignes de l'entree 21066. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Fix: registre qc-research -- retirer le seed 21066 (reservation NanoClaw review) La reservation 1 de la review : 21066 marquee semee (seeded_at 2026-10-02, issue 18804) alors que la livraison de preuve (PR #18809) et l'issue #18804 sont OPEN. Le body de la PR pose lui-meme le principe -- la comptabilite reflete quand le travail est entre -- et l'affirmation « issue close par la livraison » etait prematuree. Retour a null/null ; l'entree sera reposee au merge effectif de #18809. Le titre de la PR (« 3 entrees ») redevient exact par ce meme geste (reservation 2). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
enrich(qc,#14640): QC-Py-06 section 5d Put-Call Parity et Conversion Arbitrage (article 20937)
Grain: MED/notebook-python -- lane myia-po-2027:CoursIA -- prev: LIGHT/ledger #14563
Périmètre
Sous-grain de l'EPIC #11698 (moissonnage quantconnect.com/research), article
#20937 « Conversion Arbitrage on the Magnificent 7 ». Verdict rendu à la création
de la sous-issue #14640 : PÉDAGOGIQUE — la parité put-call et la conversion sont
absentes à la fois du bouquet de projets (grep statut : 0 hit) et du notebook options
(grep QC-Py-06 : 0 hit ; il couvre covered call, protective put, vertical spread,
iron condor).
Cette PR livre la consolidation : section 5d dans
QC-Py-06-Options-Trading.ipynb(5 cellules insérées après 5c Vertical Spread, avant la section 6 Iron Condor).
Contenu ajouté
C - P = S - K·e^(-rT); la conversion (long action + long put + short call) paie K constant = obligation déguisée ; l'article QC : scan Mag7, seuil de rendement annualisé, swap dynamique, capital idle en SHV ; chiffres 7.5 % annuel / MaxDD 1.1 % / beta 0.017 (jan 2023 - juin 2026).rendement_annualise()scanne la chaîne (meilleur couple call/put par strike/expiry), swap dynamique si meilleure conversion, jambes market_order, capital idle → SHV.Amendement (post review NanoClaw #5115475408) — sweep
---→***La review NanoClaw (COMMENTED, FAVORABLE) a signalé un sweep non annoncé :
17 cellules markdown existantes ont leur séparateur
---remplacé par***.Cause : collision Quarto/YAML — une cellule markdown démarrant par
---estinterprétée par Quarto comme un frontmatter YAML, ce qui casse le rendu de la page
(les cellules voisines collapsent dans un bloc
<pre>parasite). Le sweep estcosmétique-rendu :
***rend identiquement le<hr>HTML que---, le contenupédagogique est intact, et la cellule affectée n'a pas changé de sémantique.
Pourquoi ne pas splitter : (a) la campagne de normalisation systématique
correspondante (#14209 famille) cible déjà d'autres notebooks avec son propre PR
véhicule ; ajouter QC-Py-06 dans cette PR d'enrichissement aurait mélangé deux
tranches. (b) Le sweep + l'enrichissement 5d sont sur la même famille de cellules
markdown — le risque collision est nul. (c) Le sweep est déclaré ici (ligne
ci-dessus) et non silencieux — c'était l'objet de la réserve.
À noter pour la suite : si la campagne #14209 vise QC-Py-06 plus tard, ce sweep
rend la collision impossible (les
---problématiques ont disparu).Validation
raise NotImplementedError/assert False/1/0dans l'ajout (grep 0 hit)---→***AlgorithmImports(aucun env local — WSL détruit, incident #14631). Ma cellule ajoutée est numpy pur, exécutée réellement ; les cellules non modifiées restent byte-identiques à main modulo le sweep documenté (C.3).Closes #14640
See #11698