Skip to content

[QC-research] Ichimoku Clouds In The Energy Sector (#9031) #19678

Closed

Description

@jsboige

Grain: MED/qc — lane myia-po-2023:CoursIA — prev: DEEP/qc #19677

Sous-grain de #11698 (Phase 2 — semis manuel : article du sitemap non couvert). Preflight anti-doublon par numéro d'article : gh search issues "9031" = 0 résultat ; recherche par titre (« ichimoku ») = 0 occurrence dans projects/STRATEGIES_DETAIL.md et docs/qc/qc-strategies-status.md — la famille Ichimoku n'est couverte nulle part au bouquet. L'entrée du comptoir docs/qc/qc-research-seeded.json portait issue: null (le comptoir est en retard massif sur les semis — la recherche d'issues est l'organe, constat remonté sur #11698). Page article vérifiée chargée avant semis.

Article source

Lecture analytique

Ce que l'article annonce

Stratégie Ichimoku sur les 10 plus grandes valeurs du secteur énergie (univers rafraîchi mensuellement, morningstar_sector_code == ENERGY, tri par capitalisation boursière — un modèle d'univers qui élimine le look-ahead bias que Gurrib (2020) avait dans sa sélection). Signal : long quand la ligne Chikou croise le haut du nuage par le bas, short quand elle croise le bas par le haut (IchimokuKinkoHyo, émis en Insights quotidiens de durée 1 jour, EqualWeightingPortfolioConstructionModel + ImmediateExecutionModel). Benchmark : XLE (Energy Select Sector SPDR).

Métriques rendues par l'article (2015-01-01 → 2020-08-16)

Période Sharpe stratégie Sharpe XLE ASD stratégie ASD XLE
Backtest complet −0.31 −0.083 0.223 0.312
Crise automne 2015 −0.31 0.242 0.294 0.351
Crash pétrolier 2020 (19/02→23/03) 176.524 −0.902 0.949 1.108
Reprise 2020 (23/03→08/06) −1.556 46.068 0.447 0.703

L'article conclut honnêtement que la stratégie ne bat pas XLE sur 5 ans (« the strategy fails to beat the benchmark »), tout en notant une ASD plus faible (rendements plus réguliers) et un Sharpe 176 pendant le crash 2020. Le fil ajoute : Jared Broad (STAFF) note qu'inverser les signaux rend la stratégie profitable (« Inverting the signals makes it profitable! A world's first! »).

Sources primaires citées

  • Gurrib (2020) — papier publié, « first published research paper to analyze the predictive power of Ichimoku Clouds for the largest 10 stocks in the US energy sector » ; claim du papier : panier top-énergie de 21,5 % (buy-and-hold) à 194 % sur 7 ans. La chaîne d'attribution ([EPIC] Verification des citations arXiv dans les notebooks — 83 notebooks, 107 IDs, partition par famille #11168) est établie au premier maillon — à compléter à la semaison du port par la référence bibliographique exacte du papier (journal, volume) et dépôt au gisement bibliographique si récupéré.

Différenciation vs bouquet existant

  • Grep ichimoku sur projects/STRATEGIES_DETAIL.md et docs/qc/qc-strategies-status.md : 0 occurrence. Le bouquet n'a aucune famille Ichimoku ni aucune stratégie technical-analysis pure sur le secteur énergie.
  • Le plus proche : aucun. Les familles énergie proches sont des futures (TermStructureCommodities-QC = roll returns matières premières) ; l'analyse technique chartiste (nuages, spans) est vierge au dépôt.

L'article est-il redondant ? NON — famille vierge, source primaire citée, métriques rendues et confrontables.

Verdict

  • CONSOLIDATION — aucun projet existant à rouvrir sur cette famille.
  • PÉDAGOGIQUE — aucun notebook de cours sur Ichimoku.
  • NOUVEAU — famille Ichimoku vierge au bouquet, source primaire (Gurrib 2020), métriques rendues, auteur STAFF, fil vivant (Broad).
  • IGNORE — n/a.

Acceptance du port (pour la lane qui le prendra)

  1. Porter le code de l'article sur QC Cloud (framework : univers mensuelle énergie top-10, IchimokuCloudCrossOverAlphaModel, EqualWeighting + ImmediateExecution), frais IBKR marge, cash 1 M.
  2. Reproduire la table multi-périodes de l'article (complet / crise 2015 / crash 2020 / reprise 2020) sur la fenêtre 2015-01-01 → 2020-08-16, plus une extension post-2020 pour la partie vraiment hors échantillon.
  3. Confronter chaque chiffre à celui de l'article ; benchmark XLE sur le même harnais.
  4. Verdict écrit BEATS / NO BEATS / INCONCLUSIVE par période et global — le claim central à vérifier est le résultat négatif de l'article lui-même (stratégie < XLE sur 5 ans) et son Sharpe 176 pendant le crash 2020 (fenêtre de 23 séances — mesurer si c'est un artefact de marché fermé/short).
  5. Référence bibliographique exacte de Gurrib (2020) citée dans le README du projet (chaîne d'attribution [EPIC] Verification des citations arXiv dans les notebooks — 83 notebooks, 107 IDs, partition par famille #11168).

Acceptance locale (semis)

  • Article lu en entier (corps + fil de commentaires, statut, auteur, datasets, benchmark)
  • Voisinage re-vérifié (grep famille = 0 couverture Ichimoku)
  • Sources primaires identifiées — Gurrib (2020), cité nommément
  • Verdict coché avec justification (NOUVEAU, 5 axes inversés par rapport aux drafts IGNORE)
  • Métriques de l'article recopiées ci-dessus pour confrontation future

Part of #11698

Activity

  1. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2023:CoursIA — portage de l'article 9031 (Ichimoku énergie top-10) sur QC Cloud : framework IchimokuCloudCrossOverAlphaModel + univers mensuelle énergie, reproduction de la table multi-périodes 2015-2020 + extension OOS post-2020, benchmark XLE même harnais, verdict écrit par période.

    Grain: DEEP/qc — lane myia-po-2023:CoursIA — prev: MED/qc #19682

  2. added a commit that references this issue on Oct 7, 2026
  3. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    Pré-enregistrement — verdict stratégie net de frais, bloc hors temps gelé (protocole #18907)

    Protocole adopté par l'arbitrage coordinateur c.5962832068. Ce commentaire est posté avant le premier calcul de la fenêtre OOS ; sa date serveur fait foi (règle 2 de l'arbitrage). Tout changement de l'un des éléments ci-dessous après le premier calcul ouvre une nouvelle expérience, avec un nouveau commentaire.

    Contexte : le portage de l'article 9031 (Ichimoku, secteur énergie) est en cours sur le projet QC 37468246. Les fenêtres full / fall2015 / crash2020 / recovery2020 reproduisent la table de l'article ; la fenêtre hors temps ci-dessous est celle du verdict, et elle n'a jamais servi à écrire ni à ajuster le portage.

    Élément Valeur gelée
    Hypothèse La stratégie Ichimoku energy (9031) bat le buy-and-hold XLE net de frais sur le bloc hors temps 2020-08-17 → 2026-09-30.
    Baseline XLE buy-and-hold, même harnais (mode: xle_hold), mêmes bornes, mêmes frais.
    Métrique Sharpe net de frais sur les rendements journaliers nets. Frais : 5 bps par transaction (actions/ETF), conformément au §C de pr-review-discipline.md.
    Seuil Test de différence de Sharpe par bootstrap par blocs sur les rendements nets journaliers (bloc = 21 séances, 10 000 rééchantillonnages, graine 42). Le verdict BEATS exige p < 0,05 et un écart de Sharpe de signe attendu. Un p ≥ 0,05 rend INCONCLUSIVE, jamais BEATS.
    Grille Paramètres Ichimoku par défaut du portage, tels que committés (aucun réglage sur OOS). Le portage a été écrit et débogué sur 2015-2020 uniquement.
    Bornes du bloc gelé start=20200817, end=20260930 (format YYYYMMDD — le portage lit int(start[6:])).
    Placebo Décalage de la cible : les rendements de la baseline sont décalés de 21 séances vers le futur, puis la même métrique est recalculée. Un BEATS qui survit au placebo signale une fuite ou un artefact de fenêtre. Le résultat placebo figure dans le body au même titre que le résultat principal.
    Seeds Sans objet ici : le portage est déterministe (pas d'entraînement, pas de tirage). L'analogue du test de Diebold-Mariano pour un critère de Sharpe est, comme le précise l'arbitrage, le bootstrap par blocs ci-dessus. Le rapport de biais n'a pas d'objet (aucun modèle).

    Ce qui sera rapporté, séparément et sans fusion :

    1. le verdict stratégie (Sharpe net, bootstrap, placebo) sur le bloc gelé ;
    2. les fenêtres de reproduction de l'article, à titre de diagnostic de portage, jamais comme verdict hors temps ;
    3. l'instruction de l'artefact déjà identifié : le Sharpe 176.524 de la fenêtre crash2020 (23 séances) est une hypothèse d'artefact de fenêtre courte, à instruire explicitement plutôt qu'à présenter comme un résultat.

    Limite honnête : un verdict sur une fenêtre unique reste un verdict sur une fenêtre. La force de ce bloc est d'être hors temps (2020-2026 n'a servi à aucun réglage) ; sa faiblesse est d'être unique et de couvrir un seul régime de marché prolongé.

    — lane myia-po-2023:CoursIA, #19678 / enfant de l'arbitrage #18907

  4. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    Precision de mesure — le cout reel du harnais (publie avant toute lecture OOS)

    Le pre-enregistrement ci-dessus decrit la metrique comme « Sharpe net de frais, frais : 5 bps par transaction ». Le portage ne porte pas un modele de frais en bps : il declare BrokerageName.INTERACTIVE_BROKERS_BROKERAGE (adaptation a1 du header de main.py), dont le bareme est par action (0,005 $/action, minimum 1 $). La ligne descriptive est donc inexacte, et je la corrige ici plutot que dans le texte gele.

    Ce que le premier run de la chaine a reellement facture (strategy-fall2015, 20150810 -> 20151010) :

    Grandeur Mesure
    Ordres 848
    Frais totaux 1 353,44 $
    Volume traite 2 023 702,74 $
    Cout rapporte au volume 6,69 bps
    Cout par ordre 1,60 $

    Le harnais coute donc au moins les 5 bps declares : la description perimee etait plus permissive que le code, pas l'inverse. La confrontation strategie vs XLE se fait sous le meme harnais pour les deux jambes (le comparateur est le mode xle_hold du meme projet), donc la comparaison reste valide ; ce qui change est le niveau absolu, et il est plus conservateur que declare.

    Aucun chiffre OOS n'a ete lu avant l'ecriture de ce commentaire — le run strategy-oos-2020-2026 est encore en cours. Cette precision ne modifie aucun element gele (hypothese, baseline, seuil, grille, bornes, placebo) : elle nomme ce que le code fait.

    Etat de la chaine

    Run Fenetre Statut (2026-10-07 ~11:56Z)
    strategy-fall2015 20150810 -> 20151010 Completed — Sharpe −2,504 · ASD 0,053 · 848 ordres · net −3,174 %
    strategy-crash2020 20200219 -> 20200323 Completed — DEGENERE : 0 ordre, equity plate a 1 000 000 $
    strategy-oos-2020-2026 20200817 -> 20260930 en cours
    restantes full, recovery2020, 5 x xle_hold a lancer

    L'artefact annonce au point 3 du pre-enregistrement est donc instruit : la fenetre crash2020 ne rend pas un Sharpe de 176,524 mais une absence totale de negociation sur le portage (0 ordre, equity inchangee). Un run qui ne trade pas ne valide ni n'infirme l'article — c'est un defaut de portage a instruire (l'univers fine-fundamental mensuel n'est probablement pas arme sur 23 seances), et il sera rapporte tel quel, jamais presente comme un resultat.

    Pour situer la fenetre fall2015 terminee, la table de l'article annonce strat_sharpe −0,31 / strat_asd 0,294 ; le portage rend −2,504 / 0,053. L'ecart est mesure et sera discute dans le verdict : l'article ne publie ni son capital ni son modele de frais, et le portage tourne sous frais de courtier reels (a1), ce qui interdit de lire ces deux nombres comme la meme experience.

    — lane myia-po-2023:CoursIA, #19678

  5. added a commit that references this issue on Oct 7, 2026
  6. added a commit that references this issue on Oct 7, 2026
  7. added a commit that references this issue on Oct 8, 2026
  8. added a commit that references this issue on Oct 8, 2026
  9. myia-po-2023 commented on Oct 8, 2026

    @myia-po-2023
    Collaborator

    Verdict pré-enregistré rendu — et sa portée, plus étroite que prévu

    Le test gelé a été exécuté. Rendu en deux parties séparées, comme le pré-enregistrement
    l'exige (point 1 = le verdict ; point 2 = les fenêtres de reproduction, à titre de diagnostic).
    PR : #19864. Issue de suivi : #19863.

    1. Le bloc gelé n'est pas calculable avec ce portage

    La jambe stratégie ne produit une courbe que sur une partie de la fenêtre gelée. Ailleurs elle
    rend un run vide — Total Orders = "0", End Equity = "1000000", Total Fees = "$0.00",
    equity plate au centime — sans lever la moindre erreur. Mesure du 2026-10-08 (projet
    37468246, plateau list_backtests) :

    Fenêtre Durée Ordres Statut
    2015-08-10 → 2015-10-10 2 mois 848 négocie
    2020-02-19 → 2020-03-23 1 mois 0 vide
    2020-08-17 → 2022-08-16 24 mois 839 négocie
    2021-01-01 → 2022-01-01 12 mois 0 vide
    2021-08-17 → 2022-08-16 12 mois 0 vide
    2022-08-16 → 2023-08-16 12 mois 0 vide
    2020-08-17 → 2026-09-30 (bloc gelé) 6,1 ans — ne complète pas (gel, puis abandon)
    2020-08-17 → 2026-09-30 (mode: xle_hold) 6,1 ans 1 complète

    Trois explications ont été testées, toutes trois réfutées par la mesure :

    1. « fenêtre trop courte pour le warm-up Ichimoku » — réfutée : fall2015 négociait 848 ordres
      en deux mois
      , et les fenêtres vides incluent une année entière ;
    2. « la donnée fine-fundamental s'arrête vers 2022-08 » — réfutée : la fenêtre 2021 est
      entièrement contenue dans celle qui négocie (839 ordres, dont 453 points d'equity en 2021
      seul, 364 valeurs distinctes) ;
    3. « l'alignement du mois de départ » — réfutée par une sonde dédiée : 2021-08-17 → 2022-08-16
      commence en août, est entièrement contenue dans la fenêtre qui négocie, et rend 0 ordre.

    Établi : le mur est sur le chemin FineFundamentalUniverseSelectionModel (la jambe xle_hold du
    même projet, même nœud, mêmes bornes, complète sans difficulté) et l'univers se vide
    silencieusement
    . La cause exacte n'est pas identifiée — elle est ouverte en #19863, elle
    n'est pas devinée ici.

    2. Le verdict, sur la partie calculable

    Il porte sur 2020-08-17 → 2022-08-16 — les 24 premiers mois du bloc gelé, entièrement
    contenus
    dedans, et la plus longue fenêtre où la jambe stratégie produit réellement une courbe.
    Test inchangé : bootstrap par blocs, bloc = 21 séances, 10 000 rééchantillonnages, graine 42,
    apparié séance par séance, placebo à 21 séances.

    Sharpe (instrument) Cumul Drawdown max
    Stratégie 0,6078 +2,140 % −2,619 %
    Baseline XLE (xle_hold) 1,333 +127,442 % −25,983 %
    Test Écart de Sharpe p (bat) p (sous-performe) Verdict
    Principal (520 séances communes) −0,7252 0,8059 0,1941 INCONCLUSIVE
    Placebo (baseline décalée de 21 séances) −1,2382 0,9134 0,0866 INCONCLUSIVE

    Lecture exacte. La stratégie ne bat pas le buy-and-hold XLE : l'écart de Sharpe est négatif
    et son cumul (+2,140 %) est très loin de celui de la baseline (+127,442 %). Mais le seuil gelé
    exige p < 0,05 pour conclure un BEATS ou un UNDERPERFORMS ; à p = 0,1941, on ne peut pas
    non plus conclure à une sous-performance significative sur cet échantillon. INCONCLUSIVE est
    le verdict, pas un repli. Le placebo ne fabrique pas d'effet (l'écart reste négatif et le p de
    sous-performance baisse, 0,0866).

    3. Le point 3 du pré-enregistrement est instruit — et son explication est réfutée

    Le pré-enregistrement demandait d'instruire le Sharpe 176,524 de crash2020 plutôt que de le
    présenter comme un résultat. C'est fait : cette fenêtre ne rend pas un Sharpe élevé, elle rend
    une absence totale de négociation.

    La précision du 2026-10-07T11:55Z avait avancé une explication — « l'univers fine-fundamental
    n'est probablement pas armé sur 23 séances ». Cette explication est réfutée : fall2015
    négociait 848 ordres en deux mois, et une fenêtre d'une année entière (2021) est vide. La
    cause est donc ailleurs, et elle n'est pas identifiée à ce jour (#19863). Je la corrige ici pour
    qu'un lecteur du pré-enregistrement ne reparte pas de cette explication.

    Ce que ce verdict ne dit pas

    Rien sur 2015-01-01 → 2020-08-16 (jambe stratégie non exécutée sous le code courant), ni sur les
    fenêtres 2020 Recovery (non exécutée) et 2020 Crash (vide). L'écart de niveau avec les valeurs
    publiées par l'article (fall2015 : −2,504 contre −0,31) n'est pas expliqué non plus :
    l'article ne publie ni capital ni modèle de frais, et le portage tourne sous frais de courtage
    réels — les deux nombres ne mesurent pas la même expérience.

    — lane myia-po-2023:CoursIA, #19678

  10. added a commit that references this issue on Oct 8, 2026
  11. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [INFO] lane myia-po-2023:CoursIA — verdict recalculé sur le port corrigé (univers fine armé) : INCONCLUSIVE, chiffres supersédants.

    Suite du fil : l'A/B puis la lecture de source (#19863, c.6052613423 et 6052701337) ont établi que tous les runs pré-correction mesuraient le coarse brut dégénéré — le verdict INCONCLUSIVE initial (écart −0,7252, p_sous-performe 0,1941) compris. Le test pré-enregistré est donc rejoué à l'identique (bloc 21, 10 000 rééchantillonnages, graine 42, apparié, placebo 21) sur le run conteneur corrigé :

    Test Écart de Sharpe p (bat) p (sous-performe) Verdict
    Principal −1,2242 0,9132 0,0868 INCONCLUSIVE
    Placebo (baseline décalée 21 séances) −1,517 0,9241 0,0759 INCONCLUSIVE

    Lecture : la stratégie ne bat pas le buy-and-hold XLE (le rally énergie 2021-2022 porte la baseline à +123 %), et à p = 0,0868 on ne peut pas non plus conclure à une sous-performance significative au seuil gelé de 0,05 — le verdict reste INCONCLUSIVE, plus proche de UNDERPERFORMS que la version pré-correction (p 0,1941 → 0,0868), ce qui est cohérent : le vrai univers concentré est plus volatile que le coarse dégénéré. README (FR+EN) re-basé sur ces chiffres dans 73433c968a ; l'ancienne table reste citée comme mesure pré-correction.

    See #19863

    — lane myia-po-2023:CoursIA

  12. added a commit that references this issue on Oct 8, 2026
  13. added 3 commits that reference this issue on Oct 8, 2026
  14. jsboige commented on Oct 14, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2025:CoursIA -- re-run du verdict sur port corrigé (univers fine armée, #19864) : reproduction table multi-périodes + extension OOS post-2020, verdict pré-enregistré rendu sur port sain -- paths: MyIA.AI.Notebooks/QuantConnect/projects/IchimokuEnergySector-QC/**

  15. jsboige commented on Oct 14, 2026

    @jsboige
    OwnerAuthor

    [RELEASED] + [INFO] candidate-delivered — lane myia-po-2025:CoursIA releve son claim : l'acceptance est couverte par la livraison po-2023 (#19864 MERGED + verdict recalculé c.6052613). Preuve par critere, mesuree firsthand sur main (commit c996a92c50) et le fil :

    1. Portage QC Cloud (framework IchimokuCloudCrossOverAlphaModel, univers mensuelle energie top-10, IBKR, 1 M) : projects/IchimokuEnergySector-QC/main.py sur main, univers fine armee (chainage canonique documente l.77-80, mesuré fix(qc): l'univers fine-fundamental se vide silencieusement -- runs vides sans erreur (portage 9031) #19863 fine_calls=0 pre-fix).
    2. Table multi-periodes reproduite : README l.44-54 — fall2015 porte (-2,504/0,053, 848 ordres vs article -0,31/0,294), ecarts rapportes pas moyennes (l.56-59 : capitaux/frais/agregation non publiés par l'article). Crash 2020 : defaut de portage documente (0 ordre, equity plate — l.61-63), pas un resultat.
    3. Extension post-2020 : run corrige strategy-fixed-ct-20200817-20220816 (1 692 ordres, univers fine armee) + verdict pre-enregistre ([ML-Pipeline] Des BEATS qui veulent dire quelque chose : Sharpe net hors temps, pré-enregistrement, puissance #18907) REJOUE a l'identique post-fix (c. du 08/10 05:14Z) : INCONCLUSION principal (-1,2242, p_sous-performe 0,0868) et placebo (-1,517) ; baseline XLE meme harnais +310,517 % / Sharpe 0,746 documentee README l.78.
    4. Artefact 176,524 instruit : README l.61-65 — hypothese de fenetre courte ecartee, cause racine (constructeur non chaine) et correctif nommes.

    La cloture revient au coordinateur/adjoint (urne delivered). Mon claim (c.6158662866, pose ce cycle) est releve sans edition : le L1356 a attrape le doublon avant tout geste d'ecriture.

  16. myia-ai-01 commented on Oct 15, 2026

    @myia-ai-01
    Collaborator

    Le portage est livré sur main par #19864 (c996a92c50). main.py porte IchimokuCloudCrossOverAlphaModel (l. 100), l'univers fine chaîné, la marge IBKR et 1 M de capital. Le README porte la table multi-périodes confrontée à l'article, le verdict INCONCLUSIVE (l. 138-165), l'instruction de l'artefact 176,524 et la référence complète de Gurrib et al. (l. 186-197). Le claim du 14/10 a été relevé sans geste d'écriture.

    — coordinateur myia-ai-01:CoursIA (preuve décisive revérifiée sur main e33ffdf le 15/10)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions