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)
JavaScript 53.7%
Python 38.3%
CSS 4.6%
TypeScript 3.1%
-
Fri, Sep 4, 2026 40
-
docs: fondamentaux (architecture, schéma, mapping, normalisation, argument point-in-time, exemple Apple Q2 FY2024, prototype, exploitation, estimation du backfill), formules des ratios générées, AsyncAPI 3 du stream
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
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>
-
fundamentals: scripts edgar_backfill (manifeste reprenable, --from-zip), edgar_incremental (cycle 2 min, événements Redis) et edgar_reconcile (échantillon de 20 sociétés)
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
bulk: extraits Parquet annuels des fondamentaux (/v1/bulk/fundamentals/{year}.parquet) hors quota, ETag fort + If-None-Match → 304
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
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>
-
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>
-
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>
-
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>
-
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>
-
docs: notes de conception du module futures (alias, règles d'échéance, rolls, ajustements, limites)
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
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>
-
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> -
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> -
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>
-
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> -
docs: comptes, clés API et quotas — guide pour l'équipe web (flux, en-têtes, Resend, CLI, variables prod)
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
accounts: tests des flux (inscription→vérification→clé→révocation), admin/invitation, CLI seed
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
ratelimit: tests (compteurs Lua, middleware, usage) + sondes /v1/_test et fixtures partagées
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
accounts: routes /v1/auth, /v1/me, /v1/limits, /v1/admin + CLI hfmd (users, keys, seed idempotent)
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
ratelimit: tiers, fenêtres glissantes Redis (script Lua unique), middleware ASGI (principal, 429, en-têtes X-RateLimit-*), comptabilité d'usage
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
accounts: modèles SQLite (§1.4), sécurité (argon2, clés hfmd_live_ hachées, sessions signées, garde CSRF), mailer Resend, service métier
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
accounts: codes d'erreur comptes/quotas (EMAIL_TAKEN, INVALID_TOKEN, INVALID_CREDENTIALS…) + fakeredis[lua] en dev
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
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>
-
web: socle du site v2 — thème sombre/clair persisté, layout (nav, tiroir mobile, recherche ⌘K, pied de page), composants partagés (Code Prism + copie, Tabs, Callout, Table, Badge, LangSelector, Markdown sûr, SearchDialog) et moteur de docs 3 colonnes généré depuis /openapi.json (référence par opération, erreurs, guides MDX, changelog)
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
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>