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>
This commit is contained in:
Giorgio Gilestro 2026-05-15 23:13:58 +01:00
parent 1edf9cad41
commit 4e7e4981e3
3 changed files with 118 additions and 6 deletions

View file

@ -171,8 +171,11 @@ bonds = [
{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 — Maastricht convergence yields 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"},
# 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"},