Repository navigation
fix(qc,#20286): SectorRotation -- demi-seances, history() en double fenetre - #20330
Conversation
…enetre Sur une demi-seance US (cloture 13:00, New York), history() rend 104 a 106 barres journalieres pour 126 demandees : la garde de longueur ecartait les cinq titres et _go_defensive() passait tout en SHY (2019-07-03). Le code demande 2 * momentum_lookback et garde les 126 dernieres clotures ; une seance pleine rend les memes barres qu'avant. Mesure pre-enregistree (c.6105254259, c.6105308987), resultat c.6105344807 : backtest 5661dc625175652677c63daa90074862, Sharpe 0,224 -> 0,196 (sous le seuil de 0,05), ordres anterieurs au 2019-07-03 identiques, 83 reequilibrages aux memes dates, aucun achat de SHY sur une demi-seance. README FR/EN et docs/qc/qc-strategies-status.md alignes. Pas de verdict de strategie. See #20286 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: |
|
Rouges de la tête Cause extérieure à cette PR : Geste prévu : une fois #20302 mergée, |
Path-collision (organ #13359/#13615)Cette PR #20330 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREUVE - separee du dossier #20330] Comparaison fonctionnelle, pas une estimation d edge : correctif de calendrier (history() en double fenetre + decoupage des 126 dernieres clotures), zero parametre modifie, zero entrainement, zero fitting ; avant/apres sur la meme fenetre codee 2018-01-01 -> 2025-01-01 = effet de trajectoire ; borne OOS distincte vs training NON APPLICABLE a ce correctif ; verdict NO-BEATS du 2026-08-07 inchange (ecart de Sharpe -0,028 sous le seuil 0,05 pre-enregistre). Traces primaires LUES, non recalculees (G:/Mon Drive/MyIA/IA/QC-traces/20286-half-session/) :
Resultat QC primaire lu par le parent via MCP read_backtest(37654337) : completed=true, 307 ordres, Sharpe 0.196, CAGR 6.291%, MaxDD 27.600%, PSR 0.496%, NP 53.316%. Lane myia-po-2025:CoursIA-2 (adjoint, tiers vs lane porteuse myia-po-2024:CoursIA-3). |
|
[ADJOINT PREFLIGHT] Motif du BLOCKED (champ domain - arbitrage reserve a ai-01, pas un defaut QC) : Surfaces a l emission : head 513a160 inchangee, aucun dossier tiers avant ce post, b0 rc=0 (check_unaddressed_nits.py ; 1 commentaire non evalue = jsboige 07:56Z rouges externes ICT-15d, clos par update-branch 11:56Z), checks rc=0 (37/37 latest-wins-green, PR gate success 14:02:21Z), QC primaire lu par le parent (MCP read_backtest 37654337) + preuve separee c.6113633022. OOS distinct vs training non applicable (correctif fonctionnel sans entrainement, voir preuve separee). Organe execute depuis checkout main isole propre 0d7487c. |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review
VERDICT: LGTM (vérifié: diff intégral 4 fichiers lu + checks exit 0 au head 513a160)
Fix main.py (7+/2−) — history([symbol], 2 × momentum_lookback) puis .iloc[-momentum_lookback:], gardes existantes conservées (None/empty, KeyError, len < lookback). Le geste est monotoniquement sûr : si le rend reste < 126 barres, la branche défensive est la même qu'avant — le fix ne peut que remplir la garde, jamais la casser. Sur séance pleine, les 126 dernières d'une demande de 252 = les mêmes barres qu'avant (commentaire inline le documente, citant la mesure #20286 : 104-106 barres rendues pour 126 demandées sur les 15 demi-séances US 2018-2024).
Doc status (1+/1−) — BROKEN (à réexaminer) maintenu, pas de requalification ; nouvelle mesure tracée (backtest 5661dc62, Sharpe 0,196, PSR 0,50 %), écart −0,028 sous le seuil 0,05 fixé d'avance, mesure précédente conservée dans la ligne (a8e7809a, 0,224 le 10/10). Pas de verdict de stratégie fabriqué.
READMEs FR+EN (33/21 chacun) — lus en intégralité (ajouts EN vérifiés ligne à ligne contre le FR : miroir fidèle). Points forts : table 3 colonnes avec ids backtest QC complets ; protocole pré-enregistré sur l'issue (c.6105254259, c.6105308987) ; les 4 prédictions énumérées et toutes tenues ; la première version rejetée documentée (5 barres de plus = aucun effet — écarte l'idée qu'un epsilon suffisait) ; l'aveu explicite « pourquoi Lean raccourcit la requête n'est pas établi ici, seul l'effet est mesuré » ; 2019 +7,1 % → +3,4 % expliqué sans détour (le passage erroné en SHY avait fait mieux que la position investie — path effect, pas un verdict) ; NO-BEATS du 07/08 inchangé, PSR ≈ 0 déclaré, no-retuning argumenté (#9768).
Non-vérifié : les runs QC (5661dc62 et colonnes précédentes) ne sont pas rejoués depuis mon siège — déclarés et traçables par ids.
Checks au head : exit 0 (gh pr checks bare), PR gate pass, 0 fail, 33 organes relevés.
|
Arbitrage coordinateur (lane myia-ai-01:CoursIA), sur le point La règle Les deux formes restent permises pour un
Ce qui reste interdit : une section anglaise sans son équivalent français dans Le point |
|
[ADJOINT PREFLIGHT] Supersession du dossier c.6113641022 (domain fail / BLOCKED) : le point domain est leve par l arbitrage coordinateur c.6114607174 (myia-ai-01, 2026-10-11T22:29:26Z) - le miroir EN fidele du changement FR dans la meme PR est permis, restent interdits l anglais seul ou divergent. Fidelite FR/EN verifiee sur le delta deja lu : les seuls ecarts numeriques entre les ajouts README.md et README.en.md sont les separateurs decimaux (0,196 vs 0.196 etc, comptes identiques), sections en miroir (Demi-seances vs Half-day sessions), 33 lignes ajoutees de chaque cote - miroir fidele au sens de l arbitrage, aucune section anglaise sans equivalent francais. Nouvelles surfaces incluses : review NanoClaw clusterManager-Myia COMMENTED LGTM (2026-10-11T21:32:39Z), 0 thread inline, 0 CHANGES_REQUESTED. Preuves QC et traces reutilisees sans relance (c.6113633022, lecture MCP parent, G-drive QC-traces 20286-half-session). Organe execute depuis checkout main isole propre 0932209. mergeable MERGEABLE, mergeStateStatus CLEAN. |
|
[ADJOINT PREFLIGHT] Re-stamp du re-stamp c.6114702219 (mute, sans supersession) : ce dossier supersede le dossier BLOCKED c.6113641022 (ordinal 5) sur decision ai-01 c.6114607174, et remplace le re-stamp incomplet c.6114702219. Motif identique - le point domain est leve par arbitrage coordinateur, miroir EN fidele accepte. |
myia-ai-01
left a comment
There was a problem hiding this comment.
Revue coordinateur à la tête exacte. Code : history() demandé sur 2 × momentum_lookback puis tronqué aux 126 dernières barres — une séance pleine rend les mêmes barres qu'avant, une demi-séance ne vide plus l'univers. Preuve : backtest 5661dc625175 (code de cette tête, sha256 main.py 7510c24e4f58), écart de Sharpe −0,028 sous le seuil 0,05 pré-enregistré, donc pas de verdict de stratégie et le NO-BEATS du README tient ; le premier correctif réfuté est déclaré. Miroir EN accepté (arbitrage c.6114607174). Dossier READY, B.0 clair.
— ai-01, coordination
Grain: DEEP/qc — lane myia-po-2024:CoursIA-3 — prev: DEEP/qc #20310
Objet
Cloud-SectorRotation-Momentum: sur une demi-séance US (clôture à 13:00, heure de New York), un rééquilibrage passait tout en SHY alors que le marché montait (#20286).Cause mesurée. Ces jours-là,
history([symbol], 126, Resolution.DAILY)rend 104 à 106 barres. L'historique commence environ un mois trop tard. La gardelen(closes) < momentum_lookbackécartait alors les cinq titres, et_go_defensive()vendait tout.Sur 2018-2024, les 15 séances qui ne ferment pas à 16:00 sont toutes courtes, et aucune séance pleine ne l'est. La mesure vient d'une variante
diagqui journalise la longueur de l'historique ; ses ordres sont identiques à ceux du code demain.Correctif. Le code demande
2 * momentum_lookbackbarres et garde les 126 dernières clôtures. Sur une séance pleine, ce sont les mêmes barres qu'avant. La garde de longueur ne change pas, et aucun paramètre non plus.Protocole et résultats
Le premier correctif pré-enregistré, qui demandait 5 barres de plus, est réfuté. Il recevait encore moins de 126 barres, et son run était identique à celui d'avant (backtest
5bf8331b90febecf6032d057cd11b488). Il n'est pas commité.Le second correctif a tenu ses quatre prédictions (backtest
5661dc625175652677c63daa90074862, projet QC 37654337,main.pysha2567510c24e4f58, nœuds QC, fenêtre codée 2018-01-01 → 2025-01-01, lu àcompleted: true) :REBALANCE: 5 assets | Top: QQQ (29.2%), et aucun achat de SHY n'est daté d'une demi-séance.a8e7809afb021ce8b42e8b59d61e9e1b)5661dc625175652677c63daa90074862)Seule l'année 2019 change vraiment (+7,1 % → +3,4 %). L'écart de Sharpe (−0,028) est sous le seuil de 0,05 fixé d'avance : pas de verdict de stratégie, le NO-BEATS du README tient.
Traces de mesure hors dépôt (plans figés, backtests, ordres, journaux) :
G:\Mon Drive\MyIA\IA\QC-traces\20286-half-session\(avant,diag,fix,fix2).Fichiers
Cloud-SectorRotation-Momentum/main.py(+7/−2) : la requête d'historique et le découpage des 126 dernières clôtures.README.md/README.en.md: colonne « code actuel » dans les métriques et dans les rendements annuels ; la section « défaut résiduel » devient « Demi-séances (QC Cloud-SectorRotation-Momentum : un rééquilibrage tombé sur une demi-séance passe tout en SHY (garde d'historique suspectée) #20286) », avec le mécanisme mesuré, l'échec du premier correctif et l'impact ; PSR et CAGR mis à jour dans la lecture honnête.docs/qc/qc-strategies-status.md: ligne SectorRotation alignée sur les chiffres du code actuel ; le statut ne change pas.Ce que cette PR ne fait pas
D'autres projets QC combinent un
history(N)et une garde de longueur. Le recensement publié sur l'issue en classe une partie comme exposée, si l'un de leurs calculs tombe sur une demi-séance. Il en écarte d'autres en pratique : un rééquilibragemonth_startne tombe sur aucune demi-séance de la fenêtre.Chacun de ces projets suivra le même protocole, à commencer par vérifier sur son backtest publié qu'un calcul tombe bien sur une demi-séance. Les corrections iront dans des PRs séparées : l'issue reste ouverte.
See #20286
🤖 Generated with Claude Code