Methodology

Sources, maths, biases.

Every chart on this site cites its data, its formula, and its update cadence.

Data sources

SourceCadenceWhat we pull
FREDNightly 02:00 UTCUS monetary aggregates, Fed balance sheet, yields, fixings (WALCL, M2SL, RRPONTSYD, WTREGEN, DGS10, IORB, SP500…)
US Treasury Fiscal DataDailyTGA balance, debt-to-the-penny, securities issuance, public debt transactions.
Treasury TICMonthly (16th, 60-day lag)Major Foreign Holders, long-term securities transactions, country holdings.
BISQuarterlyLocational Banking Statistics, Debt Securities Statistics, Global Liquidity Indicators.
BEAQuarterlyInternational Transactions, bilateral trade in goods and services, FDI flows.
CFTC COTWeekly (Saturday)Non-commercial net positions for JPY, S&P 500 e-mini, 10Y notes, WTI, gold.
StooqDailyBackup price feeds for indices, FX, commodities, crypto.
LBMADailyGold Price PM Fix in USD/oz (full history back to 1968). Successor to FRED's discontinued GOLDAMGBD228NLBM.
BLSMonthlyCPI, Core PCE, NFP.
IMFQuarterlyCOFER (FX reserves composition), IFS, BOP.
BoJ / ECBDaily/WeeklyJGB yields, BoJ holdings, Eurosystem balance sheet.

Computed metrics

Net Liquidity

Net Liquidity = WALCL − WTREGEN − RRPONTSYD

Carry 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:

  1. Permanent (audited): add an entry to content/annotations.json with ts, optional ts_end, title, description, category, importance (1–5), and series_ids (the source_id strings the annotation relates to). Run pnpm --filter @workspace/scripts run seed:annotations — the seeder is idempotent on (ts, title).
  2. Ad-hoc (operator): use /admin/annotations to 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.