read.markets/config/default.toml
Giorgio Gilestro 4e7e4981e3 add ECB Data Portal source; group-aware stale thresholds
ECB Statistical Data Warehouse joins as a 5th data source — open API,
no key, daily euro-area yield curve data. Symbol format
'ECB:dataset/series_key', e.g. 'ECB:YC/B.U2.EUR.4F.G_N_A.SV_C_YM.SR_10Y'
for daily 10y AAA spot rate.

Bonds tab adds ECB EZ 10y AAA + 2y AAA so there's at least some
currently-fresh European sovereign data alongside the US Treasuries.
Country-specific yields (Bund/OAT/BTP/Gilt/JGB) remain on Eurostat/FRED
monthly mirrors — no free daily source exists for those.

Stale threshold is now per-group instead of a flat 90 days. Daily-tape
groups (bonds, rates, equity, etc.) flag stale after a week or three;
monthly groups (economy, macro, valuation) stay at 60-90 days. The
bonds tab will now correctly show 30-60 day-old country yields as
stale next to the daily US/ECB ones.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 23:13:58 +01:00

267 lines
16 KiB
TOML

# Baseline config — universal data tables consumed by market_pulse.py and
# flash_news.py. Edit this file to change what every user/portfolio tracks by
# default. User-specific or portfolio-specific overrides go in portfolio.toml,
# which is loaded on top of this and wins on key conflicts.
#
# Symbol prefixes in [groups]:
# bare → Yahoo Finance (default)
# FRED:SERIES_ID → FRED economic series (needs FRED_API_KEY in .env)
# =============================================================================
# market_pulse.py — indicator groups
# =============================================================================
[groups]
equity = [
{symbol="^GSPC", label="S&P 500", note="doc ref 7,501 (ATH)"},
{symbol="^IXIC", label="Nasdaq Composite", note="Mag 7 concentration"},
{symbol="^NDX", label="Nasdaq 100", note="Mag 7 concentration"},
{symbol="^FTSE", label="FTSE 100", note="GBP base"},
{symbol="^STOXX50E", label="Euro Stoxx 50", note=""},
{symbol="^N225", label="Nikkei 225", note="JPY at multi-decade low → VJPN thesis"},
{symbol="^HSI", label="Hang Seng", note="China expression"},
{symbol="000300.SS", label="CSI 300", note="broad China A-share"},
{symbol="^VIX", label="VIX", note="doc ref 18.0 — 'anomalously calm'"},
]
mag7 = [
{symbol="AAPL", label="Apple", note="doc thesis: 'Mag 7 pops' scenario"},
{symbol="MSFT", label="Microsoft", note=""},
{symbol="GOOGL", label="Alphabet (Class A)", note=""},
{symbol="AMZN", label="Amazon", note=""},
{symbol="META", label="Meta Platforms", note=""},
{symbol="NVDA", label="Nvidia", note="AI capex bellwether"},
{symbol="TSLA", label="Tesla", note=""},
]
rates = [
{symbol="^IRX", label="US 3-month T-bill", note="%"},
{symbol="^FVX", label="US 5y yield", note="%"},
{symbol="^TNX", label="US 10y yield", note="% — doc ref 4.45"},
{symbol="^TYX", label="US 30y yield", note="%"},
{symbol="HYG", label="HYG — HY corp bond ETF", note="HY OAS price proxy"},
{symbol="TIP", label="TIP — TIPS ETF", note="inflation expectations proxy"},
]
macro = [
{symbol="FRED:DFF", label="Fed Funds (effective)", note="%"},
{symbol="FRED:CPIAUCSL", label="US CPI (YoY)", note="% — doc ref 3.8"},
{symbol="FRED:CPILFESL", label="US Core CPI (YoY)", note="% — ex food & energy"},
{symbol="FRED:BAMLH0A0HYM2", label="US HY OAS", note="% — doc ref 2.79 (279bps)"},
{symbol="FRED:T10YIE", label="US 10y breakeven inflation", note="%"},
{symbol="FRED:T10Y2Y", label="10y-2y term spread", note="% — recession watch"},
{symbol="FRED:UNRATE", label="US unemployment rate", note="%"},
{symbol="FRED:WALCL", label="Fed balance sheet", note="$M — QT/QE state"},
]
commodities = [
{symbol="BZ=F", label="Brent crude", note="$/bbl — doc ref 109; closure-priced 180-250"},
{symbol="CL=F", label="WTI crude", note="$/bbl"},
{symbol="NG=F", label="Henry Hub nat-gas", note="$/MMBtu"},
{symbol="GC=F", label="Gold futures", note="$/oz — doc ref 4,651"},
{symbol="SI=F", label="Silver futures", note="$/oz"},
{symbol="HG=F", label="Copper futures", note="$/lb — transition demand"},
{symbol="PL=F", label="Platinum futures", note="$/oz"},
]
fx = [
{symbol="DX-Y.NYB", label="DXY (USD index)", note="USD-debasement channel"},
{symbol="GBPUSD=X", label="GBP/USD", note="household base FX"},
{symbol="EURGBP=X", label="EUR/GBP", note="~£400-530k EUR exposure"},
{symbol="EURUSD=X", label="EUR/USD", note=""},
{symbol="USDJPY=X", label="USD/JPY", note="JPY at multi-decade low"},
{symbol="USDCNY=X", label="USD/CNY", note="managed peg, watch deviation"},
{symbol="GC=F", label="Gold (USD)", note="anchor for FX read"},
]
tech_ai = [
{symbol="XLK", label="XLK — US tech sector", note="broad US tech read"},
{symbol="SOXX", label="SOXX — iShares semis", note="AI capex bellwether"},
{symbol="TSM", label="TSMC (ADR)", note="foundry monopoly + Taiwan risk"},
{symbol="ASML", label="ASML", note="EUV monopoly — China-export friction"},
{symbol="AVGO", label="Broadcom", note="AI infra; cyclical risk"},
{symbol="AMD", label="AMD", note="Nvidia competitor"},
{symbol="ARM", label="ARM Holdings", note="mobile/edge AI"},
]
financials = [
{symbol="XLF", label="XLF — US financials sector", note="broad US financials"},
{symbol="KBE", label="KBE — US banks", note="bank-only, regional+money centre"},
{symbol="KRE", label="KRE — US regional banks", note="post-2023 stress watch"},
{symbol="JPM", label="JPMorgan", note="systemically important"},
{symbol="GS", label="Goldman Sachs", note="capital markets read"},
{symbol="HSBA.L", label="HSBC (LSE)", note="UK + Asia exposure"},
{symbol="BARC.L", label="Barclays (LSE)", note="UK clearing bank"},
{symbol="BNP.PA", label="BNP Paribas (Paris)", note="EU systemic"},
{symbol="DBK.DE", label="Deutsche Bank (Frankfurt)", note="EU stress canary"},
{symbol="^FTAS", label="FTSE All-Share", note="UK breadth"},
]
# --- Strategic / fundamentals groups -----------------------------------------
# These feed the Temperature page (phase 2) where each indicator is shown as a
# percentile of its own history vs past cycles incl. recessions. Until phase 2
# they render as standard tabs in the Indicators panel.
# Valuation — slow-moving "is the market expensive vs history" anchors.
valuation = [
{symbol="FRED:WILL5000PRFC", label="Wilshire 5000 (US market cap proxy)", note="numerator for Buffett indicator"},
{symbol="FRED:GDP", label="US Nominal GDP (quarterly)", note="denominator for Buffett indicator"},
{symbol="FRED:SP500", label="S&P 500 (FRED long-history)", note="FRED-anchored percentile vs deep history"},
{symbol="FRED:DJIA", label="Dow Jones Industrial Average", note="long-history equity reference"},
{symbol="FRED:DGS10", label="US 10y nominal yield (FRED)", note="ERP denominator"},
{symbol="FRED:DFII10", label="US 10y real yield (TIPS)", note="real-rate signal — gold + multiples"},
{symbol="FRED:T10YIE", label="US 10y breakeven inflation", note="market-implied inflation"},
]
# Bubble watch — irrationality / positioning / behavioural extremes.
bubble_watch = [
{symbol="RSP", label="RSP — equal-weight S&P 500", note="breadth — falling vs SPY = concentration"},
{symbol="SPY", label="SPY — cap-weighted S&P 500", note="pair with RSP for concentration read"},
{symbol="IWM", label="IWM — Russell 2000", note="small-cap cycle health"},
{symbol="^VIX", label="VIX — equity vol", note="LOW percentile = complacency"},
{symbol="^VVIX", label="VVIX — vol of vol", note="LOW = no demand for vol insurance"},
{symbol="^SKEW", label="SKEW — tail-risk pricing", note="HIGH = options market pricing crash"},
{symbol="HYG", label="HYG — high-yield credit", note="pair with TLT for risk-on/off"},
{symbol="TLT", label="TLT — long Treasuries", note="duration / safe haven flows"},
{symbol="IPO", label="IPO — Renaissance IPO ETF", note="late-cycle frothiness gauge"},
{symbol="BTC-USD", label="Bitcoin", note="retail risk appetite + USD-debasement"},
{symbol="ETH-USD", label="Ethereum", note=""},
{symbol="FRED:BAMLH0A0HYM2", label="US HY OAS", note="LOW percentile = credit complacency"},
]
# Real economy — fundamental anchors that move on quarters, not days.
#
# Geographic coverage note: FRED mirrors OECD "international comparable"
# series for non-US economies. Several (Japan CPI, Eurozone unemployment,
# Eurozone industrial production, UK CPI) were de-facto abandoned by
# OECD-Stat in 2022-2023 and are 1-4 YEARS stale on FRED. Listing them
# would be worse than not having them. We only include series that are
# currently maintained. Up-to-date non-US economic data would require
# direct integration with Eurostat / ONS / Statistics Bureau of Japan /
# NBS-China — out of scope for v0. The dashboard flags any indicator
# older than 90 days as "stale" on screen.
economy = [
# United States
{symbol="FRED:ICSA", label="US initial jobless claims (weekly)", note="leading labour signal — weekly"},
{symbol="FRED:INDPRO", label="US industrial production", note="real activity, monthly"},
{symbol="FRED:HOUST", label="US housing starts", note="cyclical real-economy gauge"},
{symbol="FRED:UMCSENT", label="US consumer sentiment (UMich)", note="demand-side mood"},
{symbol="FRED:T10Y3M", label="US 10y-3m yield curve", note="Fed-favoured recession signal"},
{symbol="FRED:USREC", label="NBER recession indicator (0/1)", note="binary — context overlay only"},
# Eurozone — direct Eurostat (open API, no key, current)
{symbol="EUROSTAT:ei_cphi_m?geo=EA&indic=TOTAL&unit=RT12", label="Eurozone HICP YoY %", note="EZ inflation, YoY % — ECB-style series, current"},
{symbol="EUROSTAT:une_rt_m?geo=EA21&age=TOTAL&sex=T&unit=PC_ACT&s_adj=SA", label="Eurozone unemployment rate", note="EZ labour, seasonally adjusted"},
{symbol="EUROSTAT:sts_inpr_m?geo=EA21&nace_r2=B-D&s_adj=SCA&unit=I21", label="Eurozone industrial production", note="EZ real activity"},
# United Kingdom — direct ONS (open API, current within 1-2 months)
{symbol="ONS:economy/inflationandpriceindices/d7g7/mm23", label="UK CPI YoY %", note="UK headline inflation, monthly"},
{symbol="ONS:employmentandlabourmarket/peoplenotinwork/unemployment/mgsx/lms", label="UK unemployment rate", note="UK labour, 16+, seasonally adjusted"},
{symbol="ONS:economy/grossdomesticproductgdp/ihyo/qna", label="UK GDP growth q/q-4 %", note="UK GDP, year-on-year quarterly"},
{symbol="ONS:economy/economicoutputandproductivity/output/k222/diop", label="UK industrial production", note="UK IoP, monthly"},
# Japan
{symbol="FRED:LRHUTTTTJPM156S", label="Japan unemployment rate", note="JP labour — ~3mo lag"},
]
# Sovereign bond yields — UK / EU / US / JP. China yields have no free open-API
# source; would need scraping or paid feed.
bonds = [
# United States — daily, deep curve
{symbol="^IRX", label="US 3m T-bill yield", note="short-end, daily"},
{symbol="^FVX", label="US 5y Treasury yield", note="belly of the curve"},
{symbol="^TNX", label="US 10y Treasury yield", note="benchmark long rate"},
{symbol="^TYX", label="US 30y Treasury yield", note="long-end / term premium proxy"},
# Eurozone — daily AAA yield curve via ECB Data Portal (most current)
{symbol="ECB:YC/B.U2.EUR.4F.G_N_A.SV_C_YM.SR_10Y", label="Eurozone 10y AAA (ECB, daily)", note="EZ AAA-rated 10y spot rate — ECB daily"},
{symbol="ECB:YC/B.U2.EUR.4F.G_N_A.SV_C_YM.SR_2Y", label="Eurozone 2y AAA (ECB, daily)", note="EZ AAA short-end, daily"},
# Eurozone country yields — Maastricht convergence series via Eurostat (monthly)
{symbol="EUROSTAT:irt_lt_mcby_m?geo=EA&int_rt=MCBY", label="Eurozone 10y aggregate", note="EZ avg 10y govt bond yield — Maastricht, monthly"},
{symbol="EUROSTAT:irt_lt_mcby_m?geo=DE&int_rt=MCBY", label="German 10y Bund", note="EU risk-free benchmark"},
{symbol="EUROSTAT:irt_lt_mcby_m?geo=FR&int_rt=MCBY", label="French 10y OAT", note="core-EU spread to Bund"},
{symbol="EUROSTAT:irt_lt_mcby_m?geo=IT&int_rt=MCBY", label="Italian 10y BTP", note="periphery — BTP/Bund spread = EU stress"},
# United Kingdom — FRED OECD mirror (Eurostat dropped UK post-Brexit)
{symbol="FRED:IRLTLT01GBM156N", label="UK 10y Gilt", note="UK long-term yield"},
# Japan — BoJ regime tracker
{symbol="FRED:IRLTLT01JPM156N", label="Japan 10y JGB", note="BoJ; YCC legacy"},
]
# =============================================================================
# flash_news.py — RSS feed registry, by category
# =============================================================================
[feeds]
markets = [
{name="BBC Business", url="https://feeds.bbci.co.uk/news/business/rss.xml"},
{name="Guardian Business", url="https://www.theguardian.com/uk/business/rss"},
{name="CNBC Top", url="https://www.cnbc.com/id/100003114/device/rss/rss.html"},
{name="MarketWatch Top", url="https://feeds.content.dowjones.io/public/rss/mw_topstories"},
{name="FT Markets", url="https://www.ft.com/markets?format=rss"},
{name="Yahoo Finance", url="https://finance.yahoo.com/news/rssindex"},
]
world = [
{name="BBC World", url="https://feeds.bbci.co.uk/news/world/rss.xml"},
{name="Al Jazeera", url="https://www.aljazeera.com/xml/rss/all.xml"},
]
energy = [
{name="OilPrice", url="https://oilprice.com/rss/main"},
]
# Pan-Asia coverage: HK/China, Japan, Korea, SE Asia, regional wire.
asia = [
{name="SCMP", url="https://www.scmp.com/rss/91/feed/"},
{name="China Daily", url="http://www.chinadaily.com.cn/rss/world_rss.xml"},
{name="Xinhua", url="http://www.xinhuanet.com/english/rss/worldrss.xml"},
{name="Japan Times", url="https://www.japantimes.co.jp/feed/"},
{name="Nikkei Asia", url="https://asia.nikkei.com/rss/feed/nar"},
{name="Yonhap", url="https://en.yna.co.kr/RSS/news.xml"},
{name="Straits Times", url="https://www.straitstimes.com/news/world/rss.xml"},
{name="Asia Times", url="https://asiatimes.com/feed/"},
]
# =============================================================================
# flash_news.py — built-in keyword presets for headline filtering
# =============================================================================
[news.presets]
# Mirrors Family_Wealth_Summary_v2.md §8 macro thesis. Swap freely if the
# portfolio's thesis changes (e.g. crypto, biotech, deep value).
thesis = [
"hormuz", "iran", "opec", "brent", "wti", "crude", "oil", "gas", "lng",
"china", "taiwan", "yuan", "beijing", "xi",
"fed ", "powell", "ecb", "lagarde", "boe ", "boj", "bailey",
"inflation", "cpi", "rate cut", "rate hike", "yield",
"gold", "silver", "dollar", "yen",
"sanction", "tariff", "trade war",
"saudi", "russia", "ukraine", "israel", "nato",
"defence", "defense", "rearmament",
]
# Tech / AI sector — semis, hyperscaler capex, model labs, chip-export controls.
tech = [
" ai ", "ai ", " ai,", "artificial intelligence",
"nvidia", "openai", "anthropic", "deepmind", "gemini", "chatgpt",
"semiconductor", "chip", "foundry", "tsmc", "asml", "samsung",
"lithography", "euv", "wafer",
"data centre", "data center", "hyperscaler", "capex",
"broadcom", "amd ", "arm holdings", "intel ",
"apple", "microsoft", "alphabet", "google", "meta ", "tesla",
"cloud", "saas", "compute",
]
# Financials — banks, credit, central banks, market plumbing.
finance = [
"bank", "banking", "lender", "lending",
"jpmorgan", "goldman", "morgan stanley", "wells fargo", "citigroup",
"hsbc", "barclays", "lloyds", "natwest", "santander",
"bnp paribas", "deutsche bank", "credit suisse", "ubs",
"federal reserve", "rate cut", "rate hike", "basel",
"credit spread", "default", "junk bond", "high yield",
"private credit", "shadow banking",
"earnings", "buyback", "dividend",
]