← All case studies

03 · Data Systems

A macro research pipeline built to reject itself

Gold / XAUUSD macro research · Python, SQLite FTS5, Qdrant, FastAPI

~900K feature grid rows
68 features per row
0 patterns survived validation
LLM-free deterministic extraction

The problem

Macro "signals" are easy to find and easy to fake. Extraction pipelines that lean on LLMs hallucinate structure; backtests without multiple-comparison control promote noise. I wanted a system where the null hypothesis wins by default.

What I decided

  • Deterministic extraction pipelines — no LLM in the data path; models only summarize, never construct facts.
  • SQLite FTS5 for document retrieval + Qdrant for semantic search — boring, self-hostable, zero vendor lock.
  • ~900K × 68 feature grid over real broker feeds, validated with permutation tests + Bonferroni. Result: 0/34 and 0/192 patterns survived. That number is the product.
  • Single FastAPI service, API-key auth, localhost-bound — research tooling, not a SaaS vanity deploy.
Macro sourcesnews · data · filings
Deterministic extractorno LLM
FTS5 + Qdrantretrieval layers
900K × 68 gridfeature store
Validation suitepermutation · correction

Outcome: a pipeline whose most valuable output was a rigorous negative: zero validated patterns after full multiple-comparison control. Most portfolios would hide that; this one leads with it, because knowing what is not true is the scarcest skill in quantitative work.