Skip to content

feat(qc,#14091): AssetClassMomentum-QC v2.0 — hedge court gated par corrélation (consolidation article research 21050) - #14095

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/qc-21050-correlation-hedge
Sep 1, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/qc-21050-correlation-hedge

Conversation

@jsboige

@jsboige jsboige commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Grain: MED/qc — lane myia-po-2024:CoursIA — prev: MED/lean #14056

Summary

Consolidation de l'article QuantConnect research #21050 « Cross-Asset ETF Momentum with a Correlation-Based Short Hedge » (Derek Melchin, 2026-07) dans le projet existant projects/AssetClassMomentum-QC/ (sous-issue de l'EPIC #11698, issue #14091, verdict CONSOLIDATION). Le projet v1 (clone QC Strategy Library, 5 ETFs, momentum 12 m, top-3, sans gestion du risque) était Needs-improvement (Sharpe 0.22 / CAGR 6.64 % / MaxDD 28.1 % / PSR 3.8 %, 2018-2025, tranche 3 #1621) — l'article apporte précisément la couverture du risque absente : univers 13 ETFs, momentum multi-horizon 3/6/9/12 m, top-4, et un hedge court -30 % gated par corrélation.

v2.0 — moteur :

  1. Univers 13 ETFs : SPY, IWM, EFA, EEM, IYR, QQQ, LQD, IEF, TIP, GLD, USO, DBC, FXE.
  2. Momentum multi-horizon : moyenne des ROC 3/6/9/12 mois (63/126/189/252 j, RateOfChangePercent).
  3. Top-4 long équipondéré (25 % chacun), rebalance le 1ᵉʳ jour ouvré du mois à 08:00.
  4. Hedge court GATED : corrélation moyenne des 78 paires sur 20 j > celle sur 250 j (régime défavorable) → short -30 % de l'ETF au momentum le plus faible (130 % brut / 70 % net) ; sinon 100 % long-only.

Source primaire : Pauchlyová & Vojtko (2025), Refining ETF Asset Momentum Strategy, Quantpedia / SSRN 5095447 — chaîne d'attribution complète article → papier, convention #11168.

Backtests (§G — QC Cloud MCP, projet 33209767, IB Margin 100 k$)

Métrique Dev 2016-2021 OOS 2022-2026 Full 2016-2026
Sharpe Ratio 0.712 0.035 0.423
CAGR 13.596 % 6.212 % 10.535 %
Max Drawdown 21.800 % 19.800 % 21.800 %
Net Profit 114.996 % ($82 103) 31.159 % ($29 062) 186.431 % ($181 895)
PSR 16.961 % 0.646 % 0.981 %

Runs QC Cloud (projet 33209767, compile 99bd5b8c…) : Dev b930a240… (1511 j., 342 ordres) · OOS f1cc7e4a… (1127 j., 265 ordres) · Full 04cdf09d… (2638 j., 620 ordres).

Référence article (#21050, 2007-07 → 2026-06) : Sharpe 0.498 avec hedge vs 0.451 long-only vs 0.407 SPY. Sensibilité paramètres (grille 5×5) : 24/25 combinaisons battent le SPY, Sharpe 0.40-0.57.

Verdict honnête

  • vs v1 baseline (2018-2025 : Sharpe 0.22 / CAGR 6.64 % / MaxDD 28.1 % / PSR 3.8 %) : gestion du risque nettement améliorée (MaxDD 28.1 % → 21.8 %), Sharpe pleine période ×2 (0.423), CAGR 10.5 % vs 6.6 %.
  • Cohérence avec l'article : Full 0.423 vs article 0.498 (période différente : nous 2016-2026, article 2007-2026 incluant 2008) ; l'article lui-même rapporte SPY 0.407 sur sa période.
  • NO EDGE OOS : l'OOS 2022-2026 tombe à Sharpe 0.035 / PSR 0.65 % — le régime de taux 2022+ défavorable au momentum cross-asset frappe aussi la version hedgée. Le hedge corrélations réduit le drawdown (19.8 % OOS) mais ne restaure pas l'edge.
  • Statut [EPIC] Consolidation QC/Trading — projets, checkpoints, research notebooks, papertrading + dégénériciser ESGF #1621 après consolidation : Needs-improvement (v2.0, amélioré) — PSR < 50 % partout, aucune claim BEATS.

Files

  • projects/AssetClassMomentum-QC/main.py — v2.0 (fix naming : self.universe réservé QCAlgorithm.Universe → self.tickers)
  • projects/AssetClassMomentum-QC/README.md — v2 + métriques + références
  • docs/qc/qc-strategies-status.md — entrée AssetClassMomentum-QC mise à jour

Closes #14091

…relation

Consolidation article QC research #21050 (Melchin 2026-07) dans
AssetClassMomentum-QC : univers 13 ETFs, momentum multi-horizon 3/6/9/12 m,
top-4, hedge court -30% du pire ETF active seulement si corr moyenne 20 j >
250 j (78 paires). Source primaire Pauchlyova & Vojtko 2025 SSRN 5095447.

Backtests QC Cloud (projet 33209767, IB Margin) : Dev 2016-2021 Sharpe 0.712
/ MaxDD 21.8% ; OOS 2022-2026 Sharpe 0.035 / PSR 0.65% (edge non confirm OOS) ;
Full 2016-2026 Sharpe 0.423 / MaxDD 21.8%. vs v1 (Sharpe 0.22 / MaxDD 28.1%) :
risque ameliore, aucune claim BEATS (PSR < 50% partout).

Closes #14091

Co-Authored-By: Claude-Code <noreply@anthropic.com>

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — COMMENT, verdict positif avec 2 observations non bloquantes (contrainte token : COMMENT only, opener jsboige). Code v2.0 lu intégralement au head SHA (main.py 3 fichiers) :

Vérifié conforme :

  • Logique hedge gated : corr_20j > corr_250j → PortfolioTarget(scored[0], -0.30) sur l'ETF au momentum le plus faible, top-4 longs 0.25 chacun → 130 % brut / 70 % net tel que documenté. np.triu_indices(k=1) = bien C(13,2)=78 paires, pas la diagonale.
  • Fix naming self.tickers vs self.universe réservé QCAlgorithm — correct et commenté.
  • Multi-horizon 63/126/189/252 via self.rocp (built-in QC) + warm-up automatique activé.
  • Cohérence interne des durées : 1511+1127=2638 jours de bourse (1512≈6 ans Dev, 1127≈4.47 ans OOS) — les labels calendaires réconcilient.
  • NP% ↔ CAGR réconcilient arithmétiquement (1.13596^6.0≈114.8 %, 1.06212^4.47≈30.9 %, 1.10535^10.48≈185.8 % vs 115.0/31.2/186.4 %).
  • Framing « NO EDGE OOS » (Sharpe 0.035, PSR 0.65 %) conservé dans le tracker qc-strategies-status.md sans claim BEATS — exemplaire.

Observation 1 (à clarifier, non bloquant) : la ligne Net Profit % et la colonne $ ne réconcilient sur aucune base unique : Dev $82 103 sur 100 k$ = 82.1 % ≠ 114.996 % (base implicite $71 394) ; OOS 29.1 % ≠ 31.2 % ($93 268) ; Full 181.9 % ≠ 186.4 % ($97 548). QC calcule $ et % sur la même starting equity par construction — vérifier si les $ proviennent du même run que les % (ou d'une equity de départ différente par run), et le préciser dans le README.

Observation 2 (mineur) : _avg_pairwise_correlation(250) sur les premiers rebalances de 2016 (~21 jours d'historique au 1ᵉʳ février) calcule silencieusement la corr 250 j sur une fenêtre partielle — le gate peut se déclencher sur une corrélation non représentative la première année. Un garde if len(rets) < seuil: skip hedge durcirait la reproductibilité.

Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).

@myia-ai-01
myia-ai-01 merged commit 3d09b29 into main Sep 1, 2026
20 of 21 checks passed
@jsboige
jsboige deleted the feature/qc-21050-correlation-hedge branch September 2, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QC-research] Cross-Asset ETF Momentum with a Correlation-Based Short Hedge (#21050)

2 participants