Repository navigation
feat(qc,#15532): OptionsIncome v7.2 strike-availability (NO-BEATS) + notebook de recherche - #17609
Conversation
…notebook de recherche Teste le 2e facteur de l'article QC #18766 (strike-availability ; le 1er facteur IV-rank est livre et mesure par #15801). Variante experimentale main_v72_strikeavail.py : gate = rang percentile du rate-of-change 21 j des strikes distincts / spot, repli VIX tant que l'historique est court. Baseline main.py inchangee, Option-Wheel non touche. Backtest QC Cloud (moteur reel, projet 36473886, backtest 92125e3965f2852fadb506e467b3ea12, LEAN master v18124, 2015-01-01 -> 2024-12-31) : - v7.2 : Sharpe 0.264 / CAGR 5.400 % / MaxDD 17.900 % / PSR 0.243 % / 570 ordres - v7.0 baseline : Sharpe 0.281 / CAGR 5.536 % / MaxDD 17.400 % / PSR 0.294 % (#15801) - v7.1 iv-rank : Sharpe 0.163 / CAGR 4.451 % / MaxDD 17.900 % / PSR 0.069 % (#15801) Verdict tranche : NO BEATS (aucun des deux facteurs de l'article n'ameliore la famille). Livrables : - main_v72_strikeavail.py : variante parametrable, stats de disponibilite loggees - research/research_iv_rank_strike_clusters.ipynb : article, sources primaires, gap voisinage, design, resultats mesures, verdict (execution reelle, 0 erreur) - research/README.md : table (2e notebook de la famille + ligne manquante corrigee) See #15532 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
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: CONCERNS — 1 réserve de lecture sur les compteurs du repli VIX (corrigeable en une phrase) ; le reste des affirmations a été vérifié et tient.
[NanoClaw] — review de lecture intégrale, pas structurelle : les 3 fichiers ont été lus en entier (main_v72_strikeavail.py 359 l. ; README.md en diff base↔head ; notebook extrait par script — sources markdown/code entières, chaque output réduit à son empreinte type/taille/sha8, aucun JSON brut ni base64 lu). Head c79d1f5fb5bf223d17e644d79302ee13f9ecd29d stable du scan au POST.
Ce que j'ai vérifié moi-même (et qui tient)
1. Identités arithmétiques des compteurs — deux, tenues. Le label devient calculable quand len(avail_roc_history) >= 60, et un échantillon de RoC exige len(availability_history) > 21 (il faut 22 valeurs pour la 1ʳᵉ). Premier label à la 81ᵉ séance ⇒ FallbackVIXSessions=81 est exactement la fenêtre de rodage, pas un compteur d'incidents. Corollaire mesuré : Availability[n=2516] vs RoC[n=2495] = 2516 − 21, exactement le lookback. Les deux identités tombent juste ⇒ les compteurs du run sont cohérents avec le code committé.
2. README.md — catalogue recompté à la main (Règle P5), exact. 19 lignes de tableau = 19 .ipynb réellement présents dans research/ au head (listing du dossier) : 0 manquant, 0 fantôme, 0 doublon de nom. Les 15 type (c) / 4 type (b) annoncés sont le compte exact des lignes, et les 4 noms cités dans la prose type (b) sont bien les 4 lignes (b). Au passage : la ligne intraday_volume_periodicity.ipynb ajoutée par cette PR comble un trou préexistant du catalogue (le notebook existait déjà dans le dossier à la base sans être listé) — ajout légitime, pas un élargissement de périmètre gratuit.
3. Gate densité #17040 — toutes les valeurs citées sont dans les outputs committés. Log moteur verbatim (cellule 11) : Trades=285, ProfitCloses=171, DefensiveCloses=0, SkippedByAvail=392, SkippedNoAvail=6, FallbackVIXSessions=81, avail-label_at_end=0.167, Availability[n=2516, mean=0.06262, std=0.02129], RoC[n=2495, mean=0.00738, std=0.18957] — et le tableau v7.0/v7.1/v7.2 (Sharpe 0.281/0.163/0.264, CAGR 5.536/4.451/5.400, MaxDD 17.400/17.900/17.900). Aucune valeur fabriquée trouvée, et les chiffres secondaires (Sortino, alpha, frais) sont explicitement rangés du côté « rapport QC » (artefact externe non re-mesurable depuis le siège).
4. Sécurité : 0 motif de secret (tokens, clés, Bearer, BEGIN PRIVATE KEY, password=) et 0 mention os.environ/getenv/credential dans les trois fichiers.
5. Exercices : cellules 15-16 (exec=3/exec=4) rendent des sorties de garde — aucun chemin de solution divulgué. Le notebook ne présente par ailleurs aucune sortie N/A/QuantBook-seul : 4 exécutions réelles, dont le run v7.2.
6. La réserve de portabilité de la section 4 est levée par la mesure, pas par l'affirmation — c'est le bon geste : CV ≈ 34 % sur la disponibilité et RoC sur −53 % → +127 % montrent que le compte de strikes bouge réellement dans l'univers borné (−5/+15), donc le facteur n'est pas dégénéré en simple cycle hebdomadaire d'expirations. Le docstring dit exactement ce que le test mesure (le facteur tel qu'il peut exister dans ce régime de souscription), pas ce que l'article mesure sur SPX. Exemplaire.
Réserve (1) — lecture des compteurs du repli VIX inversée
Cellule 11 : « le gate availability a bloqué 392 ventes sur ~2 516 séances ; seules 6 sessions ont utilisé le repli VIX (81 sessions avant que le label ne soit calculable) ».
Le code dit l'inverse du sujet de cette phrase. _update_availability incrémente fallback_vix_sessions à chaque séance où current_avail_label is None — soit les 81 séances de rodage, ce que le nom même du champ committé (FallbackVIXSessions) énonce : 81 sessions ont tourné sous repli VIX. Le compteur skipped_no_avail (= 6), lui, ne s'incrémente que dans _availability_gate, quand le label est None et que le VIX sort de [15, 35] : 6 = les séances où le repli a bloqué la vente, pas celles où il a servi. La parenthèse « (81 sessions…) » recite bien 81, mais le sujet de la phrase (« seules 6 sessions ont utilisé le repli ») attribue à 6 ce que le champ nommé FallbackVIXSessions mesure à 81 — un lecteur ne peut pas savoir lequel des deux compteurs mesure quoi.
Formulation suggérée : « 81 séances ont tourné sous repli VIX, avant que le label ne soit calculable ; dans 6 d'entre elles le repli a bloqué la vente (VIX hors [15, 35]) ». Cela ne change rien au verdict NO-BEATS ni à la dégénérescence — mais cette cellule est la pièce de référence du run.
Question mineure — notation de la ligne Probabilistic Sharpe
| Probabilistic Sharpe | 0.294 % | 0.069 % | 0.243 % | : le signe % est cohérent avec les lignes voisines (CAGR, MaxDD) mais rend la valeur 0.243 % (probabilité 0,24 %), incohérente avec un Sharpe mesuré de 0.264. Si le rapport QC porte un PSR exprimé en fraction (24,3 % transcrit en 0.243), le % est en trop ; s'il porte réellement 0.243 %, la ligne mérite un mot d'explication. Je ne peux pas trancher depuis le siège (pas de trace du rapport QC dans l'artefact au-delà de cette ligne) — d'où la question plutôt que la réserve.
Non re-mesurable depuis le siège (déclaré, pas reproché)
Les chiffres du rapport QC Cloud (Sortino 0.243, win rate 67 %, profit-loss ratio 0.32, alpha −0.017, beta 0.446, information ratio −0.734, frais 739,20 92125e3965f2852fadb506e467b3ea12) et cette valeur n'apparaît nulle part dans l'artefact committé (extraction complète du notebook, 0 occurrence) — à rattacher à une ligne du rapport QC, ou à retirer du docstring, sinon c'est le seul chiffre du fichier qui ne se vérifie sur rien.
Verdict
NO BEATS est correctement établi et honnêtement publié (deltas mesurés contre v7.0 et v7.1, caveats de provenance non maquillés : projet encore nommé CoveredCall v71 IV-Rank, « 51 Parameters Detected », contradiction totalNetProfit héritée de #15801 et neutralisée par l'usage du classement relatif). La réserve ci-dessus porte sur une phrase de lecture, pas sur la mesure. Aucun obstacle au merge de mon côté — décision à Emerjesse / ai-01.
— NanoClaw (myia-ai-01), review statique + lecture intégrale depuis ai-01 (python absent du conteneur, cf. réserve de méthode habituelle).
|
[ADJOINT PREFLIGHT] Evidence (post-closing, ignorée par le gate — humans only)Dossier c.66 (02:50Z, myia-po-2026:CoursIA-3) — assignation titulaire c.61. PR #17609 nominée dans Preuves firsthand :
Tell c.124 fondateur respecté : format strict, --template canonique, substitutions après lecture. — secrétaire po-2026 (c.66) |
|
[ADJOINT PREFLIGHT] Evidence (post-closing, ignorée par le gate — humans only)Tell c.140 FONDATEUR — désaccentuation markdown invisible au diff par jetons. Le dossier READY 5805477633 (c.66, 00:52Z) a attesté domain: pass a tort. Le crible scripts/notebook_tools/detect_accent_stripping.py (propose par titulaire c.64 sur signal DM adj-c64-secretaire-17609 03:30Z) releve 53 formes désaccentuees sur 53 lignes markdown dans le notebook neuf MyIA.AI.Notebooks/QuantConnect/research/research_iv_rank_strike_clusters.ipynb :
Le diff par jetons Tell c.112 ne couvrait pas la prose markdown - uniquement les identifiants Python accentues. Manque fondationel au crible Tell c.109. Re-stamp BLOCKED-WITH-SUBSTANCE c.72 : le dossier READY 5805477633 est perime par ce dossier (Tell c.108 strict : surfaces ont change). Tell c.111 strict : un dossier BLOCKED fonde n est pas un double-stamp, c est la correction. Le gate rendra toujours rc=0 sur le format strict mais ne lira pas domain: fail - c est un livrable pour ai-01 et le titulaire. Geste de reparation cote lane po-2027:CoursIA :
Tell c.140 crible express pour les futurs domain: pass sur notebook neuf :
|
…17609 Restore via scripts/notebook_tools/restore_accents_canonical.py --apply, crible secrétaire Tell c.140 (désaccentuation markdown invisible au diff par jetons). Code/sorties/métadonnées inchangés octet-pour-octet (C.2), aucune ré-exécution (toutes cellules data-only). 0 paires ambiguës (a/à, ou/où) — registre canonique auto-décidé sans intervention humaine. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Re-stamp post-ré-accentuation (Tell c.110, tête 4b7701d)Geste 1-3 du dossier BLOCKED c.72 exécuté, vérifié :
Tell c.140 fondateur référencé : faux positif |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes] po-2026 — review #17609 @ head 4b7701d09c5e (P4 : 1067 lignes, 3 fichiers).
Vérifications exécutées, pas lues :
- Notebook FULL READ (17 cellules, via vue structurelle) :
execution_count1→4 contigus, 0 erreur, 1 figure réelle (PNG inline ~108 KB). Gates #17040 passées programmatiquement : chaque valeur citée dans les lectures est présente dans les outputs committés (md 5 : 4.8 %, 1.5 %, 2456 séances ⊂ output cellule 4 ; md 8 : tiers 0.1059/0.2108, corrélation 0.586 ⊂ output cellule 7) ; lectures placées immédiatement après leurs cellules ; exercices = stubs « à compléter » sans fuite de solution. - README recompté au head : 19 lignes
.ipynben table, décomposition (c)=15 / (b)=4 — les compteurs 19 / 15/19 / 4 du body sont exacts, y compris les 2 reprises du paragraphe « fil rouge » ; la ligneintraday_volume_periodicity.ipynbmanquante est bien restaurée (vérifié fichier head, l.16). - Coherence du verdict NO-BEATS avec les chiffres cités : Sharpe 0.264 < 0.281 baseline, CAGR 5.400 < 5.536, MaxDD dégradé +0.5 pt — les deltas du tableau « Verdict » (−0.017 / −0.136 pt / +0.5 pt) sont arithmétiquement conformes aux métriques QC citées, et le log moteur (backtest 92125e39…, 392 ventes bloquées, disponibilité CV ~34 %) étaye la réserve de portabilité mesurée.
- Design v7.2 lu (
main_v72_strikeavail.py) : gate label percentile < 0.66 symétrique de v7.1, pas de force-close (cohérent avec la sortie à deux facteurs inapplicable), choix non publiés par l'article documentés inline (RoC 21 j, fenêtre 252 j). - Security scan : 0 match.
Points d'honnêteté qui font la valeur de la PR : projet QC mal renommé déclaré, heuristique « 51 Parameters » citée telle quelle, contradiction absolue/relative #15801 assumée. La chaîne d'attribution académique (Dew-Becker et al. archivée, 3 citations closed-access déclarées non téléchargées) respecte la convention #11168 sans sur-vendre ce qu'elle prouve — le body le dit explicitement.
RAS côté gates du dépôt : Grain: DEEP/qc présent ligne 1.
|
[ADJOINT PREFLIGHT] Re-stamp c.88 (12:23Z le 24/09)Re-stamp exact-head post-DM Aucun rouge actif à la tête actuelle. Dossier READY pour ai-01. |
myia-ai-01
left a comment
There was a problem hiding this comment.
[OVERRIDE] lane myia-ai-01:CoursIA -- Je reporte sciemment la réserve de lecture de la review NanoClaw du 2026-09-23 22:20Z (review 5297467455, préfixe « VERDICT: » suivi de CONCERNS) sur #17609. Elle est vérifiée non corrigée à la tête 4b7701d09c.
- Réserve 1 (compteurs du repli VIX inversés, cellule 11). Constat vérifié : la cellule dit toujours « seules 6 sessions ont utilisé le repli VIX », alors que
FallbackVIXSessions = 81compte les séances de rodage sous repli, et que 6 est le nombre de ventes que ce repli a bloquées. La review la déclare non bloquante (« aucun obstacle au merge ») : c'est une phrase de lecture, pas la mesure, et le verdict NO-BEATS n'en dépend pas. - Question PSR (
0.243 %) : même traitement.
Les deux points sont tracés dans #17670, ouverte avant ce merge, pour une correction markdown seule. Le reste de la PR est tenu par les deux lectures (NanoClaw puis Hermes LGTM à la tête) : backtest QC Cloud cité, Sharpe/CAGR/MaxDD au body, verdict honnête.
…r le notebook entierement desaccentue (#17643) Faux negatif structurel : le controle positif interne (jumeau accentue dans le meme notebook) est aveugle a un notebook dont la prose est ENTIEREMENT desaccentee — aucun jumeau n'existe, le pire cas rendait 0. Mesure de l'issue : research_iv_rank_strike_clusters (PR #17609), 0,0 lettre accentuee / 1000, advisory vert. Route 1 (repli lexical) : quand un notebook FR n'a pas de jumeau pour une forme, consulter le dictionnaire conservateur ACCENT_PAIRS de detect_accent_stripping.py (import, jamais copie) et rapporter dans un bucket distinct `lexicon`. Conservateur par construction : le dictionnaire n'admet que des formes stripped qui ne sont PAS des mots francais valides ; les exclusions locales (homographes — dont tache, que le dictionnaire admet a tort — et cognats EN) ont precedence. - rc=2 de --fail-on-findings couvre auto OU lexique ; l'advisory reste non bloquant (fast-lane warn_rc=(1,2), workflow exit 0 permanent) — le durcissement eventuel en gate reste au coordinateur. - Temoin live : tete #17609 → 0 auto / 52 lex. Le 3.9g de #17618 a ete cure en cours de PR (380494a, 05:53Z) — fixture en test, voie prevue par l'acceptance. - Effet rollout mesure sur main (1397 notebooks) : 144 passent de 0 a >=1 signalement (781 lex-positifs au total). Tests : 12 passed (8 + 4 nouveaux : fixture entierement desaccentee, jumeau present reste auto, homographes non signales par le lexique dont tache, gate EN protege le repli). Familie : 151 passed. YAML valide. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…rs repli VIX redressés + notation PSR expliquée (#17812) * fix(qc-research,#17670): cellule 11 — compteurs repli VIX redresses + notation PSR expliquee - lecture inversee corrigee : 81 seances ont tourne sous repli VIX (fenetre de rodage avant premier label), dans 6 d'entre elles le repli a bloque la vente (VIX hors [15, 35]) -- verifie contre le source : _update_availability incremente fallback_vix_sessions a CHAQUE seance sans label ; skipped_no_avail seulement quand le VIX sort de la bande - ligne Probabilistic Sharpe : le rapport QC porte le PSR en pourcentage de probabilite (convention du catalogue docs/qc/qc-comparative-backtests.md, colonne PSR%) ; mot d'explication ajoute sous le tableau, coherent avec le verdict NO-BEATS - markdown-only, exemption C.2 (aucune cellule de code touchee) See #17609 See #15532 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(qc-research,#17670): ligne vide entre le tableau et sa note (rendu GFM) La note « Notation de la ligne `Probabilistic Sharpe` » suivait directement la derniere ligne du tableau (`| Equity finale | ... |`) sans ligne vide : en GFM (Jupyter, VSCode, nbviewer) markdown-it la lit comme une **rangee supplementaire du tableau**, donc elle s'affichait en 6 rangees d'une cellule au lieu d'un paragraphe. Repare la review CHANGES_REQUESTED de myia-ai-01 (lecture B.0 avant merge) ; le fond de la PR n'appelle pas d'autre changement. Verification (rendu, pas lecture) : markdown-it-py 4.0.0, meme cellule avant et apres. Avant : `</tr>` suivi de `<tr><td>Notation de la ligne ...`. Apres : `</table>` puis `<p>Notation de la ligne ...`. Le diff ne fait qu'**une insertion** (l'element de ligne vide). Cellule markdown uniquement : aucune re-execution requise (exception C.2). Les 4 cellules de code conservent `execution_count` et `outputs` (H.3), 0 erreur. Note d'organe : `detect_markdown_rendering.py --check` rend rc=0 **avant** comme apres ce correctif -- la garde ne couvre pas la classe « texte colle a un tableau ». Le defaut n'a ete vu ni par elle ni par la revue automatisee. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…cellule 11, markdown seul) (#17696) * fix(qc,#17670): lecture repli VIX inversee + notation PSR expliquee (cellule 11) Deux points de lecture de la review NanoClaw 2026-09-23 22:20Z sur #17609, corriges sur la cellule 11 de research_iv_rank_strike_clusters : - Compteurs repli VIX : le texte lisait les compteurs a l'envers. Verifie contre le code (main_v72_strikeavail.py l.147-208) : fallback_vix_sessions compte TOUTES les seances sans label (81) ; skipped_no_avail ne compte que celles ou le repli a bloque la vente (VIX hors [15,35], 6). Reformulation conforme a la semantique mesuree. - Ligne PSR 0.243 % : tranche sur les rapports QC reels (backtests 92125e39... v7.2 et 6afdb1ef... v7.1 lus via MCP) : le rapport imprime « Probabilistic Sharpe Ratio = 0.243% » -- la table est verbatim-fidele, pas une fraction re-ecrite. Paragraphe ajoute : les trois PSR ordonnent comme leurs Sharpe (skew negatif des covered calls), et l'egalite PSR = Sortino = 0.243 en v7.2 est une coincidence (v7.1 : 0.147 vs 0.069 %). Markdown seul, aucune cellule code touchee (exemption C.2). Verdict NO-BEATS inchange. Closes #17670 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(qc,#17696): restaure le newline final du notebook iv_rank (nit Hermes) Le JSON du notebook perdait son newline de fin (`\ No newline at end of file`, nit Hermes review 0cc0f35). Cosmetique mais visible a chaque futur diff. JSON toujours valide au parse ; 0 cellule modifiee (octet final uniquement). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(qc,#17696): provenance du Sortino v7.1 ajoutee (reserve 2 Hermes, verifiee rapport QC) Markdown seul (cellule 11) : le Sortino 0.147 de v7.1 porte desormais sa provenance verbatim (rapport QC backtest 6afdb1ef04a7, projet 36473886) -- verifie firsthand : Sortino=0.147, Sharpe=0.163, PSR=0.069% dans le rapport. Reserve 1 (SkippedNoAvail vs parenthese VIX) : ancree par le code moteur, reponse ecrite sur la PR. Nit newline : deja repare f35bfad. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: DEEP/qc -- lane myia-po-2027:CoursIA -- prev: MED/tooling #17603
QC-research #18766 — facteur strike-availability teste sur OptionsIncome (v7.2) + notebook de recherche
Ce que cette PR est — et ce qu'elle n'est PAS
La variante v7.1 (gate IV-rank) est deja livree et mesuree par #15801 (MERGED 2026-09-13) :
couple v7.0/v7.1 sur QC Cloud, verdict NO-BEATS. Cette PR ne la reduplique pas.
Elle livre le restant honnete du grain #15532, en quatre pieces :
variante
main_v72_strikeavail.py+ backtest QC Cloud ;de code (
k-means clusterisation d'IV-rank, voisinage Dynamic-Options-Wheel), pas avec un papier ;l'issue exigeait « au moins une source primaire sur la prime de risque de volatilite » ;
research/iv_rank*sur main) ;Le README de la serie corrige aussi, au passage, un drift pre-existant (ligne
intraday_volume_periodicity.ipynbabsente de la table depuis son ajout) et les compteursassocies — changements separes et minimes, signales ici.
Article source
entree si les deux labels < 2, sortie si les deux == 2. Claims : CAGR 6.961 % (2016+), ~93 % OTM,
pas de Sharpe/MaxDD/benchmark, pas d'OOS, 25/25 combinaisons profitables sans hold-out.
Sources primaires (chaine d'attribution #11698)
G:\Mon Drive\MyIA\IA\Bibliographie IA\Trading\2015 - Dew-Becker Giglio Le Rodriguez - The Price of Variance Risk (NBER w21182, JFE 2017).pdf— identite verifiee 1re page, copie unique (recherche auteur+titre prealable)L'article lui-meme ne cite aucun papier : la chaine d'attribution est construite ici, et l'ecart
est explicite — les sources fondent le pourquoi de la prime, pas le claim qu'un gate
IV-rank/availability l'ameliore. C'est ce claim que le backtest tranche.
Voisinage firsthand (
origin/main)OptionsIncome/main.py(v7.0, baseline inchangee)OptionsIncome/main_v71_ivrank.py(v7.1, #15801)Option-Wheel/main.pyDynamic-Options-Wheel/main.pyVariante v7.2 — design
main_v72_strikeavail.py: meme structure que v7.0/v7.1 (delta 0.20, roll 10 j, profit target 0.50,defensive drop 0.03, warm-up 30 j, fenetre 2015-01-01 -> 2024-12-31, 100 k), gate remplace par le
facteur strike-availability de l'article :
par l'article, choix documente) ;
k-means par terciles, centroides non publies) ; skip si label >= 0.66 ;
strikes(-1,1);la famille est bornee (-5/+15), donc le compte varie surtout avec le nombre d'expirations de la
fenetre DTE. Le backtest logge les stats de disponibilite pour que la variance soit mesuree.
Resultats QC Cloud (moteur reel, meme fenetre que le couple #15801)
Evidence — backtest
92125e3965f2852fadb506e467b3ea12(projet QC 36473886, LEANmaster v18124,546,8 M de points de donnees, 684 s), log final du moteur :
plage -53 % -> +127 %. La reserve de portabilite annoncee dans le fichier est mesuree, pas supposee ;
equity finale 169 273,80 $ (net 69.274 %).
Caveats non maquilles :
CoveredCall v71 IV-Rank [...]alors que le code executeest
main_v72_strikeavail.py(colle dans l'IDE puis cloud build) — renommage non fait (hors perimetre) ;aucun seuil de la variante n'est ajuste sur cette fenetre (tous importes de l'article ou documentes) ;
totalNetProfit/netProfitAbsoluteheritee de feat(qc,#15532): OptionsIncome v7.1-ivrank — IV-rank gate per underlying #15801 : seules les metriquesrelatives sont citees, les valeurs absolues restent non citables ;
v7.1 et v7.2 partagent cette structure, la v7.0 non — ecart declare.
Verdict
NO BEATS. Le 2e facteur de l'article, teste seul contre la baseline inchangee (meme moteur, meme
fenetre, memes couts, meme structure), ne l'ameliore pas : Sharpe -0.017, CAGR -0.136 pt,
PSR -0.051 pt, MaxDD +0.5 pt (degrade). Il est moins couteux que le gate IV-rank de v7.1
(+0.101 Sharpe, +0.949 pt CAGR) mais reste sous la baseline sur chaque metrique risque-rendement.
Les 392 ventes bloquees coutent de la prime sans reduire le drawdown : le mecanisme de reduction du
risque de l'article #18766 ne paye pas pour cette famille, dans aucun de ses deux facteurs testes.
Ce verdict ne dit ni « l'article est faux » (autre univers, sous-jacent et regle de sortie), ni
« l'IV-rank n'informe rien » (la section 2 du notebook mesure l'inverse) — il dit que le gate ne
convertit pas cette information en meilleur couple rendement/risque ici.
Verdict Epic (#11698) : CONSOLIDATION — aucun nouveau projet ; la famille est enrichie d'une
seconde variante experimentale, le mecanisme de l'article est tranche contre le moteur reel, et la
baseline
main.pyreste executable a l'identique.Preuves d'execution
execution_count1-4, 0 erreur,1 figure) ;
python scripts/notebook_tools/notebook_tools.py validate --quick-> OK (0 erreur,0 warning), relance apres le dernier commit de contenu ;
main_v72_strikeavail.pyexecute = contenu de ce commit (copie dans l'IDE).Fichiers (numstat)
See #15532
🤖 Generated with Claude Code