Capture Index methodology — capture-v1
This page is the single source of the formulas the API docs quote. Version log at the bottom; the version string travels with every row.
Definitions
For zone z, technology g ∈ {solar (B16), wind_onshore (B19), wind_offshore (B18)}, period P (day or month, UTC boundaries) with generation gen(t) [MWh] and day-ahead price p(t) [€/MWh] per interval t:
- Market value MV = Σ gen·p / Σ gen — generation-weighted average DA price [€/MWh]. Synonyms: Marktwert.
- Baseload reference BASE = simple time-mean of p over P, same resolution [€/MWh].
- Capture rate CR = MV / BASE. Synonyms: market value factor, Marktwertfaktor, Profilfaktor.
- Capture spread = BASE − MV [€/MWh].
- NEG share = Σp<0 gen / Σ gen — the technology's generation delivered at negative prices.
Resolution & sources
Everything is computed on a 15-minute UTC slot grid: hourly values span four slots, 30-minute values two — mixed-resolution periods (the 2025-10-01 MTU seam, GB's half-hourly series) are interval-weighted by construction, and each row carries its resolution_mix. Prices: the same day-ahead auction series the API serves (ENTSO-E preferred, SMARD fallback). Generation: ENTSO-E Transparency actual generation per type (A75), as of computation time.
Provisional → frozen (never restated)
ENTSO-E generation actuals revise for days to weeks. Every row is therefore provisional (recomputed daily, may change, labeled everywhere) until month_end + 12 days, when it is recomputed once and frozen forever. Daily rows freeze with their month. A CI test replays frozen months and fails on any drift. If a material late revision arrives after freezing (>1% MV change), we do not restate — the row gets a revision_note footnote, the same policy as the prediction bench's settlement correction.
Null policy (a gap is a gap)
insufficient_generation: a cell publishes only if Σ gen ≥ max(0.5% of zone load, 1 GWh/month) — offshore in zones with token capacity and far-north winter solar stay empty rather than noisy.base_nonpositive/base_near_zero: CR is undefined when BASE ≤ 0, and suppressed when |CR| ≥ 10 — a near-zero baseload day makes the ratio a division artifact, not a statistic. MV and SPREAD still publish.plausibility_hold: CR outside the physical band (solar -0.5–1.3, wind -0.5–1.4) or MV outside the period's [min p, max p] — held for review, never silently published.
Forward capture (labeled bias)
The v0 forecast multiplies our P50 generation profile by our P50 price profile at native resolution, 1–7 days ahead. This captures the diurnal covariance (most of the effect) but misses day-type covariance — sunny days are also low-price days beyond the diurnal pattern — so v0 tends to run high in high-renewables regimes. That bias is printed wherever the number appears; a bias-corrected v1 runs in shadow and is scored walk-forward on realized capture like every Volt model. Realized-vs-forecast scoring is public from day one.
Reconciliation vs official EEG Marktwerte
For DE-LU we reconcile our monthly MV per technology against the official Netztransparenz Marktwerte used for EEG settlement. Expected residual deltas come from basis differences (15-min vs hourly, ENTSO-E vs TSO generation series, Luxembourg inclusion); the public tolerance is set from measured data, not promised in advance.
Measured (first 12 months, honest read): agreement is tight in ordinary months (June 2026 solar: +0.4%) and diverges in heavy negative-price months (April 2026 solar: +45% on a €13/MWh official value — €5.9/MWh absolute). The divergence is systematic and directional: the official calculation weights by the TSOs' own EEG feed-in estimate, which attributes more (largely distributed) solar to the negative midday hours than ENTSO-E's A75 series does, pulling the official value further down exactly when prices are negative. Wind deltas run +6–12%. We publish the table as measured and are investigating the generation-basis gap before putting a tolerance number in marketing copy — the reconciliation is the trust story, so it stays raw until it's understood.
| Month | Tech | Official | Voltcast | Δ |
|---|---|---|---|---|
| 2026-06 | wind onshore | 78.55 | 86.63 | 10.3% |
| 2026-06 | wind offshore | 79.79 | 89.29 | 11.9% |
| 2026-06 | solar | 61.90 | 62.12 | 0.4% |
| 2026-05 | wind onshore | 95.34 | 101.51 | 6.5% |
| 2026-05 | wind offshore | 92.35 | 100.48 | 8.8% |
| 2026-05 | solar | 31.63 | 37.11 | 17.3% |
| 2026-04 | wind onshore | 57.18 | 71.55 | 25.1% |
| 2026-04 | wind offshore | 60.66 | 77.24 | 27.3% |
| 2026-04 | solar | 13.17 | 19.09 | 45.0% |
| 2026-03 | wind onshore | 75.37 | 79.77 | 5.8% |
| 2026-03 | wind offshore | 79.11 | 83.67 | 5.8% |
| 2026-03 | solar | 54.55 | 55.89 | 2.5% |
Licensing
Capture rates and market values are derived statistics computed by Voltcast from published auction results and ENTSO-E generation actuals — our own output; no NEMO redistribution question arises. Free to cite with attribution: “Voltcast Capture Index” + link.
Version log
- capture-v1 (2026-07-20): initial methodology — slot-grid computation, coverage gate, two-state lifecycle, plausibility bands, v0 forward estimate.
Latest frozen month: 2026-06.