Skip to content

KB/operations

Data Sources

Last verified

Eighteen external feeds drive the platform. Each is registered as a DataSource subclass in app/sources/ and pulled by engine.py:fetch_all_sources() on the cadence dictated by the active collection profile.

The full inventory

Source What it provides Cadence Required
market (primary brokerage feed + public market-data fallback) SPY/QQQ/IWM/DIA closes, VIX, MOVE, chain net-Γ + gamma walls/ZGL/PCR, BTC, RSI, IVR Per profile Yes (core)
fred Fed liquidity, HY OAS, 2s10s, breakevens, yields, real yield Per profile Yes
credit High-yield credit spread series, NFCI Per profile Yes
liquidity Net Fed liquidity (WALCL − TGA − RRP) Per profile Yes
darkpool Dealer-gamma analytics vendor DIX + GEX daily CSV Daily post-close Yes
news FXStreet RSS + Iran International liveblog + Hormuz tanker monitor Per profile Yes
sentiment Third-party news-sentiment feed (retired 2026-06) Per profile Optional (25 req/day budget)
seasonality Historical SPY seasonality lookup Per profile Optional
vol_structure VIX term structure (VIX9D/VIX/VIX3M/VIX6M ratios) Per profile Yes
eps Forward EPS revision deltas Per profile Optional
breadth S&P 500 % above 50/200 SMA, sector breadth Per profile Yes
energy WTI, Brent, USO, XLE, crack spread Per profile Yes
inflation Breakeven inflation series (5Y, 10Y, 5Y5Y) Per profile Yes
macro_indicators Composite macro health proxies Per profile Optional
cot CFTC Commitments of Traders speculator net positioning Weekly (Fri ~15:30 ET) Optional
aaii AAII bull-bear sentiment spread Weekly (Thu) Optional
ebp Fed Excess Bond Premium + GZ credit spread + model recession probability Monthly (FEDS Notes CSV) Optional
fred_macro Free FRED macro-state + financial-stress / funding series (Kim-Wright 10Y term premium, EFFR, SOFR, jobless claims, STLFSI4, KCFSI, unemployment, Core PCE); all data_only carriers, not yet scored Per profile (full / extended) Optional
cboe Free CBOE CDN no-key CSVs — options put/call ratios (equity / total / index) + VIX term-structure front/back points (VIX9D, VIX6M); all data_only carriers, not yet scored Daily (full / extended) Optional
ofr Free OFR (US Treasury) no-key daily CSV — Financial Stress Index composite + 5 subindices (credit / equity-valuation / safe-assets / funding / volatility); all data_only carriers, not yet scored Daily (full / extended) Optional
naaim Retired 2026-09-01 — NAAIM Exposure Index (active-manager equity exposure), a free weekly page-scrape; NAAIM paywalled the feed on 2026-08-01, so the series is history-only now. data_only carrier, never scored Retired (was weekly) Optional (history only)
options-analytics-live Live options-analytics dealer-risk + levels for SPY — settled/live net dealer gamma + delta (billions), intraday flow-shift, the categorical flow direction, and the gamma-flip / call-wall / put-wall / max-pain levels; all fa_* data_only carriers, not yet scored. Captured forward as a hedge against the subscription lapsing Intraday (4×/trading day, full) Optional
edgar_xbrl Free, no-key SEC EDGAR audited quarterly financial facts for a fixed 6-name entity set (NVDA inventory + revenue; MSFT/GOOGL/AMZN/META/ORCL capex + operating cash flow). Feeds the AI Capital Cycle T13 auto trigger + T10’s capex/OCF companion read; persisted to its own table, not daily_signals Daily (overnight / full) Optional
sovereign_yields Free, no-key six-sovereign long-end government-bond-yield panel — Germany 30Y (Bundesbank), euro-area AAA 30Y (ECB Data Portal, the euro / France proxy), UK 20Y long (Bank of England), Canada long (Bank of Canada), Japan 30Y/40Y/20Y (Japan MoF), plus US 30Y for the shared look-back table. Makes the “six governments at multi-year highs at once” observable honest from primary central-bank data. Persists the full history to macro_series and the derived daily carriers (levels, per-country years-since-higher, two synchrony counts, oldest-of-six panel as-of) to daily_signals; each country fetch is independent so one dead endpoint never blanks the others. All data_only, not yet scored Daily (extended / overnight) Optional
debt_holders Free, no-key who-holds-the-debt / cash-on-the-sidelines panel (long-end-stress Phase 3B — the second-driver watch: who owns the Treasury float and how much cash sits short). Four independent groups: money-market-fund assets (FRED — a narrower retail weekly measure plus the broad quarterly total, the ~$8.36T headline the retail series understates), Fed SOMA Treasuries held outright (NY Fed, weekly — runoff halted Dec 2025), foreign holdings of US Treasuries (US Treasury TIC — Japan / China / UK / all-foreign total, monthly with a ~2-month lag; the frozen legacy TIC path is a silent-staleness trap and is refused), and foreign-official custody of marketable Treasuries (FRED, weekly). Persists full history to macro_series and the derived daily carriers (levels, 13-week / 12-month change look-backs, per-cadence as-of stamps) to daily_signals; each group fetch is independent so one dead endpoint never blanks the others. All data_only, not yet scored Daily (extended / overnight) Optional

Three auxiliary fetches run alongside the registered sources and stash results under underscore-prefixed keys (_gamma_levels, _fed_watch, _correlations) so format_report can find them without colliding with per-source dicts:

Provider mix and fallback posture

Macro calendar — what’s filled, what isn’t

The platform seeds a forward macro-event calendar (calendar_events) that powers the air-pocket flag’s catalyst leg and the AI brief’s calendar_lookahead. The three high-impact monthly prints — Employment Situation (NFP), CPI, PPI — are seeded from FRED’s free release/dates endpoint, plus FOMC decisions and the weekly FRED release projections.

The long-end-stress Phase 3B rates-event calendar adds two more emitters, both calendar_events rows on the same forward-lookahead substrate: treasury_auctions seeds announced Treasury coupon auctions (10Y / 20Y / 30Y) from the free TreasuryDirect TA_WS securities API (auction date at the 13:00 ET coupon close; 20Y/30Y high-importance, 10Y medium), and rates_calendar seeds hand-entered dated structural events from a committed file — Bank of Japan meeting dates, US quarterly-refunding announcements, the Dutch pension transition wave, the UK DMO remit, the OBR fiscal risks report, the OECD Global Debt Report. Both are idempotent (one row per event, re-emit is a no-op) and gated to once per ET day. The calendar records and reacts to these dates; it never forecasts an embargoed policy outcome.

Each macro-event row carries consensus and actual columns. The two behave differently:

Constraint: no free consensus survey for NFP/CPI/PPI; no canonical headline mapping for PPI. Falsifier: a free, ToS-clean consensus feed (or a sanctioned paid one) becomes available, or PPI’s quoted-headline series is settled. Unblock: wire consensus into _emit_fred_release_calendar (consensus=) and the surprise framing follows; add the PPI entry to RELEASE_ACTUAL_MAP and its actual wires automatically.

Execution order

Fast HTTP sources run first (FRED, liquidity, darkpool, news, sentiment) so the heavy market-data fallback sources (market, eps, breadth) don’t gate the report on slow network paths. Breadth specifically downloads in batches of 50 tickers with 2-second delays to stay under the market-data fallback feed’s rate limits.

Every fetch routes through DataSource.safe_fetch() in app/sources/base.py — uniform retry with exponential backoff, WARNING on transient failure, logger.exception() on fatal, returns a default on terminal failure. New sources must use it.

See also