Repository navigation
feat(qc,#19825): DynamicVIXSpyRegime mesuré NO BEATS, VIX lu avec un jour de décalage - #19838
Conversation
…with a one-day lag Pre-registered measure (#19825), QC Cloud 2015-01-02 -> 2026-07-08: - the CBOE custom data class had no end time, so the VIX close of day D was delivered at D 00:00 and read by CheckSignal at 10:00 (2894/2894 decisions, 139/139 trainings); new mode `lag` dates each row on the next day; - verdict NO BEATS for both `base` and `lag` against SPY held and 60/40 (Holm p 1.00); base - lag Sharpe -0.026 [-0.157; +0.100], descriptive; - default mode becomes `lag`, as the protocol provided; - README (FR + EN) and registry line updated; research.ipynb figures are documented as a different rule (lagged VIX, gross 1.5, rf 4 %). Measured code sha256 (LF) 252e491b1d2c, delivered 84aa849c02e9 (default mode and header comment only). 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 #19838 (
|
…mesure # Conflicts: # docs/qc/qc-strategies-status.md
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
|
[DEEP DEROGATION] lane myia-ai-01:CoursIA — merge d'une PR Motif : le dossier de domaine de l'adjoint ( Le jugement de domaine est fait. L'adjoint a vérifié de première main à cette tête : 38/38 jambes vertes, B.0 rc=0, tableau §G complet (Sharpe, CAGR, pire baisse), verdict |
…e pour un DEEP sur READY secretariat (#19964) La garde merge refuse un DEEP dossiere par le secretariat (#19612) et l'anti-double-stamp refusait le dossier de domaine de l'adjoint qui devait le remplacer : le DEEP sur dossier secretariat etait impostable (mesure sur #19801 et #19838). Le rc 0 admet desormais le re-stamp d'une lane qualifiee quand la PR porte Grain: DEEP, le dossier intact tient du secretariat, et la refutation est explicite (supersedes + supersedes-why) -- le gate juge la refutation comme pour le rc 3 (#19420, #18934). Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Grain: DEEP/qc -- lane myia-po-2024:CoursIA-3 -- prev: DEEP/qc #19780
Closes #19825. See #19709. Fait partie de #19821.
Ce que la PR livre
Mesure préinscrite de
projects/DynamicVIXSpyRegime-QC(protocole et règle de verdict fixés dans #19825 avant tout calcul), et correction d'une lecture du futur mise au jour par cette mesure.main.pyreçoit l'instrumentation prévue par le protocole : paramètresstart,end,mode,vix_pct,ml_threshold,vix_low,fee_mult; graphiqueshadow(contrat [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) ; ordres par ETF et trois compteurs en statistiques d'exécution. Le mode par défaut devientlag, comme le protocole le prévoyait si le compteur confirmait la lecture du jour même.README.md/README.en.md: section de mesure, lecture corrigée des chiffres antérieurs, table des paramètres.docs/qc/qc-strategies-status.md: « Alive / 69.4% (backtest vérifié) » devientNO BEATSavec la mesure citée.Empreintes sha256 du
main.py(fins de ligne LF) : mesuré252e491b1d2c(tous les runs, mode passé en paramètre) ; livré84aa849c02e9. Seuls le défaut demode(base→lag) et le commentaire d'en-tête diffèrent.Constat : le VIX était lu le jour même
La classe
CBOEdatait chaque ligne du CSV à son jour de bourse sans heure de fin. Lean livre une donnée personnalisée à son heure de début : la clôture du VIX de D était visible dès D 00:00, etCheckSignal(D 10:00) décidait sur elle. Le modelagdate chaque ligne du lendemain (Time = jour de bourse + 1 jour) ; une colonnetradedaygarde le jour de bourse pour les compteurs.baselagLes 2 entraînements résiduels sous
lagne sont pas expliqués (hypothèse non vérifiée : jours où le CSV porte une ligne et SPY aucune barre).Résultats (2015-01-02 → 2026-07-08, 2893 séances)
Sharpe à taux sans risque nul sur la valeur à chaque clôture (série
shadow).lagbasespysixty40orig(base, 2015-01-01 → 2024-12-31, hors verdict)Verdicts (bootstrap circulaire par blocs de 21 séances, 10 000 tirages, graine 18921, Holm sur 2 références) :
laglagbasebasebase: NO BEATS (les deux différences négatives, aucune significative).lag: NO BEATS (idem). C'est ce verdict qui porte le registre.base−lag(descriptif, hors Holm) : −0,0258 [−0,1572 ; +0,1004], p 0,665 ; sous-périodes +0,049 / +0,036 / −0,203. La lecture du jour même n'apportait aucun avantage mesurable.lag0,86 avecspy, 0,89 avecsixty40;base0,98 aveclag.origcontre les chiffres du README. Sur la fenêtre du code,main.pyne reproduit ni le 0,97 / 23,83 % / −22,09 % deresearch.ipynb, ni la revendication de la bibliothèque. Le notebook mesure une autre règle : VIX déjà décalé d'un jour (vix_c[i-1], cellule 7), exposition brute 1,5 (cellule 7), Sharpe avec un taux sans risque de 4 % (calculate_metrics(..., risk_free=0.04), cellule 5). Le notebook n'est pas modifié : seule la prose du README qui le présentait comme la référence demain.pyest corrigée.Autres sources de données personnalisées datées au jour de la ligne, sans heure de fin
Relevées comme le prévoyait #19825, non corrigées par cette PR :
projects/LongShortHarvest-QC/main.pyl. 422-445 : même classeCBOE(VIX), utilisée dans les features, l'entraînement et les seuils de décision. Son verdictNO BEATS([QC] Évaluer LongShortHarvest-QC sous règle préinscrite : « Alive — BEATS » au registre sans backtest lisible, contre SPY, 60/40 et le simple maintien des 4 plus grosses capitalisations #19450, feat(qc,#19450): mesure du code LongShortHarvest sur QC Cloud, verdict NO BEATS #19456) a donc été mesuré avec la lecture du jour même. Le défaut ne pouvait que favoriser la candidate, leNO BEATStient a priori, mais le gel de ce projet attend une re-mesure enlag.partner-course-quant-trading/examples/Sector-Momentum/FredRate.pyl. 15 : taux DFF (FRED),rate.Time = date.Time = datesansEndTime. Suivi : QC : données personnalisées datées au jour de la ligne sans heure de fin (LongShortHarvest, FredRate, QC-Py-03/16/17) #19837 (qui porte aussi la re-mesure de LongShortHarvest-QC).Vérification
python -m py_compile main.pyOK ; compilation QC OK pour le code mesuré.baseetlaglancés avant les runs longs : instrumentation et compteur vérifiés.completed: truepour les 7 backtests.check_prose_quantitative_claims.py --diff: aucun compteur quantitatif en prose.Traces
e0ef6b98, probe-lage6c9895a,base7513020b,lagdefc7716,spy1b7a8384,sixty4062c84a51,orig88bedf9b.G:\Mon Drive\MyIA\IA\QC-traces\19825-dynamicvix\(results_base.json,results_lag.json, code de métriques à la têteeadde577e459).🤖 Generated with Claude Code