Repository navigation
feat(qc,#15534): overlay Fear & Greed sur le regime markovien — verdict NO BEATS consolide (DEEP/qc) - #15541
Merged
Conversation
… regime rotation Consolidates research article #19465 into the existing project (no clone). Parameter use_feargreed (default 0) gates a MarkovRegression(k_regimes=2) fit on the trailing FearGreedIndex history (ticker "FG", via AlgorithmImports -- probe #36386733 confirmed the dataset live, >=2500 daily rows from July 2014). When the SPY regime asks for risk but the index regime sits in its greedy state, SPY exposure is halved and the remainder stays in cash (never TLT: no regime-signal blending). The greedy regime is identified by its fitted mean index level, not a hardcoded number. start_year/end_year parameters (defaults preserve 2015-2026) enable IS/OOS and sub-period runs. Default-off = baseline v1.1 behavior strictly unchanged. A/B backtests with metrics land before the PR (next cycle). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…x README Le verdict NO BEATS n'etait mesure que sur la periode complete. Les quatre jambes de sous-periode sont desormais mesurees sur QC Cloud et consignees dans les README FR et EN, avec la fenetre OOS 2021-2026 distincte exigee pour eviter la fuite meme-periode. - periode 2015-2026 : A Sharpe 0.290 vs B 0.019 - IS 2015-2020 : A Sharpe 0.229 vs B 0.051 - OOS 2021-2026 : A Sharpe 0.297 vs B -0.123 Les trois fenetres concluent NO BEATS. Le seul avantage de B (MaxDD IS 14.500% vs 16.700%) est mecanique -- exposition reduite de moitie -- et non un meilleur signal ; il est ecrit comme tel dans le README plutot que tu. Chaque fenetre est un run independant, pas une tranche du run complet : le rechauffement et l'etat de regime ne sont pas reportes, donc les ordres ne s'additionnent pas (103 vs 44+41). Explicitement note dans les README. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
8 tasks
jsboige
added a commit
that referenced
this pull request
Sep 12, 2026
…raziano AST) - verdict INCONCLUSIF Grain: DEEP/research-code — lane myia-po-2023:CoursIA — prev: DEEP/qc #15541 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01
added a commit
that referenced
this pull request
Sep 12, 2026
…rdict INCONCLUSIF (#15547) * feat(ict,#8182): execute case 5 pre-registration (attention schema, Graziano AST) - verdict INCONCLUSIF Grain: DEEP/research-code — lane myia-po-2023:CoursIA — prev: DEEP/qc #15541 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(ict,#8182): lien PR 15547 dans la cellule de statut case 5 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * ci(ict,#8182): test-floor ict/tests 670->686 (16 tests case 5, CI-mesure run 34555990972) La PR #15547 ajoute test_attention_schema.py (16 items) : le floor-guard CI a mesure 686 > floor 670 sur le head 7d737b4 (warning drift ascendant, #15471). Remontee prescrite par le guard lui-meme, dans la PR qui introduit les tests. Jambe tests/ (1046) inchangee -- son FAIL au run 34555991060 est un timeout d'execution sous charge (28 min vs mediane ~800 s, #14598), pas un echec de tests. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ict,#8182): drain Hermes review notes on #15547 - attention_schema.py _cli: write_text(newline="\n") on both calibrate and score outputs -- generator cause of CRLF + missing final newline (Windows os.linesep default), see #15547 review note 2 - ict/results/attention_schema_results.json: EOL normalization CRLF->LF + final newline only; JSON deep-equal verified against the committed content (diagnostics_post_hoc preserved -- regeneration was rejected because the CLI output lacks the post-hoc section that was merged into the committed file) - docs/ict/dissociations-matrix.md: instrument note in case 4 null adversarial -- only sigma is frozen pre-extraction, the epsilon scale median (propa comparator arm, cases 3/4) is assembled from main-arm traces at analysis time; canonical reuse in case 5 (propa_obj_median_scale) inherits this property (review note 1) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
jsboige
added a commit
that referenced
this pull request
Sep 12, 2026
…rdict INCONCLUSIF (#15547) * feat(ict,#8182): execute case 5 pre-registration (attention schema, Graziano AST) - verdict INCONCLUSIF Grain: DEEP/research-code — lane myia-po-2023:CoursIA — prev: DEEP/qc #15541 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(ict,#8182): lien PR 15547 dans la cellule de statut case 5 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * ci(ict,#8182): test-floor ict/tests 670->686 (16 tests case 5, CI-mesure run 34555990972) La PR #15547 ajoute test_attention_schema.py (16 items) : le floor-guard CI a mesure 686 > floor 670 sur le head 7d737b4 (warning drift ascendant, #15471). Remontee prescrite par le guard lui-meme, dans la PR qui introduit les tests. Jambe tests/ (1046) inchangee -- son FAIL au run 34555991060 est un timeout d'execution sous charge (28 min vs mediane ~800 s, #14598), pas un echec de tests. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ict,#8182): drain Hermes review notes on #15547 - attention_schema.py _cli: write_text(newline="\n") on both calibrate and score outputs -- generator cause of CRLF + missing final newline (Windows os.linesep default), see #15547 review note 2 - ict/results/attention_schema_results.json: EOL normalization CRLF->LF + final newline only; JSON deep-equal verified against the committed content (diagnostics_post_hoc preserved -- regeneration was rejected because the CLI output lacks the post-hoc section that was merged into the committed file) - docs/ict/dissociations-matrix.md: instrument note in case 4 null adversarial -- only sigma is frozen pre-extraction, the epsilon scale median (propa comparator arm, cases 3/4) is assembled from main-arm traces at analysis time; canonical reuse in case 5 (propa_obj_median_scale) inherits this property (review note 1) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grain: DEEP/qc — lane myia-po-2023:CoursIA — prev: MED/tooling #15482
See #15534
Article lu, hypothèses et caveats explicités
lastmoddu sitemap (2025-08-13) n'est pas une date de publication et n'est pas présenté comme telle.MarkovRegressionà deux régimes appliqué à des trades intraday aléatoires, juillet 2015–avril 2025, seeds 30 à 50 ; le filtre augmente le net profit sur 18/21 seeds (85,7 %).ConstantFeeModel(0). Critère principal = net profit seul. Stratégie sous-jacente aléatoire. Aucune source académique primaire citée par l'article.Source primaire identifiée et archivée
Huang, Jiang, Tu & Zhou (2015), « Investor Sentiment Aligned: A Powerful Predictor of Stock Returns », Review of Financial Studies 28(3), 791-837.
Référence complète consignée dans les deux README du projet (section « Overlay Fear & Greed » / « Fear & Greed overlay »), avec le lien vers l'article QC comme point d'entrée opérationnel. Aucune règle bibliographique formalisée n'existe dans
docs/(recherchesource primaire|bibliograph: aucun document de règle) — la convention appliquée est donc la citation complète et persistante dans le README du projet.Sonde dataset — SOTA-OK, aucune substitution dégradée
Sondé avant l'implémentation, sur QC Cloud (projet
Myia-Probe-FearGreed-15534, #36386733). Trois itérations, verdict consigné dans le commentaire d'issue du 2026-09-11T01:34Z :from QuantConnect.Data.Custom.CNN import FearGreedIndex+ tickerCNN.FG→ 0 ligne livrée. Ce namespace n'existe pas ; c'était mon hypothèse de travail, pas un fait.AlgorithmImports, ticker"FG".totalOrders= 10 ⇒ ≥ 2500 lignes quotidiennes livrées, couverture depuis juillet 2014, non gated.La profondeur est encodée dans
totalOrders(un ordre de 1 action par palier de 250 lignes) parce queqc-mcp-liten'expose pas les logs — limite documentée en mémoire de lane. Aucun proxy VIX, aucune moyenne mobile, aucun substitut fabriqué.Implémentation
main.pyv1.2, overlay optionnel gaté par le paramètreuse_feargreed(défaut0= comportement v1.1 strictement inchangé, aucune souscription au dataset). Le régime « greedy » est identifié par sa moyenne ajustée plus élevée, jamais par un numéro de régime codé en dur.start_year/end_yearajoutés pour permettre les runs IS/OOS sans fork de code. Le projet existant a été consolidé, pas cloné :Markov-Regime-Detectionétait la cible naturelle (mêmeMarkovRegression, aucun code ne consommait l'indice).Métriques (QC Cloud, 2026-09-11, frais IB conservés dans les deux bras)
Chaque fenêtre est un run indépendant, pas une tranche du run complet : le réchauffement de 3 ans et l'état de régime ne sont pas reportés d'une fenêtre à l'autre, donc les ordres ne s'additionnent pas (103 vs 44+41).
backtestIds QC Cloud (tous
Completed.) :22875d556123255e644cf0130ce73985, B631e7d313175a9911225aacbd220703a63ecb8cef87a9a2aa6f48b40bcd6a245, Ba3cd0faa2bc1b51263833580e6ccc6ad373ffdd649beb995ebc159410ed580a0, Bcecb56b3486399ad26bd3b513a1102fdVerdict : NO BEATS — sur les trois fenêtres
L'overlay dégrade le Sharpe, le CAGR et le profit net sur la période complète, en IS et en OOS. En OOS le Sharpe devient négatif (−0.123).
La seule métrique où B fait mieux est le MaxDD en IS (14.500 % contre 16.700 %) — conséquence mécanique d'une exposition réduite de moitié, pas d'un meilleur signal : le filtre ne fait pas sortir plus tôt, il investit moins. Écrit comme tel dans le README plutôt que présenté comme un gain.
Turnover : non exposé par l'outil de lecture (
qc-mcp-litemappe six statistiques). Le nombre d'ordres est le proxy déclaré, quasi identique dans chaque fenêtre (103/105, 44/45, 41/42) — comportement attendu d'un overlay qui ne modifie que le poids d'exposition et jamais la fréquence de décision.Robustesse : multi-régime, pas multi-seed — justifié
Le sweep de seeds 30–50 de l'article n'a pas d'objet ici : l'article tirait des trades aléatoires, alors que cette stratégie est un arbitrage mensuel déterministe dont l'ajustement
MarkovRegressionne dépend d'aucune graine. Trois seeds identiques donneraient trois fois le même résultat — un sweep serait du théâtre. La robustesse est donc testée par sous-périodes de marché (IS 2015-2020 / OOS 2021-2026), ce qui est la variante demandée par l'acceptance (« sinon expliquer pourquoi le déterminisme rend ce sweep sans objet et tester plusieurs sous-périodes/régimes »).Relu firsthand
docs/qc/qc-strategies-status.mdligne 158 : entréeMarkov-Regime-Detection→ statut Vivant,main.py: class MarkovRegimeDetection(QCAlgorithm). Relue et toujours exacte après ce changement (la classe et le projet restent vivants) — aucune correction nécessaire, et le fichier est hors du dossier borné, donc non modifié ici.Markov-Regime-Detection/relu intégralement avant modification (main.py,README.md,README.en.md).Checklist acceptance
docs/qc/qc-strategies-status.mdet le dossier relus firsthand (ligne 158 vérifiée).Grain: DEEP/qcet reste bornée au dossier existant.🤖 Generated with Claude Code