You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
QC MeanReversion : le code de main plante le 2018-09-11 (IndexError, XLC trop jeune) et le README décrit la v4.0 #20346
Grain: MED/qc — lane myia-po-2024:CoursIA-3 — prev: DEEP/qc #20330
Constat (mesuré)
MyIA.AI.Notebooks/QuantConnect/projects/MeanReversion/main.py, tel qu'il est sur main (sha256 7851ba9c19ad), plante sur QC Cloud le 2018-09-11 à 10:00. Projet 37661514 (nœuds ESGF), backtest 6bf412f10f48, fenêtre codée 2015-01-01 → 2024-12-31. Erreur :
Runtime Error: single positional indexer is out-of-bounds
at _get_3m_return
return float(hist["close"].iloc[-1] / hist["close"].iloc[-self.rs_lookback] - 1)
in main.py: line 72
at _daily_scan
etf_ret_3m = self._get_3m_return(self.symbols[etf])
in main.py: line 120
Cause (lecture du code) : _get_3m_return demande rs_lookback + 5 = 68 barres. Il ne rend 0.0 que sous 0,8 × 63 = 50,4 barres, puis lit iloc[-63]. Un ETF jeune a entre 51 et 62 barres : il passe la garde et sort de l'index. C'est le cas de XLC, introduit en juin 2018, le 2018-09-11 (RSI sous 40 ce jour-là). XLRE (octobre 2015) est exposé de la même façon dans ses premières semaines.
Ce n'est pas un effet des demi-séances (#20286) : _daily_scan tourne à 10:00 New York, et la mesure de c.6107023496 montre des historiques complets à cette heure, demi-séances comprises.
La description est celle de la v4.0 : sortie à RSI > 60, stop à −8 %, sortie totale en marché baissier. Le code est en v5.2 : sortie à RSI > 65, stop à −10 %, demi-poids (12,5 %) en marché baissier, filtre de force relative sur trois mois contre SPY moins 10 points.
config.json porte un cloud-id, le README dit « Aucun ». Non vérifié, hors de cette issue.
Pré-enregistrement (écrit avant le backtest du correctif)
Correctif : une seule ligne. La garde devient len(hist) < self.rs_lookback et rend 0.0, soit la convention que le code applique déjà à un historique court. Un appel à 63 barres ou plus ne change pas ; sous 50,4 barres non plus. Seuls les appels qui plantaient changent.
Exécution : nœuds QC ESGF, fenêtre codée, deux variantes :
fix : le correctif seul ;
fixdiag : le correctif, plus un compteur journalisé des appels qui tombent entre 51 et 62 barres (symbole, date, longueur).
Prédictions
fix va au bout de la fenêtre (completed: true, sans erreur).
Avant le 2018-09-11, les ordres de fix (date, symbole, quantité) sont identiques à ceux du run qui plante.
Les appels entre 51 et 62 barres ne portent que sur XLC (été 2018) et XLRE (fin 2015, début 2016).
fixdiag passe les mêmes ordres que fix.
Publié ensuite : Sharpe, CAGR, pire baisse, PSR, ordres et frais de fix, avec les identifiants de backtest, dans les deux README réalignés sur le code v5.2. Pas de verdict de stratégie : une seule fenêtre, des paramètres choisis sur cette même période (historique v4.2 → v5.4 du docstring). Cette issue corrige un plantage, elle ne mesure pas un avantage.
[CLAIMED] lane myia-po-2024:CoursIA-3 -- correctif de garde + réalignement des deux README sur v5.2, paths: MyIA.AI.Notebooks/QuantConnect/projects/MeanReversion/**
Résultat, lu à completed: true (lane myia-po-2024:CoursIA-3). Pré-enregistrement : body de cette issue, écrit avant tout backtest du correctif.
Projets QC sur les nœuds ESGF : fix 37661669, backtest ad190cab96bc, main.py sha256 0b28658c42c7 ; fixdiag 37661671, backtest ee3c72c70fed, sha256 daa6c742530e. Le run qui plante, orig, est le backtest 6bf412f10f48 (projet 37661514, sha256 7851ba9c19ad).
#
Prédiction
Mesure
Tenue
1
fix va au bout de la fenêtre
completed: true, sans erreur, 2015-01-01 → 2024-12-31
oui
2
ordres identiques avant le 2018-09-11
258 = 258, identiques (date, symbole, quantité) ; les 259 ordres de orig, jour du plantage compris, sont les 259 premiers de fix
oui
3
appels entre 51 et 62 barres : XLC et XLRE seulement
un seul appel : XLC le 2018-09-11, 58 barres
oui
4
fixdiag passe les mêmes ordres que fix
704 = 704, identiques
oui
Le correctif ne change donc qu'un seul appel sur toute la fenêtre : celui qui plantait. Ce jour-là, orig avait soldé XLC (−7 parts) puis s'était arrêté en évaluant sa force relative. fix lui attribue 0.0 et le rachète (+805 parts).
Métriques de fix, descriptives : Sharpe 0,675 (QC, avec taux sans risque) ; CAGR 10,42 % ; pire baisse 11,1 % ; PSR 8,7 % ; 704 ordres ; rendement net +169,6 %. Pas de verdict de stratégie, comme annoncé : une seule fenêtre, et des paramètres v5.x choisis sur cette même période. Le docstring donne pour la v5.2 un Sharpe de 0,810, que ce backtest ne reproduit pas.
PR à suivre :
correctif de garde ;
deux README réalignés sur la v5.2 ;
ligne MeanReversion de docs/qc/qc-strategies-status.md requalifiée, avec une note de correction datée.
Activity
jsboige commentedon Oct 11, 2026
[CLAIMED] lane myia-po-2024:CoursIA-3 -- correctif de garde + réalignement des deux README sur v5.2, paths: MyIA.AI.Notebooks/QuantConnect/projects/MeanReversion/**
jsboige commentedon Oct 11, 2026
Résultat, lu à
completed: true(lane myia-po-2024:CoursIA-3). Pré-enregistrement : body de cette issue, écrit avant tout backtest du correctif.Projets QC sur les nœuds ESGF :
fix37661669, backtestad190cab96bc,main.pysha2560b28658c42c7;fixdiag37661671, backtestee3c72c70fed, sha256daa6c742530e. Le run qui plante,orig, est le backtest6bf412f10f48(projet 37661514, sha2567851ba9c19ad).fixva au bout de la fenêtrecompleted: true, sans erreur, 2015-01-01 → 2024-12-31orig, jour du plantage compris, sont les 259 premiers defixfixdiagpasse les mêmes ordres quefixLe correctif ne change donc qu'un seul appel sur toute la fenêtre : celui qui plantait. Ce jour-là,
origavait soldé XLC (−7 parts) puis s'était arrêté en évaluant sa force relative.fixlui attribue 0.0 et le rachète (+805 parts).Métriques de
fix, descriptives : Sharpe 0,675 (QC, avec taux sans risque) ; CAGR 10,42 % ; pire baisse 11,1 % ; PSR 8,7 % ; 704 ordres ; rendement net +169,6 %. Pas de verdict de stratégie, comme annoncé : une seule fenêtre, et des paramètres v5.x choisis sur cette même période. Le docstring donne pour la v5.2 un Sharpe de 0,810, que ce backtest ne reproduit pas.PR à suivre :
docs/qc/qc-strategies-status.mdrequalifiée, avec une note de correction datée.Traces :
G:/Mon Drive/MyIA/IA/QC-traces/20346-meanreversion/{fix,fixdiag}(results.json).fix(qc,#20346): MeanReversion -- garde d'historique a 63 barres (XLC …