SPB Git forge

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)

127commits 1branches 0releases
24.7 MBsize
maindefault branch
11 days agolast push
JavaScript 53.7% Python 38.3% CSS 4.6% TypeScript 3.1%

page 3

  1. Fri, Sep 4, 2026 40

    1. fundamentals: tests unitaires, intégration, WebSocket et bulk + fixtures EDGAR réelles tronquées (Apple, Microsoft, Shake Shack), aucun accès réseau (respx)
      …
      - lac synthétique étendu (SHAK, GOOG, GOOGL) ; conftest : edgar_mock + fundamentals_data
      - 46 tests : mapping, calendrier fiscal (Apple Q2 FY2024 = 2024-03-30), priorités/unités, dérivation Q4, restatements/as_of, TTM, formules validées sur les chiffres réels d'Apple, grammaire de filtres, tous les endpoints json/csv/parquet, enveloppes 404/400, bulk 304, WebSocket (auth, abonnement, réception, resume, heartbeat, limite)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 18 files +1,053 −1
    2. Simon-Pierre Boucher committed 20 days ago · 3 files +370
    3. Simon-Pierre Boucher committed 20 days ago · 3 files +170
    4. stream: WebSocket /v1/stream (canal filings) — auth par clé, broker Redis (pub/sub + stream tampon 1000), resume_token, heartbeat 20 s, 5 connexions/clé, comptage des lignes
      …
      - broker.py : publish() avec seq monotone, fakeredis quand HFMD_REDIS_URL=fakeredis://
      - auth.py : délégation à accounts.security si présent, sinon forme hfmd_live_<32>
      - accounting.py : hook set_charger()/charge() pour le module ratelimit (1 ligne par message)
      - routes.py : protocole subscribe/unsubscribe/ping, codes de fermeture 4001/4029, /v1/stream/info
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 5 files +449
    5. fundamentals: ratios (45 formules documentées), service point-in-time, screener, ingestion et routes /v1/fundamentals
      …
      - ratios.py : formules avec docstring, null + raison, render_docs()
      - service.py : statements/facts/ratios/ratios daily (ASOF join DuckDB)/filings/coverage/frames, as_of partout
      - screener.py : grammaire de filtres (< > <= >= = != plages, suffixes k/m/b/t/%) sur fund_latest précalculée
      - ingest.py : univers CIK↔tickers ∩ lac de prix (classes d'actions, historique, radiations), lac de faits Parquet, remplacement des états, couverture, fund_latest, événements Redis, poll Atom + index quotidien
      - routes.py : 8 endpoints + _mapping + _health, formats json/csv/parquet, curseurs, OpenAPI avec exemples Apple réels
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 6 files +1,999
    6. fundamentals: client EDGAR poli (token bucket 10 req/s, backoff 429/503, cache gzip) + moteur de normalisation
      …
      - edgar_client.py : companyfacts/submissions/MetaLinks, flux Atom getcurrent, index quotidien, efts ; jamais proxifié aux utilisateurs
      - normalize.py : calendrier fiscal (fy/fp = le dépôt, pas le fait ; snap 52/53 semaines), résolution par priorité, sommes de composantes, identités comptables, versions par filed_date (restatements), dé-cumul YTD (Q2/Q3/Q4 dérivés), comptes calculés, TTM, select_as_of anti look-ahead, journal des extensions
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 2 files +1,134
    7. fundamentals: schéma SQLite (facts versionnés, états standardisés, mapping versionné) + plan de comptes et mapping US-GAAP priorisé
      …
      - models.py : edgar_companies, edgar_filings, fund_statements (large, versionné par filed_date, index point-in-time), fund_mapping, fund_mapping_log, fund_coverage, fund_ingest_state, fund_latest (screener)
      - mapping.py : 49 comptes (16 income, 19 balance, 12 cash flow + 2 auxiliaires), 183 (compte, tag) priorisés et documentés, version 2026.09.1
      - core/errors.py : codes FUNDAMENTALS_NOT_AVAILABLE, INVALID_FILTER, CONCEPT_NOT_FOUND, STREAM_CONNECTION_LIMIT (+ statuts OpenAPI)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 5 files +627 −1
    8. Simon-Pierre Boucher committed 20 days ago · 0 files
    9. Simon-Pierre Boucher committed 20 days ago · 0 files
    10. mcp: formulation « plateforme 100 % gratuite » (MCP, skills, page Integrations)
      …
      - plus aucune notion de tiers/tarif : « free API key (free account) », « keyless mode has low hourly limits », « higher limits granted on request by e-mail to contact@spboucher.ai (also free) », lien /limits
      - ressource hfmarketdata://limits renommée (LIMITS, everything_is_free), instructions serveur et message 429 alignés
      - tarball et zip skills régénérés ; 45 tests vitest verts, build web vert, e2e Integrations 25/25
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 17 files +43 −33
    11. Simon-Pierre Boucher committed 20 days ago · 1 file +176
    12. futures: lac synthétique enrichi (cycle de vie volume/OI, ETH, racine E6) et tests unitaires, intégration et performance
      …
      - make_fixtures.py : contrats ES/CL/NG/E6 avec échéances réalistes, volume/OI qui montent puis s'effondrent, bloc ETH 08:00–09:29, 30 séances intraday sur ES
      - test_futures_symbols/expiry/rolls : parsing + alias, 39 dates d'échéance réelles, calendriers de roll et maths d'ajustement sur séries synthétiques
      - test_futures_api : backfill → 7 endpoints → json/csv/parquet → curseur → erreurs → plafond de lignes par tier → OpenAPI
      - test_futures_perf : 10 000 barres (contrat, continu, parquet) < 300 ms (marqueur slow)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 7 files +867 −19
    13. futures: service de données, moteur de rolls/ajustements et les 7 endpoints /v1/futures
      …
      - rolls.py : calendriers de roll calendar/first_notice/volume/open_interest (fenêtre 30 séances), profondeur 1–3, écarts par roll, ajustements additif/ratio (dernier contrat non ajusté, écart null jamais inventé)
      - service.py : barres d'un contrat (fusion archive+update, session rth/eth sur l'horloge ET, curseur, UTC ISO 8601 DST-aware), chaîne, continu (schedule quotidien appliqué à l'intraday), structure à terme, couverture, racines, contrats
      - routes.py : /roots, /{root}/contracts, /contract/{symbol}/bars, /contract/{symbol}/coverage, /{root}/chain, /{root}/continuous, /{root}/term-structure — OpenAPI riche, x-errors, clamp_limit par tier, json/csv/parquet
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 3 files +1,037
    14. 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 committed 20 days ago · 4 files +556
    15. futures: symboles de contrats (alias CME↔FirstRate), calendrier jours fériés US/Eurex, règles d'échéance et référentiel des racines
      …
      - symbols.py : parse ESZ25/ESZ2025/ES_Z25/6EZ25 → (racine lac, code mois, année) ; table ROOT_ALIASES (6E→E6, 6J→J1, ZB→US…) ; 400 INVALID_CONTRACT_SYMBOL
      - calendar_us.py : jours fériés CME/NYSE (règles observées, Good Friday, Juneteenth ≥ 2022) + Eurex, arithmétique jours ouvrés
      - expiry.py : 24 règles (third_friday, cl_rule, ng_rule, metals_rule, treasury_rule, grains_rule, fx_rule, vx_rule, bund_rule, sr3_rule…) + premiers avis, vérifiées sur les dernières barres réelles du lac
      - specs.py : ~120 racines (taille, tick, règlement, cycle, règle, RTH ET) ; valeurs incertaines = null, racines inconnues = derived
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 5 files +790
    16. Simon-Pierre Boucher committed 20 days ago · 1 file +1 −1
    17. Simon-Pierre Boucher committed 20 days ago · 0 files
    18. Simon-Pierre Boucher committed 20 days ago · 0 files
    19. web: page Integrations (MCP, Claude Code, Cursor, Codex, Skills) + composant IntCopyBlock
      …
      - sous-routes /integrations{,/mcp,/claude-code,/cursor,/codex,/skills}, hero avec session de démo, table des 14 outils, 3 prompts d'exemple
      - blocs de config copiables en un clic (claude mcp add, .mcp.json, .cursor/mcp.json, config.toml Codex, mcpServers générique), clé API optionnelle injectée localement (jamais persistée)
      - bascule tarball (disponible) / npm (après publication), boutons de téléchargement (.tgz, skills .zip), deeplink « Add to Cursor » (best effort, base64 JSON)
      - tokens theme.css uniquement, aucun CDN ; e2e Playwright e2e-integrations.mjs (25 assertions vertes sur vite preview)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 4 files +598 −3
    20. Simon-Pierre Boucher committed 20 days ago · 1 file +162
    21. Simon-Pierre Boucher committed 20 days ago · 3 files +401
    22. ratelimit: tests (compteurs Lua, middleware, usage) + sondes /v1/_test et fixtures partagées
      …
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 5 files +452
    23. Simon-Pierre Boucher committed 20 days ago · 7 files +857
    24. Simon-Pierre Boucher committed 20 days ago · 5 files +969
    25. Simon-Pierre Boucher committed 20 days ago · 5 files +669
    26. Simon-Pierre Boucher committed 20 days ago · 3 files +16 −2
    27. skills: pack de 5 skills Claude Code (analyse, backtest walk-forward, futures continus, screener fondamentaux, structure par terme) + zip téléchargeable
      …
      - chaque skill : SKILL.md (frontmatter, quand l'utiliser, étapes, exemples, pièges) + scripts Python requests/pandas
      - helper commun skills/_shared/hfmd.py (enveloppes v1/v2, retry 429, pagination) copié dans chaque skill par le build
      - skills/scripts/build_skills.py : synchro + zip déterministe → hfmarketdata/web/public/downloads/hfmarketdata-skills.zip
      - scripts v1 validés en live (SPY 1 405 barres ; walk-forward 14 blocs) ; scripts v2 échouent proprement (404 = module pas encore déployé)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 21 files +2,236
    28. mcp: serveur MCP officiel hfmarketdata-mcp (14 outils, 2 ressources, 3 prompts, stdio) + tests vitest + tarball téléchargeable
      …
      - TypeScript, @modelcontextprotocol/sdk + zod, fetch natif, Node >= 20
      - outils : search_symbols, get_bars, get_futures_contracts, get_futures_chain, get_continuous, get_term_structure, get_options_chain, get_coverage, get_financial_statements, get_ratios, get_ratios_daily, screen_fundamentals, get_filings, subscribe_filings (websocket borné)
      - sorties compactes {columns,rows}, résumé tête/queue au-delà de 200 lignes, en-têtes X-RateLimit-* et 429 explicités, erreurs uniformes
      - README vitrine (Claude Code / Cursor / Codex / Claude Desktop), guide d'enregistrement de la démo, smoke test live
      - hfmarketdata/web/public/downloads/hfmarketdata-mcp-1.0.0.tgz (npm pack) servi par le SPA fallback
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 25 files +4,926