Skip to content

QC InverseVolatility-Rank : les chiffres publiés décrivent le code du projet QC Cloud, pas le main.py du dépôt #19018

Description

@jsboige

Constat fait pendant la tranche 2 de #18900 (chapitre 06, exemple 11).

Ce qui est mesuré

La page qc-strategies-status.md donne pour InverseVolatility-Rank : « pleine période (1629 j.) ; Sharpe 0.124 ; CAGR 4.13 % ; MaxDD 41.0 % ; PSR 1.9 % ». Le README du projet reprend le Sharpe et le CAGR et cite le projet QC Cloud 29463533.

Le main.py de ce projet QC (sha256 a151a0ef01ae50d2f0d102468d8004aad4ed71c9122d0378c3c47c9424fabb95) diffère de projects/InverseVolatility-Rank/main.py du dépôt par deux lignes :

--- projet QC 29463533
+++ dépôt
-        self.set_start_date(2018, 12, 31)
+        self.set_start_date(2015, 1, 1)
+        self.set_brokerage_model(...)

Le rejeu de #18900 a exécuté ce code-là, à l'octet près (projet 37309271, backtest a30271d032a6f4e54c2f2ed3bbb90381). Il redonne exactement Sharpe 0,124, CAGR 4,128 % et pire baisse 41,0 %, sur 1629 jours de cotation. Seul le PSR change : 0,8 % au lieu de 1,9 %.

Conclusion : les chiffres de la page de statut et du README décrivent le code du projet QC, pas celui du dépôt. Aucune mesure de la version du dépôt (début au 2015-01-01, modèle de courtage explicite) n'est citée.

Ce qui reste à faire

  1. Mesurer la version du dépôt sur QC Cloud, puis mettre la page de statut et le README à jour en datant la fenêtre ; ou bien aligner le dépôt sur le code mesuré. Dans les deux cas, le chiffre publié doit correspondre au code publié.
  2. Vérifier si d'autres projets sont dans le même cas. Indice déjà relevé par [QC][livre] Comparer les résultats annoncés par le livre et nos reproductions, ch. 06 à 08 #18900 : pour PCA-StatArbitrage, la page de statut date sa mesure de 2015-2026, alors que le code du dépôt s'arrête au 2024-01-01. La vérification consiste à comparer, pour chaque projet dont le README cite un projet QC Cloud, le main.py de ce projet au main.py du dépôt.

La comparaison livre/reproductions n'est pas bloquée par ce constat : elle porte sur les rejeux, dont le code est publié avec son sha256.

See #18900

Activity

  1. jsboige commented on Oct 3, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] #19018 — myia-po-2026:CoursIA 2026-10-03T21:52Z — voie (a) : backtest QC Cloud de la version dépôt (2015-01-01 + brokerage model), publication des chiffres mesurés README + qc-strategies-status, sweep du point 2 en sondage

  2. jsboige commented on Oct 3, 2026

    @jsboige
    OwnerAuthor

    Sweep point 2 — cloud vs dépôt, fenêtres et versions (2026-10-03, lane myia-po-2026)

    Méthode : pour chaque README citant un « Cloud project ID » réel (10 projets, les 34 autres = « None (local only) »), lecture du main.py côté QC Cloud (MCP quantconnect) et comparaison avec le main.py du dépôt (dates extraites grep insensible à la casse — snake_case ET CamelCase).

    Verdict par projet

    Projet ID Cloud Fenêtre dépôt Fenêtre Cloud Verdict
    InverseVolatility-Rank 29463533 2015-01-01 → 2024-04-01 (IBKR margin, cash 100 M$) 2018-12-31 → 2024-04-01, sans brokerage (cash 100 M$) DIVERGENT — mêmes paramètres (multiplier 2.0, cap 15 %, hebdo, label 6 j) mais start +3,9 ans et brokerage IBKR absents côté Cloud ; chiffres publiés décrivent le code Cloud ; backtest de la version dépôt livré (projet 37313767, voir PR)
    Chronos-Foundation-Forecasting 29443479 2015 → 2026-01-01 (v2 : n_est 50, lr 0.05) 2015 → 2026-03-01 (v2b : n_est 80, lr 0.03, min_samples_leaf 8) DIVERGENT — le Cloud porte v2b, le dépôt v2 ; le README cite « Sharpe (v2) 0.253 » = version dépôt, l'ID Cloud ne reproduit plus ce chiffre
    ML-RandomForest 29434751 2015 → 2024-12-31 (v3) 2015 → sans end date (v3) DIVERGENT — fenêtre Cloud ouverte (= aujourd'hui au run) vs dépôt borné 2024-12-31 ; Sharpe 0.68 / CAGR 20.1 % / MaxDD 36.4 % non reproductibles sur le fichier dépôt tel quel
    ML-SVM 29434752 2015 → 2024-12-31 (v3) 2015 → sans end date (v3) DIVERGENT — même pattern ; Sharpe 0.147
    ML-XGBoost 29434753 2015 → 2024-12-31 (v2) 2015 → 2024-12-31 (v2) OK — fenêtres identiques ; README déjà conforme (backtest frais 2026-08-06 : 0.787 / 19.49 % / 35.90 %, 2516 j., le docstring périmé « (2015-2026) 0.566 » y est explicitement retiré)
    Multi-Layer-EMA 28433748 2018-01-01 → 2024-12-31 2018-01-01 → 2024-12-31 OK
    Stoploss-Volatility-ML 29463529 2015 → 2026-03-01 2015 → 2026-03-01 OK
    Trend-Following 28797562 2015 → 2024-12-31 (v7) 2015 → 2024-12-31 (v7) OK
    TrendStocks-Alpha 28885507 2015 → 2024-12-31 2015 → 2025-01-01 quasi-identique (écart 1 jour)
    DualMomentumNoTLT 31244186 2015 → 2024-12-31 2015 → 2024-12-31 OK
    PCA-StatArbitrage 29461658 2015 → 2024-01-01 (dates auteur) 2015 → 2026-03-01 Ligne statut corrigée par la PR (l.409 datait « 2015–2026 » = fenêtre du code Cloud 29461658, pas du dépôt) — le README du projet étiquette déjà chaque métrique par fenêtre (0.205 @ 2018-2025 IBKR aligné #1630 vs 0.399 précédent @ 2015-2024 auteur) : c'est le modèle à suivre

    Lecture d'ensemble

    • 4 divergences réelles (InverseVolatility, Chronos, ML-RF, ML-SVM) + 1 principale traitée par PR dédiée (InverseVolatility). Les 3 autres suivent deux patterns :
      1. Version drift (Chronos) : le projet Cloud a évolué (v2→v2b) après publication des chiffres ;
      2. Fenêtre ouverte (ML-RF, ML-SVM) : pas de SetEndDate côté Cloud → un run « aujourd'hui » couvre 21 mois de données de plus que le fichier dépôt.
    • Les 6 autres projets cloud-vs-dépôt concordent (fenêtres et versions identiques au marker près).
    • Pattern de correction recommandé (déjà appliqué par PCA-StatArbitrage) : chaque métrique du README porte sa fenêtre datée + la version + l'ID du run qui l'a produite ; quand le code Cloud diverge, l'annoter explicitement plutôt que laisser l'ID implicite.
    • Détail observé au passage : le dépôt mélange set_end_date (snake) et set_end_date/SetEndDate (Camel) dans un même fichier (ML-RandomForest lignes 22-23) — fonctionnel chez QC mais piégeux pour tout grep d'audit (mon premier passage a raté les dates CamelCase).

    Suivi

    • InverseVolatility-Rank : mesures de la version dépôt livrées par PR docs(qc,#19018): InverseVolatility-Rank — mesurer la version dépôt (0.529 @ 2015-2024 IBKR) + fenêtres datées #19024 (backtest QC Cloud projet 37313767, fenêtre 2015-01-01 → 2024-04-01, IBKR MARGIN : Sharpe 0.529, CAGR 14.86 %, MaxDD 40.5 %, PSR 3.34 %, 2865 j.) ; README + page de statut datés.
    • PCA-StatArbitrage : ligne statut l.409 annotée par la même PR (« fenêtre du code Cloud 29461658, 2015-01-01 → 2026-03-01 »).
    • Chronos / ML-RF / ML-SVM : divergences documentées ci-dessus ; correction (re-mesure ou annotation) = travail séparé si souhaité.
  3. jsboige commented on Oct 3, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2026:CoursIA -- PR #19024 (commit eeae013) : mesure version depot (projet Cloud 37313767, backtest 8747c1815d5e752249c743477bbcfd67, Completed) + README fenetres datees + lignes statut InverseVolatility/PCA annotees + sweep point 2 complet en commentaire precedent (10 IDs Cloud compares firsthand). Closes via PR body.

  4. jsboige commented on Oct 3, 2026

    @jsboige
    OwnerAuthor

    Correction du sweep (2026-10-04) — lignes ML-RandomForest et ML-SVM. Relecture sur main frais (7c0c46d) : mes lignes du tableau initial citaient les chiffres docstring (0.68 / 20.1 % / 36.4 %) relevés sur la base 089ef57, mais les README actuels portent des backtests frais datés du 2026-08-06 avec fenêtre explicite « Période backtestée : 2015-01-01 → 2024-12-31 » : ML-RandomForest Sharpe 0.819 / CAGR 24.25 % / MaxDD 40.50 % / PSR 14.52 %, ML-SVM Sharpe 0.166 / PSR 0.028 % — chiffres reproductibles sur la fenêtre du dépôt (la fenêtre est posée au lancement du backtest). La divergence résiduelle pour ces deux projets est purement code-level : le main.py Cloud (29434751/52) n'a pas de SetEndDate alors que le dépôt borne au 2024-12-31 — un run lancé sans paramètre de période sur le Cloud couvrirait plus de données, mais les chiffres publiés sont correctement datés. Verdict révisé : divergence doc-résolue / code-mineure, la contrainte « le chiffre publié correspond au code publié » est satisfaite par la ligne de fenêtre explicite. Chronos reste la divergence réelle non annotée → annotation livrée (voir PR liée).

  5. added 2 commits that reference this issue on Oct 4, 2026
  6. added 2 commits that reference this issue on Oct 5, 2026
  7. myia-ai-01 commented on Oct 5, 2026

    @myia-ai-01
    Collaborator

    [COORD] Clôture : les deux points du body sont livrés et vérifiés sur main.

    1. Le chiffre publié correspond au code publié (InverseVolatility-Rank). docs(qc,#19018): InverseVolatility-Rank — mesurer la version dépôt (0.529 @ 2015-2024 IBKR) + fenêtres datées #19024 (fusionnée 2026-10-04T14:12Z) mesure la version du dépôt sur QC Cloud (projet 37313767 ; Sharpe 0.529 sur 2015-01-01 → 2024-04-01, IBKR margin) et date chaque métrique dans le README et la page de statut.
    2. Les autres projets dans le même cas. Le sondage a couvert les 10 READMEs qui citent un ID Cloud (commentaire du 2026-10-03), et sa correction du 2026-10-04 a révisé les lignes ML-RF et ML-SVM. Divergences :

    Le seul résidu est cet écart de code sur ML-RF et ML-SVM. Il ne fausse aucun chiffre publié, et je ne le reporte donc pas dans une nouvelle issue.

  8. added a commit that references this issue on Oct 5, 2026
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