Skip to content

feat(ml-pipeline,#19072): inverse de volatilité pour un investisseur en euros — volatilité en USD ou en EUR - #19074

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/inverse-vol-eur-risk
Oct 4, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/inverse-vol-eur-risk

Conversation

@jsboige

@jsboige jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/research-code — lane myia-po-2024:CoursIA-3 — prev: MED/qc #19056

Résumé

Expérience pré-enregistrée dans #19072 (2026-10-04T06:42:34Z, avant tout calcul). Un investisseur en euros détient sans couverture les quatre ETF du paper harness. Faut-il mesurer leur volatilité, pour la règle inverse_vol_weights, sur les cours en dollars (U, ce que fait le harness) ou sur les cours convertis en euros (F) ?

  • H1 (fidélité de la prévision) : BEATS. F prévoit mieux la volatilité du mois suivant, en euros : d moyen +0,112, p 0,0000 sur les 5 graines, positif sur les deux moitiés. Sur la ligne obligataire, U sous-estime la volatilité en euros d'un facteur ≈ 1,7 (biais log +0,53).
  • H2 (Sharpe net en euros, cible 0,025) : INCONCLUSIVE. Sharpe(F) − Sharpe(U) = +0,050, p 0,117, IC 95 % [−0,032 ; 0,132].
  • Contrôle L (cible indépendante : les lignes cotées en euros, depuis 2010) : l'avantage de F sur U survit (+0,041, IC [0,013 ; 0,069]). F surestime la volatilité de ces lignes, et l'écart F − L n'est pas séparé de zéro.

Résultat complet, tables par ligne et limites : #19072 (comment)

Fichiers (3)

Fichier Contenu
ML-Training-Pipeline/scripts/inverse_vol_currency.py panel USD/EUR avec garde de sens de cotation et règle d'erreur de change, simulation mensuelle (bande, frais, dérive), bootstrap par blocs, Holm, contrôle L
ML-Training-Pipeline/scripts/tests/test_inverse_vol_currency.py 15 tests sur séries synthétiques
ML-Training-Pipeline/results/inverse_vol_currency.json agrégé falsifiable : verdicts, p par graine, IC, moitiés, biais par ligne, descriptifs des stratégies, empreintes SHA-256 des 9 fichiers de données (9 Ko)

results/ est ignoré par QuantConnect/.gitignore : le JSON est ajouté avec -f, comme les agrégés déjà suivis dans ce dossier. Les CSV restent hors dépôt : G:\Mon Drive\MyIA\IA\QC-traces\19072-inverse-vol-currency\ (avec SHA256SUMS.txt).

Vérification

cd MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/scripts
python -m pytest tests/test_inverse_vol_currency.py -q
# 15 passed in 1.40s
python inverse_vol_currency.py --data-dir <dossier des CSV> --out ../results/inverse_vol_currency.json
# rc=0, 39 s ; deux exécutions donnent le même JSON (hors le champ months_unscored ajouté entre les deux)

Le harness est importé, pas copié. load_harness() le localise par glob (projects/*/paper_harness/rebalance.py, une seule correspondance exigée), et le test test_harness_is_imported_not_copied le vérifie. L'expérience mesure donc la règle que le harness exécute.

Points de revue

  • §C (ML) : aucun modèle n'est entraîné et aucun paramètre n'est ajusté. Le lookback de 21 jours, les plafonds (0,5 par ligne, 1 au total), la bande, les frais et les cibles sont fixés dans le pré-enregistrement. Il n'y a donc ni walk-forward ni graine d'entraînement. Les 5 graines (0/1/7/42/99) sont celles du bootstrap, et le p retenu est le plus grand des cinq. H1 porte sur une perte de précision (log quadratique), testée par bootstrap par blocs de 6 mois. Les biais signés par ligne sont rapportés pour U, F et L. Les frais sont de 5 pb, sur 4 ETF.
  • SOTA : SOTA-OK, la règle étudiée est celle du module du harness, appelée directement.
  • Anomalie de données : la règle d'erreur de change pré-enregistrée a retiré 5 dates, toutes un 8 du mois en 2008. Leurs valeurs tombent dans la plage d'août 2008, et la série Yahoo n'a que 5 séances en août 2008. Le mois 2008-08 n'est donc pas noté en H1, et il est listé dans le JSON (months_unscored) au lieu d'être omis en silence.
  • Limite : la bande peut laisser la somme des poids au-dessus de 1, avec des liquidités au minimum à −5,1 % (U) et −4,8 % (F). C'est symétrique entre U et F.

Closes #19072

🤖 Generated with Claude Code

…n USD ou en EUR

Experience pre-enregistree #19072 : la regle inverse_vol_weights du paper
harness, importee et non copiee, comparee sous deux conventions de mesure
de la volatilite pour un investisseur en euros (U : cours en USD ; F : cours
convertis en EUR). H1 (fidelite de prevision) BEATS, H2 (Sharpe net)
INCONCLUSIVE ; controle L sur les lignes cotees en euros.

- scripts/inverse_vol_currency.py : panel, regle d'erreur de change,
  simulation mensuelle avec bande et frais, bootstrap par blocs, Holm
- scripts/tests/test_inverse_vol_currency.py : 15 tests synthetiques
- results/inverse_vol_currency.json : agrege falsifiable (verdicts, p,
  biais par ligne, empreintes sha256 des donnees)

Part of #19072

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 4, 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 added the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

@jsboige

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19074
head: 6d5bb89
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 834f249b4ac3a3776afa8800ee824ec9d49a1157b68d6cecec196c0dea9b5d40
diff-files: 3
diff-additions: 1043
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

note: Dossier c428 sur PR #19074 (feat(ml-pipeline,#19072): inverse de volatilite pour un investisseur en euros -- USD ou EUR). Tierce attestation depuis myia-po-2026:CoursIA-3 (PR porteuse myia-po-2024:CoursIA-3, distincte). DEEP/research-code, 3 fichiers sous ML-Training-Pipeline/ (script + 15 tests + agregé falsifiable 9 Ko), +1043/-0. Checks latest-wins-green mesure ce cycle : 20 check-runs foldes par (started_at,id), PR gate SUCCESS @10:13:01Z, aucun rouge (advisory organ-duplication success, pedagogy density skipped hors notebooks). B.0 rc=0 mesure ce cycle (2 commentaires, 0 nit non leve). mss CLEAN, MERGEABLE. scope: PASS (3 fichiers sous MyIA.AI.Notebooks/QuantConnect/ML-Training-Pipeline/, PAS sous .claude/, .github/, ni CLAUDE.md). domain: PASS (substance DEEP/research-code verifiee : experience pre-enregistree dans #19072 a 06:42:34Z AVANT tout calcul ; H1 BEATS d +0,112 p 0,0000 sur 5 graines positif sur les deux moities ; H2 INCONCLUSIVE honnete (+0,050, p 0,117, IC rendu) ; controle L sur lignes cotees euros ; agregé JSON avec empreintes SHA-256 des 9 fichiers de donnees, CSV hors depot G:\Mon Drive\MyIA\IA\QC-traces\19072-inverse-vol-currency\ avec SHA256SUMS.txt, conforme results-artifact-policy 9 Ko < 512 Ko ; 15 tests pytest verts). verdict READY. DEEP : merge_ready refuse ce tier, merge manuel ai-01 requis sur gate rc=0.

@myia-ai-01
myia-ai-01 merged commit 0592441 into main Oct 4, 2026
21 of 22 checks passed
jsboige added a commit that referenced this pull request Oct 5, 2026
…s retire

Reserve coordinateur 19323 (18:21Z) : la lane QC isolee a des surfaces
publiques mesurables. Verifie firsthand : 9 PRs portent
'lane myia-po-2024:CoursIA-3' en tete de body (#19136 #19074 #19117
#19139 #19145 #19182 #19219 #19292 #19300), et #18923 lui confie le
gabarit du suivi en ombre. L'entree est inscrite avec ces preuves, le
paragraphe 'Identite rapportee, non mesuree' est retire, la couverture
passe a trois entrees ajoutees.

Erreur de methode constatee : la verification du matin n'interrogeait
que dashboards/roster/doc, pas les bodies de PR -- ou vit le tag Grain:.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 5, 2026
…3 identites verifiees (#19323)

* docs(#14529): galerie ouverte -- roster rafraichi, 2 identites verifiees, 1 refusee

- Statut : « proposition en attente de validation utilisateur » -> galerie ouverte
  (validee par le mainteneur, publiee sur main le 2026-10-05, EPIC #14525).
- Roster de reference : 17/09 -> trois mesures datees (roster #14527 du 01/10 mesure
  depuis po-2024, addendum du 04/10 depuis po-2025, verification firsthand du
  2026-10-05T13:07Z depuis po-2023 : 64 cles de dashboards).
- Ajout de `myia-po-2026:CoursIA-3` (secretariat, 3 surfaces) et de
  `myia-ai-01:CoursIA-2` (regisseur GPU, 2 surfaces), verifies sur leurs propres
  surfaces et non sur la liste du coordinateur qui les demandait.
- Ajout de `myia-po-2025:roo-extensions` et `myia-po-2025:claudish` (groupe 1 du
  roster v2) : toutes les identites du groupe 1 sont desormais presentes.
- `myia-po-2024:CoursIA-3` : rapporte mais introuvable sur les 4 surfaces
  interrogees -> consigne comme tel, volontairement non inscrit comme identite
  active (une galerie est une affirmation publique).
- Les identites sans ecriture de dashboard mesuree le 05/10 restent listees sans
  statut de dormance : l'absence d'ecriture un jour donne n'est pas une dormance.

See #14529

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

* docs(#14529): inscrire myia-po-2024:CoursIA-3 -- 9 PRs mesurees, refus retire

Reserve coordinateur 19323 (18:21Z) : la lane QC isolee a des surfaces
publiques mesurables. Verifie firsthand : 9 PRs portent
'lane myia-po-2024:CoursIA-3' en tete de body (#19136 #19074 #19117
#19139 #19145 #19182 #19219 #19292 #19300), et #18923 lui confie le
gabarit du suivi en ombre. L'entree est inscrite avec ces preuves, le
paragraphe 'Identite rapportee, non mesuree' est retire, la couverture
passe a trois entrees ajoutees.

Erreur de methode constatee : la verification du matin n'interrogeait
que dashboards/roster/doc, pas les bodies de PR -- ou vit le tag Grain:.

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

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige
jsboige deleted the feature/inverse-vol-eur-risk branch October 7, 2026 07:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ML-Pipeline] Inverse de volatilité pour un investisseur en euros : mesurer la volatilité en USD ou en EUR ? (pré-enregistrement)

2 participants