DATA

loading… ●

Jurisdiction ranking

day-ahead spreads in €/MWh · click a row for detail · click headers to sort
loading…

Tomorrow's spread nowcast

predicted TB2 for the next market day · self-scored daily — MAE over the last 30 scored days shown per zone · 'netload' = ENTSO-E forecast regression, 'ar' = autoregressive
loading…

Spread heatmap

avg top-2 hours − avg bottom-2 hours (2h battery proxy)
loading…

12-month spread forecast

same-month-last-year × measured YoY trend, ±1σ of historical YoY noise · transparent, no ML — "if the trajectory holds"
loading…

Monthly TB2 spread by jurisdiction

monthly averages, €/MWh — seasonality & multi-year drift · click a zone for detail
loading…

Ancillary capacity heatmap

symmetric capacity price, €/MW/day · only zones with published prices
loading…

Year-over-year spread trend

avg TB2, trailing 365 days vs the 365 before — compression detector: shrinking spreads = storage saturating
loading…

Saturation — storage build-out vs spreads

battery MW per GW of peak demand vs avg TB2 (365d) · fitted across all jurisdictions — CAISO/ERCOT show where the curve leads · pipeline (constr. + 20% of queue over 3 yr) ⇒ suggested spread drift %/yr · fleet & queue curated in app/fleet.json
loading…

Site sweep — same battery, every jurisdiction

the full revenue stack (DA + intraday + FCR + aFRR where each exists), last 90 days annualised, with capture & 12-mo forecast applied · indicative IRR from the economics below
set parameters and run
Streams show €/MW/yr after capture (and forecast drift if applied). "–" = that market doesn't exist or isn't publicly priced in the zone. Capacity streams (FCR/aFRR/mFRR) are depth-capped: revenue assumes the asset wins at most 25% of the market's procured MW — thin markets (Baltics, RO FCR) can't absorb full asset power at headline prices. IRR is unlevered, 12-yr life, trading-revenue only.

Optimal duration

avg TBn spreads (365d) · "best" = longest duration whose marginal 2h step still beats amortized cell capex (250 €/kWh, 12 yr ≈ 57 €/MWh/day) · TB4/TB2 drift vs prior year = lengthening sweet spot
loading…

Market character — annuity vs lottery

TB2 tail statistics, last 365 days · high top-10-day share = revenue concentrated in scarcity events (harder to finance with debt) · neg. hours trend = solar cannibalization
loading…

Spread correlation — 365d

Pearson correlation of daily TB2 · high = same weather/fuel regime, no diversification between projects in the two zones
loading…
loading…

Auction & tender calendar

contracted-revenue routes and their gates · curated (app/auctions.json) — verify dates with the operator before planning a bid
loading…

Market design dossiers

curated per-jurisdiction context: capacity mechanisms, grid fees, saturation, pipeline · edit app/dossiers.json
loading…

Ancillary services & balancing

FCR & aFRR capacity auctions (regelleistung.net) · Nordic imbalance prices (eSett)
loading…

Intraday continuous market

Nord Pool intraday statistics · hourly VWAP spreads & intra-product ranges, €/MWh · DE/NL/BE/FR + Nordics + Baltics (EPEX-only areas not covered)
loading…

Reading this page

ID TB2 is the same top-2−bottom-2 spread as on the Overview, computed on the hourly intraday volume-weighted price instead of the day-ahead auction — where it exceeds DA TB2, batteries earn more trading closer to delivery. Avg range is the mean gap between the highest and lowest trade inside each hourly product: the room a continuous/algo trading desk plays in. DA↔ID is the average distance between the day-ahead price and the intraday VWAP for the same hour — the re-trading opportunity after the auction.

Projects — revenue prediction

perfect-foresight stack, up to two DA cycles/day (second only when it clears efficiency losses) · before fees & taxes

Data health

per-source freshness · per-zone gaps · fetch errors · access expiries
loading…