Methodology
Sources, maths, biases.
Every chart on this site cites its data, its formula, and its update cadence.
Data sources
| Source | Cadence | What we pull |
|---|---|---|
| FRED | Nightly 02:00 UTC | US monetary aggregates, Fed balance sheet, yields, fixings (WALCL, M2SL, RRPONTSYD, WTREGEN, DGS10, IORB, SP500…) |
| US Treasury Fiscal Data | Daily | TGA balance, debt-to-the-penny, securities issuance, public debt transactions. |
| Treasury TIC | Monthly (16th, 60-day lag) | Major Foreign Holders, long-term securities transactions, country holdings. |
| BIS | Quarterly | Locational Banking Statistics, Debt Securities Statistics, Global Liquidity Indicators. |
| BEA | Quarterly | International Transactions, bilateral trade in goods and services, FDI flows. |
| CFTC COT | Weekly (Saturday) | Non-commercial net positions for JPY, S&P 500 e-mini, 10Y notes, WTI, gold. |
| Stooq | Daily | Backup price feeds for indices, FX, commodities, crypto. |
| LBMA | Daily | Gold Price PM Fix in USD/oz (full history back to 1968). Successor to FRED's discontinued GOLDAMGBD228NLBM. |
| BLS | Monthly | CPI, Core PCE, NFP. |
| IMF | Quarterly | COFER (FX reserves composition), IFS, BOP. |
| BoJ / ECB | Daily/Weekly | JGB yields, BoJ holdings, Eurosystem balance sheet. |
Computed metrics
Net Liquidity
Net Liquidity = WALCL − WTREGEN − RRPONTSYDCarry Pressure Index
CarryPressure = normalize( (Fed Funds − BoJ Policy Rate) × |CFTC JPY net non-commercial position| )Indexed Race
Indexed(t) = 100 × Series(t) / Series(t₀)Cache & freshness
Series data is cached server-side for one hour after each ingest run; narrative copy is cached for 24 hours. Every chart card displays its last-updated timestamp directly from the database.
Annotations
Charts are layered with curated macro events (every QE round, FOMC pivot, BoJ surprise, debt-ceiling fight, COVID, SVB, August 2024 yen unwind, etc.). The seed list lives at content/annotations.json in the repo and is auditable in git.
How to add an annotation:
- Permanent (audited): add an entry to
content/annotations.jsonwithts, optionalts_end,title,description,category,importance(1–5), andseries_ids(the source_id strings the annotation relates to). Runpnpm --filter @workspace/scripts run seed:annotations— the seeder is idempotent on(ts, title). - Ad-hoc (operator): use
/admin/annotationsto create, edit, or delete a row. Mutations revalidate the annotations cache so chart pages pick up the change on the next render — no redeploy.
Charts query annotations via getAnnotations({from, to, seriesIds, importance}) from lib/annotations.