Repository navigation
feat(qc,#19621): FamaFrench+AllWeather mesuré NO BEATS, tranche factorielle réparée - #19633
Conversation
…ve fixed The FamaFrench sleeve never emitted: its SPY SMA200 regime filter was only created for tickers in the factor universe, which does not contain SPY, so the composite ran as 80% AllWeather and 20% cash. - main.py / alpha_models.py: mode parameter (intent default, base = code before #19621, sma = effective filter, spy and sixty40 held references), start/end, lookback, vol_window, fee_mult, shadow chart (#18923) and per-ETF order counts. - README.md / README.en.md: measured verdict NO BEATS for base and intent (Holm p 0.37 and 0.22), corrected description (monthly signals, all positive factors, no drift threshold), vol_window shown inert. - qc-strategies-status.md: Alive - BEATS (87.5% was a small-sample PSR) becomes NO BEATS. 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: |
Path-collision (organ #13359/#13615)Cette PR #19633 (
|
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
Grain: DEEP/qc — lane myia-po-2024:CoursIA-3 — prev: DEEP/qc #19599
Résumé
Mesure sur QC Cloud de
Framework_Composite_FamaFrenchAllWeather, selon la règle de verdict inscrite sur #19621 avant le premier backtest. Le registre classait le projet « Alive — BEATS » sur la foi d'un « 87.5% OOS » qui était le PSR d'un échantillon de 835 séances, sans comparaison à une référence.Le défaut annoncé dans l'issue se confirme. La tranche FamaFrench (20 %) n'émettait aucun ordre : son filtre de régime sur la SMA200 de SPY n'était créé que pour les tickers de l'univers factoriel, qui ne contient pas SPY. Le composite valait 80 % d'AllWeather et 20 % de liquide.
Verdict préinscrit sur
base(code tel quel) : NO BEATS. Second verdict surintent(la tranche sans filtre, comme l'annoncent le docstring et le README) : NO BEATS aussi. Le projet passe àintentpar défaut pour être conforme à sa description, sans avantage mesuré.Changements
main.pyetalpha_models.py:mode:intent(défaut),base(code avant [QC] Évaluer Framework_Composite_FamaFrenchAllWeather sous règle préinscrite : « Alive — BEATS » au registre sans référence testée, et tranche FamaFrench qui ne peut émettre aucun signal #19621, tranche inerte),sma(filtre effectif),spyetsixty40(références détenues, hors Framework) ;start,end,lookback,vol_window,fee_mult(modèle de frais du courtier multiplié) ;shadow(contrat du rejeu en ombre, [ML-Pipeline][#18907 5c] Suivi en ombre : geler les candidats à une date D et les rejouer chaque mois, historique hors temps sans biais de sélection #18923) et comptes d'ordres par ETF en statistiques d'exécution ;README.mdetREADME.en.md:docs/qc/qc-strategies-status.md: la ligne du tableau vérifié et celle de l'index passent àNO BEATS.portfolio_construction.pyn'est pas modifié.catalog.jsonnon plus : le catalogue appartient à sa régénération.Mesures
QC Cloud, projet de mesure 37452619, 2015-01-01 → 2026-09-25, frais du courtier, 2949 séances de clôture. Sharpe à taux sans risque nul. Bootstrap circulaire par blocs de 21 séances, 10 000 tirages, graine 18921, correction de Holm sur les deux références.
intent(nouveau défaut)base(code avant #19621)sma(contrôle)aw(AllWeather seul, contrôle)baseintentbase−aw: −0,002 [−0,005 ; +0,001], signature d'une tranche inerte.intent−aw: −0,01 [−0,14 ; +0,14]. Active, la tranche factorielle relève rendement et pire baisse sans changer le Sharpe.vol_windowest inerte : le point de grille 126 reproduitintentà l'identique. Seul le signe du score sélectionne, et diviser par une volatilité positive ne le change pas. Le README le dit.orig(basesur la fenêtre d'origine 2018-2025) : Sharpe QC 0,341, CAGR 6,57 %, pire baisse 13,1 %, 343 ordres tous AllWeather. Il reproduit la ligne « alignée » du README : ces chiffres mesuraient déjà la tranche inerte. Le PSR QC vaut 1,6 % contre 22,9 % dans le README ; écart non investigué.Détail complet : c.6028384270 sur #19621.
Ce que le verdict ne dit pas
NO BEATS.Validation
python -m py_compilesurmain.pyetalpha_models.py: OK.main.py0f297a835d2eetalpha_models.pybe2c8c1c08ff(sha256, préfixes), avecbasepar défaut etmodepassé explicitement. Les fichiers de cette PR (568e36d8d43d,ff1bd167c967) ne changent que le défaut demode(intent), les commentaires et le docstring. Le runcheck, lancé sur ces fichiers sans paramètremode, redonneintentà l'identique : même série de clôture, mêmes statistiques, mêmes comptes d'ordres.QC-traces/19621-famafrench-allweather/.Suivi
Pas de gel au registre du suivi en ombre : le verdict est
NO BEATS.Closes #19621
🤖 Generated with Claude Code