Repository navigation
feat(qc,#19837 tranche 2): FredRate.py EndTime 18h + docstring piege lookahead bias - #19862
Conversation
…bias Tranche 2 du grain #19837 (point 2 du body) : l'exemple pedagogique FredRate.py datait la lecture FRED DFF du jour J 00:00 avec EndTime par defaut Lean (Time + 1 day), surexposant la fenetre de validite d'une donnee que FRED publie a H.15 release (jour J vers 18:00 ET). Corrige : EndTime explicite a Time + 18h, docstring de classe qui pose le piege en 3 points (defaut Lean surexpose, FRED publie 18:00 ET, consequence intraday) avec renvoi a la tranche 2 du grain #19837. Validation locale : ast.parse SYNTAX OK. Validation runtime necessite QC Cloud (hors perimetre ma lane po-2027, routage po-2024). Refs #19837, See #19825, Part of #19821. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
Grain: DEEP/research-code -- lane myia-po-2027:CoursIA-2 -- prev: DEEP/notebook-python c.1472 #19859
feat(qc,#19837 tranche 2): FredRate.py -- EndTime explicite a 18:00 ET, signaler le piege lookahead bias
Contexte
Issue #19837 tranche 2 -- "QC : donnees personnalisees datees au jour de la ligne sans heure de fin (LongShortHarvest, FredRate, QC-Py-03/16/17)". Constat du body, par la mesure de #19825 :
MyIA.AI.Notebooks/QuantConnect/partner-course-quant-trading/examples/Sector-Momentum/FredRate.pyest l'un des deux exemples pedagogiques surfaces par le body. Avant cette PR, la lecture FRED DFF etait dateeTime = J 00:00et beneficiait de laEndTimepar defaut Lean (Time + 1 day), ce qui surexpose la fenetre de validite d'une donnee que FRED publie le jour J vers 18:00 ET (release H.15).La mesure du piege -- avant l'edition
Time = J 00:00,EndTime = Time + 1 day(defaut Lean)FredRate.Valuea J 10:00 ET revient a consulter une valeur pas encore publiee -- lookahead bias.Time = J 00:00,EndTime = Time + 18hEndTime < now-- la donnee n'est pas (encore) dans la fenetre eligible. L'algo attend la publication ou bascule sur la veille viaHistory.Ce correctif preserve la semantique (
Time = date de la ligne CSV, conforme au body) et resserre la frontiere superieure a l'heure de publication reelle de la serie.Livrable
partner-course-quant-trading/examples/Sector-Momentum/FredRate.pyReader: ajout derate.EndTime = rate.Time + timedelta(hours=18).timedeltaest deja expose parAlgorithmImports.Contraintes respectees
ast.parselocal OK (importAlgorithmImportsnon disponible en local, mais la syntaxe est valide -- cf. CI pre-commit).qc-mcp).Validation QC Cloud (§G) — backtest délégué à po-2024
Nature du fix : EndTime explicite sur
rate.EndTime = rate.Time + timedelta(hours=18). Aucune modification de la logique algorithmique de l'exempleSector-Momentum(qui ne consulte pas FRED DFF dans sa stratégie actuelle, c'est unPythonDatapedagogique). Le fix modifie la fenêtre de validité d'une donnée personnalisée pour qu'elle reflète l'heure de publication réelle (H.15 release ~18:00 ET).Conséquence attendue sur Sharpe / CAGR / MaxDD : identique avant/après le fix sur l'exemple
Sector-Momentumlui-même (la stratégie n'utilise pas FRED DFF dans son signal actuel). L'effet est pédagogique : un lecteur qui copie le pattern apprendra la bonne pratique EndTime. Si une stratégie tierce consomme cePythonDataet prenait des décisions intraday J < 18:00 ET, le Sharpe pourrait marginalement varier (l'algo attendra la publication ou consulteraHistoryau lieu de prendre la valeur directe), mais c'est l'effet voulu (correction du lookahead bias, pas régression).Période OOS :
Sector-Momentumest un exemple pédagogique de portfolio sectoriel, sans découpage training/OOS. Le body #19837 ne demande pas de backtest OOS sur l'exemple — il demande de poser le pattern EndTime (fait).Backtest : hors périmètre de ma lane (po-2027:CoursIA-2). Pas de MCP
qc-mcp, pas de runtime Lean. Routage vers lane po-2024 (QC-active, MCP disponible) ou ai-01 demandé via DM ripe c.1477. Critère de succès post-validation :compileSUCCESS,backtestSector-Momentum retourne sans erreur (smoke test), Sharpe/CAGR/MaxDD dans la fourchette pré-fix (variation < 1 %).Tests / validation
python -c "import ast; ast.parse(open(p).read(), p)"(cf. log commit) SYNTAX OK.qc-mcp). Voir section "Validation QC Cloud" ci-dessus.Acceptance #19837 (point 2 du body)
lag+ re-mesurer QC CloudEndTime = Time + 18h, FRED DFF publie a H.15 release)Cette PR traite le point 2 du body, point nucleaire car il porte l'exemple pedagogique
Sector-Momentum. Un claim distinct par sous-acceptance suivra si la lane veut pousser plus loin sur #19837.Pointeurs
partner-course-quant-trading/examples/Sector-Momentum/FredRate.pylag)qc-mcp) — cf. section "Validation QC Cloud" ci-dessus🤖 Generated with Claude Code