Skip to content

fix(qc,#19053): tranche 3 ex. 17 — verdict REPRODUIT avec le modele du livre - #19164

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/19053-t3-ex17-objectstore
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/19053-t3-ex17-objectstore

Conversation

@jsboige

@jsboige jsboige commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/qc -- lane myia-po-2026:CoursIA -- prev: MED/tooling #19158

Ce que la PR fait

Le rejeu de l'exemple 06/17 dans les conditions du livre tourne avec le modèle entraîné du livre, et non plus avec notre CNN de repli. Le verdict de la ligne 17 de la tranche 3 passe d'ÉCART à REPRODUIT, et l'écart précédent s'attribue à notre substitution, pas au livre.

Étapes 1 à 4 de #19053. Fichier touché : MyIA.AI.Notebooks/QuantConnect/BOOK_MAPPING.md uniquement (3 insertions / 3 suppressions) — la ligne 17 de la tranche 3, son entrée « Rejeux », et le paragraphe d'interprétation.

Les deux rejeux, mêmes conditions

2019-01-01 → 2024-04-01, capital 100 k, USDCAD, paramètres publiés (max_size 100, step_size 10, seuil 0,5, détention 10 jours), sans set_brokerage_model.

CNN de repli synthétique Modèle du livre
backtest 87648032844af2f195239271140bcb1f 949250e3323fe73babd17d45a07ed2eb
profit net −0,062 % +0,063 %
Sharpe −24,1 −25,34
CAGR −0,012 % 0,012 %
pire baisse 0,2 % 0,3 %
PSR 0 % 0 %
ordres 8 8

Sous la règle pré-enregistrée (borne à zéro sur le profit net, parce que le livre ne publie qu'un signe — « toutes les combinaisons sont profitables »), le signe est retrouvé : verdict REPRODUIT.

Trois preuves indépendantes que le détecteur a changé

  1. Le jeu de figures détectées diffère. Modèle du livre : 2020-07-28, 2021-10-05, 2022-06-01, 2022-08-19. Repli : 2020-07-27, 2020-07-28, 2022-03-24, 2022-08-18. L'issue elle-même note que le repli est entraîné « à graine fixe » : un même modèle rejoué rendrait le même jeu. Le changement de jeu est donc l'empreinte d'un autre modèle.
  2. Le Sharpe de crise change d'échelle dans l'analyse produite par QC : crise « Post-COVID Run-up 2020-2021 », −1178 (repli) contre −16 (modèle du livre).
  3. La clé déposée fait 314 235 octets, exactement la taille qu'annonce la sortie du carnet qui l'écrit.

Étape 2 — le journal : hors d'atteinte, et voici les six voies essayées

L'étape 2 demande de vérifier que la ligne Object Store model missing a disparu du journal. Je ne l'affirme pas : je n'ai atteint aucun journal. Un logs: [] rendu par un endpoint qui n'expose pas le journal est muet, pas négatif — conclure dessus serait lire une absence que je n'ai pas constatée.

voie résultat
MCP read_backtest pas de clé logs dans la charge utile — vérifié sur l'ancien rejeu, dont l'issue cite pourtant la première ligne
API QC v2 backtests/read idem ; includeLogs: true et logs: true ignorés (réponse identique)
API QC v2 backtests/logs {"errors":["Endpoint not found (backtests/logs)"]}
lean cloud backtest, projet distant statistiques seules sur la sortie standard
lean cloud backtest, projet tiré en local puis relancé statistiques seules ; aucun répertoire backtests/, donc pas de log.txt
interface web QC session non authentifiée (« You are not logged in or your session has expired ») — je n'ouvre pas de session interactive avec des identifiants

Ce que je ne fais pas : conclure sur un journal non lu, ni forcer un accès authentifié pour aller le chercher.

Ce qui vaut à la place est plus fort qu'une ligne de texte. Les trois preuves ci-dessus portent sur le comportement du modèle : un journal peut pécher par omission, un jeu de figures détectées différent à graine fixe ne le peut pas. Deux vérifications de contexte s'y ajoutent :

  • Le code déployé est celui du dépôt, à trois modifications près. main.py tiré de QC Cloud, comparé au dépôt : diff unifié de 13 lignes sur 257, portant exactement sur set_start_date(2019, 1, 1), set_end_date(2024, 4, 1) et le retrait de set_brokerage_model — c'est-à-dire les conditions du livre, et rien d'autre.
  • La clé était en place avant le rejeu. Object Store de l'organisation : /head-and-shoulders-model.keras, 314 235 octets, modifié 2026-10-04T20:53:06Z ; le backtest 949250e332 a été créé à 20:54:09Z, soit 66 secondes plus tard.

Un troisième rejeu (tête locale, 4be6c7bd15e1) rend les mêmes chiffres au chiffre près — equity 100 062,60 $, 8 ordres : le chemin est reproductible, pas un tirage.

Réserve honnête, écrite dans la doc

La marge est mince : +0,063 %, soit +62,60 $ sur 100 k, et la PSR reste à 0 %. La borne est franchie, elle ne l'est pas largement. Deux champs de QC divergent d'ailleurs sur le montant exact — l'equity donne +62,60 $, la bannière d'exécution affiche « Net Profit $70.02 » (= 7 métiers × 10,0043 $ moyens) ; les deux calculs sont positifs, ce qui suffit à la règle, et je signale l'écart plutôt que de choisir en silence.

Note de méthode ajoutée à la doc (vérifiée firsthand)

Le research.ipynb du livre entraîne son CNN uniquement sur des motifs synthétiques. Vérifié dans le carnet : prices n'est chargé qu'en cellule 4 et n'est référencé par aucune cellule d'entraînement ni d'évaluation ; la cellule 6 fabrique 2000 échantillons à partir de motifs gaussiens et d'une marche aléatoire. Le « modèle du livre » est donc lui-même synthétique : ce rejeu reproduit son signe, pas une supériorité de données.

Closes #19053

…u livre

Le modele entraine du livre (`head-and-shoulders-model.keras`) est desormais
dans l'Object Store de l'organisation ; le rejeu aux conditions du livre
(2019-01-01 -> 2024-04-01, 100 k, USDCAD, parametres publies) est relance avec
lui, backtest `949250e3323fe73babd17d45a07ed2eb` :

  profit net +0,063 %  Sharpe -25,34  CAGR 0,012 %  pire baisse 0,3 %  PSR 0 %
  8 ordres

Le rejeu precedent, qui jouait notre CNN de repli entraine sur des motifs
synthetiques, donnait -0,062 % / Sharpe -24,1. Le signe annonce par le livre
est donc retrouve : sous la regle pre-enregistree (borne a zero sur le profit
net, parce que le livre ne publie qu'un signe), le verdict passe d'ECART a
REPRODUIT, et l'ECART precedent s'attribue a notre modele de substitution, pas
au livre.

Trois preuves que le detecteur a change :
- le jeu de figures detectees differe (2020-07-28, 2021-10-05, 2022-06-01,
  2022-08-19 contre 2020-07-27, 2020-07-28, 2022-03-24, 2022-08-18) -- un CNN
  a graine fixe rejoue a l'identique, donc un autre modele a tourne ;
- le Sharpe de crise (Post-COVID 2020-2021) passe de -1178 a -16 dans
  l'analyse QC ;
- la cle deposee fait 314 235 octets, exactement la taille annoncee par la
  sortie du carnet.

Reserve honnete, ecrite dans la doc : la marge est mince (+0,063 %, soit
+62,60 $ sur 100 k, PSR 0 %) -- la borne est franchie, pas franchie largement.
Note de methode ajoutee : le `research.ipynb` du livre entraine son CNN
**uniquement sur des motifs synthetiques** (verifie : `prices`, charge en
cellule 4, n'est reference par aucune cellule d'entrainement ni d'evaluation ;
la cellule 6 fabrique 2000 echantillons gaussiens et une marche aleatoire). Le
"modele du livre" est donc lui-meme synthetique.

Fichier : `MyIA.AI.Notebooks/QuantConnect/BOOK_MAPPING.md` (ligne 17 de la
tranche 3, son entree `Rejeux`, et le paragraphe d'interpretation), 3 / 3.

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

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

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

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 4, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19164 (fix(qc,#19053): tranche 3 ex. 17 — verdict REPRODUIT avec le modele du livre) 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.

@jsboige

jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

Fermee en doublon de #19152 (fusionnee 00:25:47Z, ferme #19053) : meme rejeu 06/17, meme backtest 949250e3, memes lignes BOOK_MAPPING — la branche est desormais en conflit et redondante (directive ai-01, DM 05/10 02:26Z). Les elements propres de cette PR (trois preuves du changement de detecteur, Sharpe de crise -1178 vs -16, cle 314 235 octets, table des six voies pour le journal, reserves et note de methode) sont verses sur #19053 : #19053 (comment)

@jsboige jsboige closed this Oct 5, 2026
@jsboige
jsboige deleted the fix/19053-t3-ex17-objectstore branch October 5, 2026 00:56
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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QC][livre] Head & Shoulders CNN (06/17) : notre rejeu tourne sans le modèle entraîné du livre

1 participant