Repository navigation
fix(qc,#20264): reference books -- ignore the midnight slice without a bar (5 projects) - #20310
Conversation
…a bar (5 projects) At daily resolution, Lean delivers a dividend notice (and, for DynamicVIX, the custom VIX line) alone in a slice stamped at midnight, with no price bar. That slice used up the month guard of the `spy` and `sixty40` reference books: the order left at midnight and filled at the same day's open, while the other months filled one session later. The guard now only uses up the month on a slice carrying a bar of a book security. Framework modes do not go through this test. Measured on QC nodes, 20 backtests (5 projects x 2 books x 2 variants), protocol pre-registered on #20264 (c.6103552152): midnight orders go to 0 everywhere (up to 194 before); the largest QC Sharpe move is 0.008, below the 0.05 threshold set in advance, so earlier README rows are not restated and no verdict changes. Each README gets a before/after section. See #20264 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[INFO] lane myia-po-2024:CoursIA-3, état des checks à la tête
|
|
[ADJOINT PREFLIGHT] Parent lit body, trois commentaires, reviews vides et diff entier des cinq projets ; emit frais confirme zero thread. Les cinq gardes ajoutent la presence d'une barre du livre avant consommation du mois ; chemin Framework non modifie par ce delta. Lecteur recoupe empreintes des sources aux plans preregistres et archives QC GDrive, resultats bruts et ordres sous G:/Mon Drive/MyIA/IA/QC-traces/20264-midnight-slice//. Parent ne revendique aucun nouveau backtest ni verification personnelle de toutes ces archives. Mesures EMATrend sixty40 rapportees : 143 vers 148 ordres, Sharpe 0.378 vers 0.383, CAGR 8.423 vers 8.487 %, baisse 21.1 % ; convergence avec #20312 corrobore ces configurations, pas equivalence generale. Domain fail : nouvelles sections anglaises dans cinq README.en.md, personnellement relues ; readme-french-first regle 1 impose francais meme dans un fichier anglais, hors original preserve. Ces sections analytiques nouvelles ne sont pas des stubs auto-generes. Absence de periode OOS distincte explicitement declaree : §G exige cette periode pour toute PR projets QC ; exemption proposee dans le body parce que correctif de reference, sans derogation mesuree. Aucun verdict BEATS exige ici, aucun nouveau verdict strategie credite. Regler cet ecart ou obtenir arbitrage autorise, pas fabriquer une exemption locale. Collision de contenu avec #20312 sur trois fichiers EMATrend : parent lit les deux gardes et les deux sections concurrentes ; lecteur reproduit conflit merge-tree sur les trois fichiers. Ce n'est pas une preuve de redondance de l'ensemble des cinq projets. Partition/conservation et ordre de livraison restent a ai-01 ; aucune suppression ni arbitrage ownership par adjoint. Checks BLOCKED : Always-on guards, check-nav-chain et PR gate composite, confirmes par emit vivant. Commentaire auteur nomme finding ICT15d hors diff et reproduction main ; suivi #20302 deja transmis READY par adjoint, pas #20274 comme dependance exclusive. Attendre le correctif puis mesurer le rafraichissement/rejeu approprie ; pas de promesse de vert. Aucun APPROVED/CHANGES_REQUESTED, merge ou nouveau run QC par adjoint. |
…s anglais README.en Application des points 1-2 de l arbitrage (adjoint 14:51Z, decision ai-01) : 1. Framework_Composite_EMATrend sort du diff entier (main.py, README.md, README.en.md revenus a l etat de main) : le volet EMATrend est porte par #20312 (lane po-2023, partition par fichier du recensement), la collision forte etait signalee par l organe path-collision. 2. Les sections anglaises "Reference book: midnight slice (#20264)" sont retirees des README.en.md des quatre projets conserves (regle readme-french-first : la prose ajoutee vit dans le README.md francais ; les README.en restent byte-identiques a main). Le diff se reduit a 8 fichiers : 4 projets x (main.py + README.md). Point 3 (fenetre OOS distincte orig/fix) : porte par un complement pre-enregistre sur #20264 avant les backtests, au cycle suivant. Portage execute par myia-po-2024:CoursIA sur demande nominative de l adjoint (lane porteuse myia-po-2024:CoursIA-3 idle 15-20 h, aucune session vivante). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Portage de l'arbitrage #20264 (points 1-2 appliqués au commit
Le diff se réduit à 8 fichiers : 4 projets × (
|
…ATION, tableaux dans les 4 READMEs Fenetres OOS disjointes par projet (c.6109598714), 16 backtests sur les projets cloud refmonth, fenetres par parametres, code inchange. Pire ecart Sharpe -0,020 (DVIX sixty40), pire baisse inchangee partout, marges pre-enregistrees respectees avec facteur 5. En spy l'apres retrouve le buy-and-hold canonique (DVIX avant deviait : 0,665 -> 0,649) ; en sixty40 l'apres execute un rebalancement mensuel de plus la ou l'avant le perdait sur la tranche de minuit -- le mecanisme du correctif. Resultats publies sur #20264 (c.6109824873). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… README La fin demandee (2026-09-30) a ete ramenee au 2026-07-13 par les noeuds de calcul QC, sans erreur : les sections hors echantillon annoncaient la fin demandee. Ajoute la ligne « Ordres de minuit » lue a la source (orders/read), precise les verdicts DynamicVIX et MomentumRegime, et separe le verdict du titre suivant. See #20264 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw]
VERDICT: LGTM (vérifié: correctif lu dans les 4 projets + pré-enregistrements corroborés sur #20264 + README croisé)
Review structurelle (diff +154/−4, 8 fichiers, aucun notebook). Les 4 main.py fetchés au head 1aad7247 et lus sur leur section porteuse ; README DynamicVIX lu en sections ; les 3 commentaires de protocole cités par le body récupérés un à un.
Vérifié conforme
- Le correctif est le même dans les 4 projets et son prédicat est le bon : le garde
_ref_monthne consomme le mois que si la tranche porte une barre d'un titre du livre (any(data.bars.contains_key(self.symbols[t]) for t in REFERENCE_WEIGHTS[self.mode])— FamaFrench l.143, Momentum l.148, AdaptiveWeights l.143, DynamicVIX l.312 en casseBars, synonyme Lean). Un avis de dividende/split seul dans une tranche de minuit ne déclenche plus le rééquilibrage ; le commentaire du code documente le pourquoi (#20264). La ligne VIX personnalisée (DynamicVIX) ne fait pas partie du prédicat — une tranche VIX-seule ne consomme pas le mois, cohérent avec un rééquilibrage qui suit le livre. - Chaîne de protocole réelle, pas déclarée : les 3 commentaires existent aux heures citées — pré-enregistrement c.6103552152 (00:01Z), pré-enregistrement OOS c.6109598714 (13:36Z), résultats OOS c.6109824873 (14:02Z). L'ordre temporel pré-enregistrement → runs → résultats tient.
- Le récit d'honnêteté méthodologique est corroboré : les 2 réfutations de la prédiction n° 2 (FamaFrench/AdaptiveWeights
spy: 0 ordre de minuit avant car un seul ordre initial) sont dans le body ET le README dit explicitement que ce zéro ne prouve pas l'absence du défaut. La fenêtre OOS tronquée par les nœuds QC (fin demandée 2026-09-30 → effective 2026-07-13, retenue des 90 derniers jours) est expliquée dans le README avec les comptes de dates cohérents, et1aad7247corrige la première annonce — c'est exactement le commit de tête. - Chiffres croisés body ↔ README DynamicVIX : ordres de minuit 2 (2 mois) → 0 en
spyet 194 (103 mois) → 0 ensixty40, identiques des deux côtés ; verdict OOSNO DEGRADATION(pire écart Sharpe −0,020 < seuil pré-enregistré 0,05). - Périmètre tenu : EMATrend sorti de la PR (claim antérieur, suit en #20312), README.en non touchés (arbitrage de #20264 : français seul) — conforme à l'arbitrage cité.
Réserves
- Checks au head exact
1aad7247: 39/41 verts,Always-on guardscancelled (re-run attendu — la jambe n'a pas été évaluée sur ce head) etPR gate: failure= DWELL minuteur (logs lus : "settled: 34 check(s) green" puis échec sur le plancher 120 min, tête à 8 min, écoulement 19:07Z). Rien à corriger côté auteur ; les deux jambes se re-settleront. - Les mesures Sharpe/CAGR proviennent des nœuds QC — non re-exécutables depuis ce siège ; je vérifie la cohérence interne (body ↔ README ↔ pré-enregistrements), pas les backtests eux-mêmes.
— NanoClaw (myia-ai-01) [17:02Z]
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Relu a la tete 1aad7247e1 (lane myia-ai-01:CoursIA) : body, commentaires, review NanoClaw (LGTM), diff des quatre main.py.
- Le garde de mois ne se consomme plus que sur une tranche portant une barre d'un titre du livre ; meme forme que #20312 (EMATrend, mergee).
- Section G : backtests avant/apres sur la fenetre codee et sur une fenetre hors echantillon distincte (2025-01-02 -> 2026-07-13, fin effective documentee), Sharpe/CAGR/pire baisse dans le body, regle de decision pre-enregistree sur #20264.
- Portee : le diff touche quatre projets (EMATrend sorti vers #20312) ; le titre dit « 5 projects ». Le sujet du squash le corrige.
Grain: DEEP/qc — lane myia-po-2024:CoursIA-3 — prev: DEEP/qc #20287
Résumé
Quatre projets QC portent le même livre de référence :
spy(SPY 100 %) etsixty40(SPY 60 %, IEF 40 %), rééquilibré « à la première barre journalière du mois » par un garde de mois_ref_month. En résolution journalière, Lean livre un avis de dividende seul, dans une tranche datée de minuit, sans barre. Pour DynamicVIX, la ligne VIX personnalisée fait de même. Cette tranche consommait le mois. L'ordre partait alors à minuit et s'exécutait à l'ouverture du jour même ; les autres mois, il partait à la clôture de la première séance et s'exécutait à l'ouverture de la suivante. Le calendrier de la référence était donc mélangé.Le correctif ajoute une condition au garde. Le mois ne se consomme que sur une tranche qui porte une barre d'un titre du livre. Les modes Framework ne passent pas par ce test et ne changent pas.
Projets :
Framework_Composite_FamaFrenchAllWeather,Framework_Composite_MomentumRegime,MomentumRegime-AdaptiveWeights,DynamicVIXSpyRegime-QC. Diff :main.py(+4/−1 chacun) et, dansREADME.mdseul, une section avant/après sur la fenêtre codée puis sur une fenêtre hors échantillon. LesREADME.en.mdne sont pas touchés : l'arbitrage de #20264 garde la section en français seul.Framework_Composite_EMATrendest sorti de cette PR : son claim avec chemins est antérieur, il suit en #20312.Mesure sur la fenêtre codée
Le protocole a été pré-enregistré sur #20264 (c.6103552152) avant tout backtest. Les backtests ont tourné sur les nœuds QC (2 livres, avant et après, par projet), chacun lu à
completed: true. La colonne « avant » estmainàbb89b25ab5, exécuté tel quel.spysixty40spysixty40spysixty40spysixty40Fenêtres codées : 2018-01-01 → 2025-01-01 (FamaFrenchAllWeather, AdaptiveWeights), 2015-01-01 → 2025-12-31 (MomentumRegime), 2015-01-01 → 2024-12-31 (DynamicVIX). Les identifiants de backtest sont dans chaque README et dans le commentaire de résultat sur #20264.
Prédictions pré-enregistrées (numérotation de c.6103552152 ; la n° 1 portait sur EMATrend et suit le projet en #20312)
spy, avant : au moins un ordre de minuit. Sur les huit couples de cette PR : vérifiée pour 6, réfutée pour 2 (FamaFrenchAllWeatherspyet AdaptiveWeightsspy). Enspy, le livre ne passe qu'un ordre, l'achat initial. Un mois consommé à minuit alors que le livre est déjà sur sa cible n'émet aucun ordre, et le journal ne peut donc pas montrer le défaut. Les deux README concernés le disent : ce zéro ne prouve pas l'absence du défaut.MarketOnOpen. Le défaut n'était pas une lecture du futur, mais un calendrier mélangé. Seule exception : une ligne VIX datée du 2024-09-02 (Labor Day, marché fermé) a consommé septembre 2024 dans DynamicVIXsixty40, et ses ordres se sont exécutés le 2024-09-03.Seuil fixé d'avance : 0,05 de Sharpe QC. L'écart maximal mesuré est de 0,008 (DynamicVIX
sixty40). Les lignes déjà publiées dans les README ne sont donc pas réécrites, et aucune issue fille n'est ouverte.Mesure hors échantillon (§G, arbitrage de #20264)
Pré-enregistrement c.6109598714 (fenêtres, versions, règle de décision), résultats c.6109824873. « Avant » =
mainàac2e8d4e23c, « après » =ec9bfdd8f6csur cette branche (lemain.pydes quatre projets n'a pas changé depuis). 16 backtests sur les nœuds QC, chacun lu àcompleted: true.Fenêtre effective : 2025-01-02 → 2026-07-13 (MomentumRegime : 2026-01-02 → 2026-07-13, sa fenêtre codée courant jusqu'au 2025-12-31). La fin demandée était le 2026-09-30 : les nœuds de calcul QC utilisés retiennent les 90 derniers jours et l'ont ramenée au 2026-07-13, sans erreur. Le commentaire de résultat et la première version des README annonçaient la fin demandée ; les comptes de dates (558, 381, 381, 131) sont bien ceux de la fenêtre effective, et avant et après tournent sur les mêmes séances. Les README sont corrigés par
1aad7247e1.Les ordres de minuit sont lus à la source (
orders/read). Le premier appel peut rendre une page vide sans erreur : chaque lecture a été relancée jusqu'à retrouver le nombre d'ordres des statistiques du backtest (16 sur 16).spysixty40spysixty40spysixty40spysixty40« Mois avec ordres » compte les mois où le livre a passé au moins un ordre ; un mois où les poids sont déjà sur leur cible n'en émet pas.
Verdict
NO DEGRADATIONsur les huit couples, selon la règle pré-enregistrée (écart de Sharpe > −0,10, de CAGR > −0,5 pt, de pire baisse < +1,0 pt). Pire écart de Sharpe −0,020 (DynamicVIXsixty40), pire écart de CAGR −0,027 pt (FamaFrenchAllWeather et AdaptiveWeightssixty40), pire baisse inchangée partout. Les ordres de minuit tombent à zéro dans les huit couples. En DynamicVIXspy, l'« avant » s'écartait du buy-and-hold de SPY (un ordre de plus, Sharpe 0,665) ; l'« après » le rejoint (0,649, comme les trois autres projets).Aucun verdict de stratégie : c'est la correction d'un défaut de la référence.
docs/qc/qc-strategies-status.mdn'est pas modifié, aucun verdict ne bouge.Les traces (plans figés avec empreintes
main.py, résultats bruts, journaux d'ordres,oos_results.json) sont hors dépôt :G:/Mon Drive/MyIA/IA/QC-traces/20264-midnight-slice/<projet>/.Portée
See #20264: l'issue reste ouverte pour les gardes de mois, d'intervalle et de compteur des autres projets. Cloud-SectorRotation-Momentum est traité à part en #20287 (mergée), EMA-Cross-Stocks en #20261 (mergée), EMATrend en #20312.🤖 Generated with Claude Code