SPB Git

spb/hfmarketdata

Public

Open high-frequency market data platform — FirstRate full-history downloader, DuckDB/Parquet lake, open REST API and React docs platform (www.hfmarketdata.io)

History of scripts Clear filter
page 1
  1. Sun, Sep 6, 2026 4

    1. frd: row groups de 65 536 lignes pour l'intraday + script de réécriture reprenable du lac
      …
      - frd_downloader.csv_to_parquet : ROW_GROUP_SIZE 65536 pour 1min/5min/30min/1hour (déduit du chemin), 1 000 000 pour 1day/options
      - scripts/rewrite_row_groups.py : COPY (read_parquet) → tmp (ZSTD, ROW_GROUP_SIZE 65536) puis os.replace, fichier par
        fichier, manifeste JSON de reprise (state/row_groups.json), --dry-run, --asset, --timeframe, --workers, --max-files,
        --retry-failed ; ignore les fichiers déjà découpés ; vérifie le nombre de lignes avant le swap
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +214
    2. fundamentals: co-déclarants (clé (cik, accn)), poller borné, dictionnaire de couverture
      …
      E1 — edgar_filings : clé primaire composite (cik, accn) + index sur accn. Un numéro
      d'accession est partagé par les co-déclarants (famille Entergy 65984/66901/…) : la PK
      sur accn seule faisait échouer tout _upsert_filings (IntegrityError, 18 entreprises
      jamais ingérées). Migration idempotente (fundamentals/migrations.py) : inline au
      démarrage si ≤ 300 k lignes, sinon avertissement + scripts/migrate_edgar_filings.py à
      lancer avant le déploiement ; l'upsert passe par INSERT … ON CONFLICT DO NOTHING et
      tolère l'ancien schéma pendant la transition. _known_pairs raisonne en paires (cik, accn)
      sans balayer la table ; publish_filing_event produit un événement par co-déclarant.
      
      E2 — poller incrémental : filtre des entrées Atom par TRACKED_FORMS (le flux type=8-K
      renvoie des 8-K/A : Genasys ré-ingéré à chaque cycle pendant 41 h) ; TRACKED_FORMS
      étendu aux amendements et rapports de transition ; garde-fou Redis edgar:seen_accn
      (TTL 7 j) + edgar:failed_accn (3 tentatives) ; companyfacts_404 enregistre quand même
      les dépôts et n'est plus compté comme échec (1 671 « failures » venaient de deux CIK
      sans facts retentés à chaque cycle) ; failure_samples désormais cumulés (plus écrasés
      par un cycle sain) ; index quotidien : jours ouvrables seulement, 403/404 = non publié
      (les master.idx de fin de semaine n'existent pas) ; bulk rebuild seulement si des
      lignes ont changé ; httpx en WARNING dans le script.
      
      E3 — fund_statements.coverage (1,17 Ko × 1,22 M lignes = 1,9 Go) → dictionnaire
      fund_coverage_blob(id, sha1, json) référencé par coverage_id ; lecture hybride
      (JSON inline hérité OU référence) dans service._rows et bulk.build ;
      _replace_statements ne réécrit que si l'empreinte des lignes a changé ;
      scripts/migrate_coverage.py convertit l'existant par lots avec reprise (--vacuum
      optionnel) ; auto_vacuum=INCREMENTAL sur une base jeune + incremental_vacuum dans
      edgar_reconcile.
      
      Tests : tests/test_fundamentals_ingest.py (co-déclarants, boucle du poller, retries,
      échantillons, 403 index, réécriture conditionnelle, dictionnaire, migration).
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 5 files +201 −10
  2. Fri, Sep 4, 2026 5

    1. Simon-Pierre Boucher · 0 files
    2. futures: tables SQLite (roots/contracts/gaps), index des fichiers du lac et backfill idempotent + CLI
      …
      - models.py : futures_roots, futures_contracts, futures_contract_gaps (plan §1.1–1.3 + expiration_source, aliases, timeframes JSON détaillé)
      - lake.py : découverte des fichiers futures_contracts/{tf}/{archive|update}, SQL de fusion dédupliquée sur datetime (update prioritaire)
      - backfill.py : un agrégat DuckDB par répertoire (filename=true), un scan 1day pour volume 20 séances / OI / trous > 3 jours ouvrés, statut, upserts ; modes --roots et --since (contrats touchés ré-agrégés sur tous leurs fichiers)
      - scripts/backfill_contracts.py : CLI (--roots, --since, --today, --json, -v)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +55
    3. Simon-Pierre Boucher · 1 file +14
Menu

Theme