Skip to content

[QC] Substituer EDGAR + inventaire de datasets ouverts pour la jambe backtest Filing-Language-Stability #19457

Description

@jsboige

Part of #15544

Contexte

Décision user du 2026-10-06 (registre d'arbitrage po-2023) sur #15544 : option (c) — renoncer au dataset payant Brain Language Metrics on Company Filings, substituer la source par EDGAR, et élargir l'inventaire de datasets ouverts.

Directive complémentaire du user :

« faire une recherche sur les datasets ouverts disponibles (kaggle etc.). On a un convertisseur qu'on peut personnaliser pour prendre en charge de nouveaux formats et générer des fichiers compatibles QC »

Ce qui est demandé

  1. Inventaire des datasets ouverts pertinents pour une stratégie « stabilité du langage des dépôts / filings » : EDGAR (SEC, public), Kaggle, archives publiques. Pour chacun : licence, format, granularité, coût d'ingestion. Sortie = un tableau sur cette issue, pas un fichier dans le dépôt.
  2. Généraliser le convertisseur d'ingestion pour prendre en charge les nouveaux formats et émettre des fichiers consommables par QuantConnect (custom data). Le point d'entrée vivant est aujourd'hui la famille scripts/datasets/ (download_qc_data.py, stitch_crypto.py, build_panier_anti_bias.py) et le patron de custom data class QC (cf MyIA.AI.Notebooks/QuantConnect/Python/QC-Py-03-Data-Management.ipynb, QC-Py-16-Alternative-Data.ipynb) — le grain doit nommer l'organe exact avant de le personnaliser (organ-first).
  3. Re-mesurer la jambe backtest du projet QC 36331851 (Filing-Language-Stability, porté par feat(qc,#15392): Filing-Language-Stability -- port qc-research #20966 (Lazy Prices long leg) #15421) sur la source substituée — c'est la condition qui transforme une citation d'article en mesure.

Critères d'acceptation

  • Tableau d'inventaire des sources ouvertes publié sur cette issue (≥ 3 sources, licence + format + coût d'ingestion).
  • Convertisseur généralisé avec au moins un test d'ingestion d'un format nouveau → fichier QC-compatible.
  • Un backtest du projet 36331851 rend des sélections non nulles sur la source substituée, avec Sharpe/CAGR/MaxDD rapportés (verdict honnête, pas « promising »).

Références

Activity

  1. jsboige commented on Oct 6, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2023:CoursIA — inventaire des datasets ouverts (critère 1) + généralisation du convertisseur d'ingestion QC-custom-data (critère 2). Le critère 3 (backtest sur source substituée) est déjà mesuré : la variante EDGAR libre est livrée et le README porte les trois runs Cloud OOS 2022-2024 (EDGAR top 2 Sharpe 0,151 ; panier égal 0,429 ; SPY 0,193 ; verdict NO BEATS).

    Vérification firsthand de l'état à l'ouverture : #15584 (EDGAR-1, MERGED) a livré edgar_signal.py + main_edgar.py + tests CPU ; write_cloud_module (edgar_signal.py:642) est l'organe convertisseur — unique dans le dépôt (grep -rln write_cloud_module = 0 autre occurrence hors projet).

    -- paths: scripts/datasets/, MyIA.AI.Notebooks/QuantConnect/projects/Filing-Language-Stability/

  2. jsboige commented on Oct 6, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: MED/docs #19549

    [DELIVERED] critère 2 — convertisseur généralisé : PR #19618.

    Ce qui est livré

    scripts/datasets/build_qc_custom_data.py lit csv/tsv/json/jsonl et émet un module .py consommable par un projet QC Cloud (constante de données, plus la classe PythonData dérivée sur --class-name). Le format jsonl/ndjson n'était lu par aucun script de scripts/datasets/ avant ce commit : c'est le format nouveau rendu consommable. Le convertisseur EDGAR du projet reste en place et inchangé.

    Preuve d'exécution (hermétique, 0 réseau) :

    python -m pytest scripts/datasets/tests/test_build_qc_custom_data.py -q   -> 25 passed
    python -m pytest scripts/datasets/tests/ -q                              -> 77 passed
    

    Le test décisif exécute réellement la classe PythonData émise contre un faux AlgorithmImports (GetSource rend un SubscriptionDataSource LocalFile ; Reader rend un objet typé ; ligne incomplète ignorée sans erreur) — l'artefact est consommé, pas seulement écrit.

    État des trois critères de l'issue

    # Critère État
    1 Tableau d'inventaire des sources ouvertes (≥ 3) publié sur cette issue en cours — posté dans le commentaire suivant
    2 Convertisseur généralisé + ≥ 1 test d'ingestion d'un format nouveau livré — PR #19618
    3 Backtest du projet 36331851 sur la source substituée, sélections non nulles + Sharpe/CAGR/MaxDD déjà satisfait avant ce grain — variante EDGAR libre livrée par #15584, trois runs Cloud OOS 2022-2024 (EDGAR top 2 Sharpe 0,151 / 66 ordres ; panier égal 0,429 ; SPY 0,193), verdict NO BEATS, mesuré et documenté dans le README du projet

    Le critère 3 n'a demandé aucune re-mesure : son verdict est négatif et honnête (« la sélection linguistique EDGAR ne bat pas le panier égal sur ce panier de cinq titres »), et le README borne explicitement la portée (l'univers de 100 titres de l'article n'est pas reproduit).

  3. jsboige commented on Oct 6, 2026

    @jsboige
    OwnerAuthor

    [INVENTAIRE] critère 1 — datasets ouverts pour une stratégie « stabilité du langage des dépôts »

    Lane myia-po-2023:CoursIA. Conformément à l'acceptance (« Sortie = un tableau sur cette issue, pas un fichier dans le dépôt »), le tableau vit ici et n'est committé nulle part.

    Colonne « Preuve de licence » : citation verbatim de la source officielle + URL. La colonne « Re-vérifié » distingue ce que j'ai refait moi-même à l'instant (requête directe) de ce qui n'est rapporté que par la citation — aucune ligne ne porte une licence devinée.

    # Source URL Licence (nom exact) Format Granularité Coût d'ingestion Preuve de licence (verbatim + URL) Re-vérifié
    1 SEC EDGAR — full-text search + Submissions API + index/bulk https://www.sec.gov/edgar/search/ · https://www.sec.gov/os/accessing-edgar-data · https://data.sec.gov/submissions/ Information publique du gouvernement US HTML/TXT des dépôts ; JSON (Submissions API) ; index TXT/XML ; archives daily tar.gz Un document de dépôt (10-K, 10-Q, 8-K, amendements) ; full-text depuis 2001, index depuis 1993 Découverte quasi gratuite ; plafond 10 req/s, User-Agent déclaré obligatoire ; corpus HTML 10-K/10-Q ≈ 100-200 Go + parsing HTML/XBRL https://www.sec.gov/privacy.htm — « Information presented on sec.gov is considered public information » ; https://www.sec.gov/os/accessing-edgar-data — « Current max request rate: 10 requests/second. » OUI (HTTP 200, deux citations reproduites)
    2 SEC Financial Statement Data Sets (ZIP trimestriels) https://www.sec.gov/data-research/sec-markets-data/financial-statement-data-sets Information publique du gouvernement US (avec clause de non-garantie d'exactitude) ZIP de TSV en format aplati (sub.txt, num.txt, pre.txt, tag.txt) Un fait numérique par ligne ; par société et trimestre ; 2009 Q1 → 2026 Q2 (70 trimestres) ≈ 70 ZIP, de ~13 Ko (2009q1) à ~122 Mo (2025q3), ~2-3 Go au total ; TSV direct, aucun parsing Modèle d'URL vérifié : https://www.sec.gov/files/dera/data/financial-statement-data-sets/2026q2.zip — page officielle https://www.sec.gov/data-research/sec-markets-data/financial-statement-data-sets OUI (page 200 ; 2009q1.zip → HTTP 200, Content-Length: 13540, conforme aux ~13 Ko annoncés)
    3 SEC Financial Statement and Notes Data Sets (ZIP) https://www.sec.gov/data-research/financial-statement-notes-data-sets Information publique du gouvernement US ZIP de num.tsv + txt.tsv (chiffres et texte des notes) Texte des notes + faits numériques ; mensuel récent, trimestriel au-delà (2009 → 2026) Plus volumineux que #2 (le texte domine) : dizaines de Go sur toute la période ; TSV direct Page officielle — « the data sets are intended to assist the public in analyzing data contained in Commission filings » ; « we cannot guarantee the accuracy of the data sets » OUI (page 200)
    4 Kaggle — SEC EDGAR Filings Index (wilmerhenao) https://www.kaggle.com/datasets/verracodeguacas/sec-edgar-filings-index CC0: Public Domain Parquet (filing_index, company_filing_edges, manifest) Une ligne par dépôt (CIK, nom, type de formulaire, date, accession number, URL SEC) ; rafraîchi régulièrement ~45 Mo, parquet prêt à joindre ; index seul — le texte reste à récupérer via les URL fournies API Kaggle : licenseName = « CC0: Public Domain », ownerName = « Wilmer E. Henao » — https://www.kaggle.com/api/v1/datasets/view/verracodeguacas/sec-edgar-filings-index OUI (champ licenseName lu dans l'API)
    5 Kaggle — SEC 10-K/10-Q Risk Factors & MD&A Text (cybermaxtools) https://www.kaggle.com/datasets/cybermaxtools/riskroll-sec-10k-10q-sections (miroir HF : CyberMax-tools/riskroll-sec-10k-10q-sections) CC0: Public Domain Parquet (sections-YYYY-MM, filings-YYYY-MM) Une ligne par section extraite : Risk Factors (Item 1A), MD&A, Market Risk, Business, Cyber 1C ; snapshot mensuel ~38 Mo ; texte déjà extrait et nettoyé (~20,4 M de mots sur le snapshot) API Kaggle : licenseName = « CC0: Public Domain » — https://www.kaggle.com/api/v1/datasets/view/cybermaxtools/riskroll-sec-10k-10q-sections OUI (champ licenseName)
    6 Kaggle — Financial Statement Extracts (compte officiel SEC) https://www.kaggle.com/datasets/securities-exchange-commission/financial-statement-extracts CC0: Public Domain JSON dérivé des fichiers DERA (num.txt etc.) Faits numériques des états financiers ; 2015-2017 seulement (jeu figé) 3,7 Go ; direct API Kaggle — licenseName = « CC0: Public Domain », ownerName = « Securities and Exchange Commission » RAPPORTÉ (cité, non refait)
    7 EDGAR-CORPUS (eloukas, Hugging Face) https://huggingface.co/datasets/eloukas/edgar-corpus (+ outil https://github.com/nlpaueb/edgar-crawler) Apache-2.0 Chargeable via datasets (JSON) Un 10-K complet, texte conservé (tables retirées) ; 1993-2020 ; ~220 375 documents 40,7 Go direct ; déjà parsé (pas de parsing HTML) API HF : tag license:apache-2.0 — https://huggingface.co/api/datasets/eloukas/edgar-corpus OUI (tag de licence lu dans l'API)
    8 Alpha Vantage (benchmark marché, palier gratuit) https://www.alphavantage.co/ EULA Alpha Vantage — personnel, non commercial JSON / CSV (API) Barres OHLCV (daily, intraday, ajustées) + fondamentaux/techniques Requêtes API ; quota gratuit limité par jour (À VÉRIFIER au moment de l'usage, non mesuré ici) https://www.alphavantage.co/terms_of_service/ — « Alpha Vantage grants the right to install, use, access, display and run the software ... for personal, non-commercial use » RAPPORTÉ
    9 Stooq (benchmark marché) https://stooq.com/db/ Usage personnel uniquement, usage commercial interdit CSV (ZIP par marché) Barres journalières OHLCV par instrument, plusieurs décennies Téléchargement bulk par marché (quelques centaines de Mo) ; anti-bot à gérer Licence non reproduite par ma requête (page chargée HTTP 200, texte de licence non retrouvé dans le HTML servi) — citation rapportée : « This data is intended solely for personal use. Any commercial use is prohibited. » NON REPRODUIT — à confirmer avant usage
    10 Kenneth R. French Data Library (Fama-French, benchmark) https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html Copyrighté, aucune licence de réutilisation explicite TXT/CSV zippés Facteurs (3/5 facteurs, momentum) mensuel/hebdo/journalier + portefeuilles de recherche ZIP légers (Mo), parse direct Page — « Copyright Eugene F. Fama and Kenneth R. French » ; aucun texte d'autorisation de redistribution sur la page À VÉRIFIER pour tout usage autre que la recherche

    Ce que ce tableau dit pour cette stratégie

    La jambe de signal a besoin de texte de dépôt, pas de chiffres : ce sont les lignes 1, 5 et 7 qui la servent directement.

    • feat: add stiegler or tools #1 (EDGAR) est la source canonique et déjà branchée (edgar_signal.py) ; son coût est le parsing HTML, pas l'accès.
    • création du doscier projet #5 est le raccourci le plus efficace : les sections Item 1A déjà extraites — exactement la matière que edgar_signal.extract_item_1a reconstruit à la main — en CC0 ; son snapshot est en revanche court (fenêtre de quelques mois), donc il complète feat: add stiegler or tools #1 plutôt qu'il ne le remplace.
    • Louise notebook #7 donne le corpus historique déjà parsé (1993-2020) pour un entraînement ou une calibration longue, mais s'arrête en 2020 : incompatible avec une fenêtre OOS 2022-2024 sans feat: add stiegler or tools #1.

    Les lignes 2, 3 et 6 alimentent la jambe contrôle (états financiers), pas le signal linguistique. Les lignes 8-10 ne sont que des benchmarks de marché : aucune n'est nécessaire, la stratégie les prend déjà via les données QC, et leur licence est la plus restrictive du lot (non commercial / non explicite).

    Sources écartées et pourquoi

    • Nasdaq Data Link (ex-Quandl) — licence par jeu de données, page de conditions non rendue ; séries actions gratuites historiques retirées → aucune licence vérifiable.
    • FRED (St. Louis Fed) — interdit explicitement de « Store, cache, or archive any portion of the FRED® Services or FRED® Content » : incompatible avec une ingestion archivée.
    • Kaggle « BigQuery SEC Filings » — champ licence renvoyé « Unknown » par l'API.
    • Finnhub « Reported Financials », SEC-API.io, IEX Cloud — ToS commerciale / API payante / service fermé.

    Chaînage avec le convertisseur (critère 2)

    Ces sources arrivent en parquet, json, tsv ou JSONL — et une fois téléchargées, PR #19618 les convertit en module .py consommable par le projet QC Cloud, sans réécrire un convertisseur par source.

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

    quantconnect-researchMoissonnage QC research — distillation intelligente

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions