Repository navigation
[QC-research] CAPM Alpha Ranking Strategy On Dow 30 Companies (#15345) #19680
Description
Grain: MED/qc — lane myia-po-2023:CoursIA — prev: MED/qc #19678
Sous-grain de #11698 (Phase 2 — semis manuel : article du sitemap non couvert). Preflight anti-doublon par numéro d'article : gh search issues "15345" = 0 résultat ; greps de voisinage sur projects/STRATEGIES_DETAIL.md et docs/qc/qc-strategies-status.md : « alpha ranking » = 0 occurrence, « dow 30 » = 0, « capm » = 1 unique occurrence qui est l'instrument de vérification de LowBeta-Industries-QC (régression CAPM comme mesure, pas comme signal de trading). L'entrée du comptoir docs/qc/qc-research-seeded.json portait issue: null. Page article vérifiée chargée avant semis.
Article source
- URL : https://www.quantconnect.com/research/15345/capm-alpha-ranking-strategy-on-dow-30-companies/
- Auteur : Jing Wu (INVESTOR — même auteur que l'article 15366 déjà semé [QC-research] Short Term Reversal With Futures (#15366) #18466) ; fil avec Derek Melchin (STAFF) et Ebow (210)
- Catégorie putative : momentum/ranking (CAPM alpha par régression, univers Dow 30)
- Statut : draft / pending review (bannière toujours affichée le 2026-10-07)
Lecture analytique
Ce que l'article annonce
Ranking mensuel par alpha CAPM sur l'univers Dow 30. Chaque premier jour de mois (Scheduled Event, month_start) : récupérer 21 jours de clôtures des 30 composantes Dow + SPY (self.history(...).close.unstack(level=0)), régresser le rendement de chaque action sur celui du benchmark (np.linalg.lstsq), ranger par intercept (alpha), liquider tout et acheter les 2 premiers à 100 % chacun — soit un livre concentré à levier 2× sans couverture ni stop-loss. Composantes Dow listées statiquement (dernier changement 19/03/2015 → date de départ la plus tôt 2015-03-19).
La thèse annoncée : « stocks which beat the market last month will continue to beat the market » — momentum 1 mois sur actions individuelles, que l'article lui-même qualifie d'échec en régime volatile.
Métriques rendues par l'article
Pas de table de résultats — mais une métrique en prose + un événement, tous deux confrontables :
- Test 2015 : rendement −15,463 % (« performed quite poorly »), année volatile (−10 % du 18 au 25 août 2015) ;
- Margin call en janvier — conséquence directe du levier 2× (deux positions à 100 %).
L'update STAFF (Derek Melchin) apporte une version retravaillée : PEP8, fin avril 2024 (donc une fenêtre longue mesurable existe côté STAFF), exposition cible réduite pour éviter les margin calls, security initializer ajouté.
Sources primaires citées
- Wikipédia — Dow Jones Industrial Average (référence de composition, pas une source académique) ;
- Sharpe, William — Nobel lecture 1990 (PDF nobelprize.org) — la théorie CAPM elle-même.
La chaîne d'attribution est générique : Sharpe (1990) fonde le modèle CAPM, mais aucune source ne teste le signal spécifique (ranking mensuel par alpha sur Dow 30). Le claim momentum-1-mois de l'article va contre le consensus académique (le momentum canonique est 12-1 mois ; l'horizon 1 mois penche reversal) — et l'article le mesure lui-même perdant. À la différence de 9031 (#19678, Gurrib 2020 nommément sur le signal), le premier maillon stratégique manque ici.
Défaut mesurable dans le code publié — régression inversée
La prose : « regressed the market excess return against the asset excess return… the slope and intercept will be beta and alpha » (asset = β·marché + α). Le code fait l'inverse :
result = np.linalg.lstsq(returns, benchmark) # résout benchmark ≈ slope·action + intercept
alphas[symbol] = result[0][1]Le design matrix est le vecteur des rendements de l'action, la cible est le benchmark : l'intercept mesuré est l'alpha du benchmark sur l'action, pas celui de l'action sur le benchmark (et l'estimateur de pente est β inversé). Sur 21 points quotidiens fortement bruités, les deux rankings divergent — le signal réellement tradeable par ce code n'est pas celui que la théorie décrit. À porter tel quel (discipline de port fidèle, précédent 15366 divergence a5) puis à documenter, avec en option un bras B « régression dans le bon sens » pour mesurer l'écart — la divergence EST le finding pédagogique.
Différenciation vs bouquet existant
- Mécanisme ranking par alpha de régression : 0 occurrence au bouquet (le « CAPM » existant est un instrument de mesure LowBeta, pas un signal).
- Univers Dow 30 : un seul occupant, PuppiesOfTheDow-QC — mécanisme value-income, pas momentum. Le momentum existant tourne sur ETF sectoriels (MomentumStrategy, AssetClassMomentum-QC) ou facteurs (FamaFrench), jamais sur actions individuelles par alpha.
- Sœur fraîche : ShortTermReversalFutures-QC ([QC-research] Short Term Reversal With Futures (#15366) #18466) = reversal hebdo futures ; ici momentum mensuel actions — la face miroir en equity.
L'article est-il redondant ? NON — mécanisme absent, univers sans occupant momentum, une métrique et un événement (margin call) à confronter.
Verdict
- CONSOLIDATION — aucun projet existant à rouvrir (aucun ranking alpha au bouquet).
- PÉDAGOGIQUE — la régression CAPM comme outil de cours existe déjà via LowBeta ; le notebook de cours n'est pas la sortie naturelle de ce draft.
- NOUVEAU — famille ranking-alpha vierge, coût de port faible (30 actions quotidiennes, rebalancement mensuel,
lstsqnumpy), une métrique en prose (−15,463 % en 2015) + un margin call + la fenêtre STAFF post-2015→2024 : trois cibles de confrontation. Les réserves : draft, pas de table de métriques, source primaire générique (Sharpe = théorie, pas le signal), auteur déjà porté ([QC-research] Short Term Reversal With Futures (#15366) #18466) — elles bornent le claim, elles n'invalident pas le semis : à coût faible et cibles mesurables, le port vaut le coup. - IGNORE — n/a : contrairement à 15366 (zéro métrique, 8 futures, coût défavorable), les axes coût et confrontabilité s'inversent.
Acceptance du port (pour la lane qui le prendra)
- Porter le code publié tel quel (régression inversée incluse, documentée en tête de fichier), frais IBKR marge, cash 1 M, fenêtre 2015-03-19 → 2026 (composantes statiques de l'article ; documenter la survivorship bias des composantes figées 2015).
- Bras A (code article) : confrontation directe — le rendement 2015 (fenêtre complète vs le −15,463 % de l'article), le margin call de janvier (présent/absent sous IBKR), et le comportement post-2015 inédit.
- Bras B (fix régression) : même harnais, régression dans le sens CAPM (action sur benchmark) — mesurer si le ranking et les résultats divergent (c'est le finding).
- Bras C (update STAFF) : exposition réduite par position (ex. 0.5/0.5 au lieu de 1/1) — reproduire la variante Derek Melchin.
- Benchmark SPY sur le même harnais ; verdict
BEATS/NO BEATS/INCONCLUSIVEécrit par bras, multi-seed n/a (aucun entraînement stochastique — les LSTSQ sont déterministes, le point C de pr-review-discipline §C ne s'applique pas). - Référence Sharpe (Nobel lecture 1990) citée dans le README ; absence de source primaire sur le signal écrite dans le README (chaîne d'attribution [EPIC] Verification des citations arXiv dans les notebooks — 83 notebooks, 107 IDs, partition par famille #11168 — le maillon stratégique manque).
Acceptance locale (semis)
- Article lu en entier (corps + fil, statut, auteur, update STAFF, question Ebow sans réponse)
- Voisinage re-vérifié (greps : famille absente, un seul occupant Dow value-income)
- Sources primaires identifiées — génériques (Sharpe 1990 = théorie), maillon stratégique absent, dit tel quel
- Défaut de code identifié à la lecture (régression inversée) avec extrait cité
- Verdict coché avec justification (NOUVEAU — axes coût/confrontabilité inversés vs 15366)
- Métriques de l'article recopiées ci-dessus pour confrontation future
Part of #11698
Activity
jsboige commentedon Oct 7, 2026
[CLAIMED] lane myia-po-2024:CoursIA-3 -- port QC des trois bras (article, regression corrigee, exposition reduite STAFF) + benchmark SPY, regle de verdict preinscrite ici avant le premier backtest -- paths: MyIA.AI.Notebooks/QuantConnect/projects/CAPMAlphaRankingDow30-QC/**
jsboige commentedon Oct 7, 2026
Règle préinscrite — lane myia-po-2024:CoursIA-3, avant le premier backtest
Port :
MyIA.AI.Notebooks/QuantConnect/projects/CAPMAlphaRankingDow30-QC/main.py. Code de l'article repris tel quel (régression inversée incluse), frais IBKR, compte sur marge, capital 1 M, lookback 21 séances, rééquilibrage au premier jour de bourse du mois. La liste des 30 titres n'est pas dans le texte de l'article (seulement dans son backtest joint) : j'utilise la composition du Dow au 2015-03-19, figée. Biais du survivant assumé et écrit dans le README.Passages
spyarticle(bras A)capm(bras B)staff(bras C)y2015<bras>_fees2Verdict par bras (A, B, C), contre
spystrategy_metrics.sharpe.voltarget_strategy_verdict.circular_block_diff, réglages par défaut). Correction de Holm sur les trois bras.Confrontations à l'article (descriptives, hors verdict)
Rendement 2015 :
y2015comparé au −15,463 % publié ;REPRODUIT si l'écart est ≤ 3 points de rendement, ÉCART sinon.
Appel de marge : présent ou absent en janvier (2015 dans
y2015, 2016 dansarticle). Lu par le compteuron_margin_callet ses dates dans les statistiques de fin.Bras B contre bras A (le constat de la régression inversée) :
SEL ...) ;Résultats lus seulement à
completed: true; traces hors dépôt (QC-traces/19680-capm-alpha-ranking).jsboige commentedon Oct 7, 2026
Ajout à la règle préinscrite — lane myia-po-2024:CoursIA-3. Posté après lecture des passages A/B/C, avant tout passage du bras ajouté.
Ce que les journaux ont montré
Les trois bras préinscrits sont terminés et lus à
completed: true. Leur verdict suit la règle sans changement, et il sera publié avec la PR. Les journaux des bras à levier 2 (article,capm) portent en revanche des refus d'ordres pour pouvoir d'achat insuffisant. Le brasstaff(0,5 par ligne) n'en porte aucun.articlecapmMécanisme. En résolution journalière, l'ordre de vente part à la clôture. Au moment des achats, les anciennes lignes occupent donc encore la marge, et à levier 2 l'achat d'un nouveau titre est refusé. Le bras
articlepasse ainsi 57 mois sur 138 entièrement en liquidités. Les bras A et B mesurent donc le code tel qu'il tourne aujourd'hui sur Lean, pas la règle à levier 2 que l'article décrit. Le bras C, sans refus, est la seule mesure propre de la règle, à levier 1.Bras ajoutés
Paramètre
timing=intent: ventes inchangées le jour du rééquilibrage, achats à la séance suivante, une fois les ventes exécutées. Le signal et les poids sont ceux des bras A et B.intent_articletiming=intentintent_capmtiming=intentLecture : descriptive, hors verdict et hors Holm.
Le verdict A/B/C préinscrit reste celui qui fait foi pour cette issue.
jsboige commentedon Oct 7, 2026
Résultats — lane myia-po-2024:CoursIA-3. PR : #19690.
Verdict préinscrit (c.6033649014), appliqué sans changement
articlecapmstaffFenêtre 2015-03-19 → 2026-09-30, 2 900 séances communes. Aucun bras n'est significatif, donc aucun passage à frais doublés n'a été lancé.
Bras ajoutés
timing=intent(descriptifs, hors Holm, inscrits en c.6034039690)intent_articleintent_capmAttendre que les ventes soient exécutées ne suffit pas. Le modèle IBKR de Lean refuse encore une ligne entière un mois sur deux : deux lignes à 1,0 dépassent d'un rien le pouvoir d'achat. Mieux investie, la règle fait moins bien. Aucun appel de marge non plus dans ces bras. Le bras
staff, sans aucun refus, reste la mesure la plus propre de la règle, et il ne bat pas SPY.Correction du commentaire d'ajout
Le commentaire c.6034039690 écrivait « 57 mois sur 138 entièrement en liquidités » pour le bras
article. Le compte mesuré est 56. Le tableau des refus reste juste (57 mois à deux ordres refusés), mais dans l'un de ces mois les deux refus ne portent qu'une ligne au total (écart de 1,04 ligne à la cible) : le portefeuille y garde une ligne presque pleine. Le README de la PR porte le bon chiffre.Confrontations à l'article
y2015), soit −12,5 points contre le −15,463 % publié, donc ÉCART. Le bras A sur 2015-03-19 → 2015-12-31 fait −17,7 %, soit −2,3 points, dans le seuil.articleetcapmdiffèrent 137 mois sur 138. L'écart de Sharpecapm−articlevaut +0,11, IC [−0,73 ; 0,91], p 0,39.Traces hors dépôt :
G:\Mon Drive\MyIA\IA\QC-traces\19680-capm-alpha-ranking.Fix(qc,#19680): README CAPM -- reformuler l'ecart a la cible du 57e m…
docs(qc,#11698): tampon compteur semis -- articles 9031 (#19678) et 1…
feat(qc,#19680): port CAPM alpha ranking Dow 30 — NO BEATS ×3, levier…