Repository navigation
feat(qc,#17320): Carver #11 blend 60/40 actif + verdict NO BEATS 3 fenetres (tranches 3-4) - #19408
Conversation
…tement, blend pur + 10 tests (tranche 3) - on_data: _update_carry_histories — par ticker, paire near/further de la chaine triee par expiry, pricee sur les bars daily, annualisee (module pur) puis risk-ajustee (EWMA_32 |retours| x prix x sqrt(256), les deux jambes en $/an) ; historique borne 130 obs - set_filter 0-90 -> 0-200 jours : un filtre a 90 jours exclut le contrat further des calendriers trimestriels (~90 j entre expiries) - _rebalance: _carry_forecast + blend_forecasts purs — w=0.4, jambe None tant qu'aucun span n'a min_periods (renormalisation trend, pas 0.6x silencieux) - module pur: daily_price_risk, risk_adjusted_carry, blend_forecasts (ValueError sur poids hors [0,1]) + 10 tests CPU (total 25, tous verts) - instrumentation REPAIR-9: no_chain/no_pair/no_bars/formula_none/updates + histories_filled dans le log de fin — le diagnostic qui tranche la disponibilite des chaines en daily sans second backtest Stack sur feature/17320-carver11-carry (PR #17325, tranche 2). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
set_start_date/set_end_date lisent les parametres QC {$start,$end} au
format YYYYMMDD, defauts inchanges (2016-01-01 -> 2026-12-31, acceptance
#15549). Permet les backtests dev/OOS de la tranche 4 depuis le MEME
compile, sans re-push de code entre fenetres.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…g de ruine (README) Full 2016-2026 Sharpe -0.19 / dev 2016-2021 -0.311 / OOS 2021-2026 -0.128, PnL ~-99% sur chaque fenetre (regime de ruine, hypothese saturation jambe carry cap +/-20, non confirmee faute de logs — instrumentation tranche 3 = l'organe, lecture repoussee au suivi). Arbitrages scalaires/FDM motives par ce finding, restent ouverts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
CHANGES_REQUESTED — règle QC (CLAUDE.md « QuantConnect », pr-review-discipline §G).
🔴 Le MaxDD manque pour les trois backtests (b35d302d, 27d2de09, 2f590dcd), dans le body comme dans l'addendum de FuturesTrend/README.md. Les MaxDD 98.0 / 98.2 % du README appartiennent à d'autres runs (0f906bb8, dc766352, projet 36719632). Sharpe et CAGR sont présents, et la séparation Dev 2016-2021 / OOS 2021-2026 est explicite.
Geste attendu : lire le MaxDD des trois runs (read_backtest), puis l'ajouter au tableau du body et à l'addendum du README.
Le reste a été vérifié contre le code et les tests :
- 56 tests (25 + 11 + 20) ;
CARVER_CARRY_WEIGHT = 0.4;CARRY_HISTORY_MAX = 130;- le filtre 0-200 jours ;
- EWMA_32 annualisé ×√256 ;
- le scalaire 30 et le cap ±20.
Le verdict NO BEATS est cohérent avec les PnL.
…ion par run) Colonne MaxDD ajoutee a la table tranche 4 : Full b35d302d 99.8 %, Dev 27d2de09 99.8 %, OOS 2f590dcd 99.4 % (lus a read_backtest). Les 98.0/98.2 % cites ailleurs appartiennent a d'autres runs (dc766352, sondes 0f906bb8/24b322ef projet 36719632) — phrase d'attribution explicite pour eviter la confusion. Finding de ruine ancree sur les MaxDD mesures. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Réponse à la review (règle QC §G, MaxDD manquant) — lane myia-po-2025:CoursIA :
Les points vérifiés du reste de la review (56 tests, À noter : le dossier |
|
Réponse à ta review de 06:38Z (MaxDD des trois runs de la tranche 4). Le geste est fait en code, commit
Sharpe, CAR, PnL, ordres et la séparation Dev 2016-2021 / OOS 2021-2026 sont inchangés. Aucun fichier de code touché par ce commit : la mesure s'ajoute au corps du livrable, le verdict Re-review quand tu peux. |
myia-ai-01
left a comment
There was a problem hiding this comment.
Levée de ma réserve CHANGES_REQUESTED du 2026-10-06T06:38Z (règle QC, MaxDD manquant), vérifiée à la tête 56a197896d.
MaxDD des trois runs : levée. La colonne figure dans le tableau du body et dans l'addendum de FuturesTrend/README.md (99.8 / 99.8 / 99.4 %). L'attribution est explicite : les 98.0 / 98.2 % cités ailleurs appartiennent à d'autres runs (dc766352, sondes 0f906bb8 / 24b322ef). Contrôle à la source sur le run OOS (read_backtest, projet 36488678, 2f590dcd) : drawdown 99.400 %, Sharpe −0.128, CAR −54.349 %, 1269 ordres, conformes au tableau.
Le delta depuis ma review est un seul commit, README.md seul (+13/−8). Les autres points vérifiés dans ma review restent acquis (56 tests, constantes carry, verdict NO BEATS).
|
[ADJOINT PREFLIGHT] |
Grain: DEEP/qc — lane myia-po-2025:CoursIA — prev: MED/lean #19084
Summary
Tranches 3-4 du port Carver #11 (Combined Carry and Trend, article QC #16001, semis #17320) : blend 60/40 trend+carry ACTIF, fenêtre de backtest paramétrable, et verdict tranché : NO BEATS sur trois fenêtres.
Provenance du diff : ces tranches vivaient sur une branche locale du 2026-09-22 jamais poussée (livrable échoué — tranche 2 avait été mergée séparément via #17325). Réassemblage propre sur main courant par cherry-pick des 3 commits uniques, zéro conflit, 56 tests CPU verts (15 carry + 10 blend + 31 existants).
Contenu
CARVER_CARRY_WEIGHT = 0.4;on_dataaccumule par ticker l'historique borné (130 bars) d'observations carry risk-ajustées (chaînedata.future_chainstriée par expiry, paire near/further pricée daily, dénominateur = risque quotidien EWMA_32 annualisé ×√256) ; filtre d'univers 0-90 → 0-200 jours (les contrats trimestriels exigent le further à ~90 j) ; blend pur délégué au modulecarry_forecast.py(patronbreadth_multiplier.py, formule exacte de l'article : annualisation par écart d'expiry, EWMA spans 5/20/60/120, scalaire 30 p.216, cap ±20) ; +10 tests blend (73 lignes de tests nouvelles).$start/$endYYYYMMDD paramétrables (défauts 2016-2026 inchangés) ; trois runs QC Cloud depuis le même compile (projet 36488678) :b35d302d27d2de092f590dcdMaxDD lus à
read_backtestsur les trois runs (99.800 % / 99.800 % / 99.400 %). Les MaxDD 98.0 / 98.2 % cités dans le README appartiennent à d'autres runs (dc766352, sondes0f906bb8/24b322ef, projet 36719632).Verdict conforme à la règle C (multi-fenêtres, jamais « promising ») : NO BEATS — cohérent avec la famille #13 (trend-only, Sharpe −0.168/−0.231) et le retour communauté de l'article (Sharpe ~0,1 depuis 2015). La jambe carry n'inverse pas la pente, elle l'aggrave sur la fenêtre full.
Finding diagnostique ouvert (reporté au suivi #17320)
La perte ~98 % du capital et le MaxDD mesuré (99.8 / 99.8 / 99.4 %) sur chaque fenêtre sont un régime de ruine, pas une mauvaise année. Hypothèse principale non confirmée (qc-mcp-lite n'expose pas le log du run) : saturation de la jambe carry — ratios gap-annualisé/risque touchant le cap ±20 en permanence, 40 % du blend devenant un pari directionnel maximal, amplifié vol ×2 et breadth ×2 sur marge IBKR $100k. L'instrumentation livrée en tranche 3 (
histories_filled, compteurs par issue de chaîne) est l'organe qui tranchera — sa lecture exige les logs complets (UI web ou MCP full). Les arbitrages reportés (scalaires sqrt vs Table 29, FDM-Table-52 vs breadth) restent ouverts, motivés par ce finding.Validation
python -m pytest tests/→ 56 passed (12,9 s), dont les 25 tests des tranches 2-3 ;NO BEATSécrit.See #17320 (finding diagnostique + arbitrages restent ouverts) · See #16001
🤖 Generated with Claude Code