VOLTSTACK.ENERGY
Methodology Guide
voltstack.energy | London, UK
Version 1.3 · Updated 31 July 2026
Reference · Methodology Guide v1.3

Methodology Guide

How every number on the Voltstack terminal and Data API is produced: what is measured, what is derived, what is modeled, and how each of those states is declared to you. Companion to the Data Dictionary (field-level reference) and the API Specification (transport and endpoints).

Scope Live feeds, settled history, derived measures, modeled figures
Principle A value is real, or it is declared — never silently fabricated
Revision Version 1.3 · Updated 31 July 2026
Contact data@voltstack.energy
01 — The Data-Integrity Model

Every payload declares its own provenance through the response envelope (API Specification §4). Three states exist, and consumers can always tell which one they are looking at:

StateMeaningHow it is declared
MeasuredReal upstream data, passed through with unit conversion and aggregation only.live: true; upstream named in meta.upstream.
DerivedComputed from measured data by a documented method (e.g. realized volatility, the five-year band).live: true; the derivation is named in meta.upstream and specified in this guide.
ModeledAn assumption, not an observation (e.g. merit-order marginal costs). Never blended into measured fields.Labeled as modeled in the payload's documentation and in the terminal UI, regardless of live status.

When a real value cannot be served, the response is a declared fallback — live: false with a machine-readable reason — never a stale or invented number presented as fresh. Composite figures follow an AND-gate: a payload built from several inputs is marked live only when every input is real. The merit-order stack, for example, requires real capacity, real derates and real demand together; two out of three is a fallback, not a partial truth.

VOLTSTACK METHODOLOGY GUIDE§1 · INTEGRITY MODEL
02 — The Settled Archive

History endpoints are served from Voltstack's own settled archive, not from request-time calls to the upstream. An ingestion worker persists each feed's settled values on the upstream's own publication cadence; one-off backfills seed the depth. The same persisted series feeds both the live headline figure and its history — one source of truth, never two independently maintained pipelines that can disagree.

SeriesUpstreamArchive depth
Day-ahead prices (11 zones)ENTSO-E A44~2 years, extended daily
Generation by fuel (8 countries)ENTSO-E A75Rolling, extended hourly
Installed capacity / outages / loadENTSO-E A68 · A77+A80 · A65Yearly · event-driven · hourly
EU gas storageGIE AGSI+From 2015-01-01
EU LNG send-out & fullnessGIE ALSI+From 2015-01-01
Commodity benchmarks (5 series)FREDFrom 2015-01-01
GB N2EX day-ahead auctionNord Pool N2EX portalFrom 2026-05-18, accrues daily
Core FBMC MaxBexJAO Publication Tool365-day backfill, extended daily
German redispatch eventsnetztransparenz.deFrom 2024-07
German settled imbalance (AEP)netztransparenz.deFrom 2022
Norwegian reservoir fillNVE MagasinstatistikkFrom 1995, weekly
EUA primary auctionsEEX (licensed)From 2020, auction-day cadence

Honesty clamp: oldestAvailable

A history request never silently returns a shorter series than asked. Every history payload reports oldestAvailable — the earliest real row held, independent of the requested window (per series for commodities, since daily and monthly cadences clamp at different depths). When real coverage starts later than the requested from, the terminal renders "history since X" instead of pretending the full window arrived.

Data age

meta.dataAgeSeconds counts from the moment the underlying persisted data last changed (the worker's ingestion timestamp), not from when the response was computed. It is recomputed on every response — including cache hits — so a cached payload never freezes or hides its own age.

Point-in-time capture

The settled archive keeps one value per delivery interval; a source revision replaces it. Two capture layers sit alongside it. Event-grade series (REMIT urgent market messages, unit outages, redispatch) retain every republished version with its publication timestamp, since 2026-07-14. Since 2026-07-31 an append-only vintage sidecar also records each capture pass of the four forecast feeds (daily weather, forecast risk, the GB NESO forecast, the FR RTE forecast), keyed by the pass's capture timestamp. The as-of query API over these vintages follows in a later revision; no derivation in this guide reads vintages yet.

03 — Resolution, Completeness & Gaps

Day-ahead resolution is not assumed. The single day-ahead coupling moved from hourly (PT60M) to quarter-hourly (PT15M) market time units on 2025-10-01, so a history window can be hourly, quarter-hourly, or genuinely mixed. Resolution is inferred from the actual spacing between consecutive points in each response, and the quality figures follow from it:

04 — Daily Baseload Average

Long-range price charts and every derived measure in §5 use the daily baseload average: the mean of all delivery-slot prices in the UTC calendar day, whatever the underlying resolution. On the 1-day view, four quarter-hourly prices average into one hourly bar for legibility. A price, like any rate, is honestly summarized by an average over a shorter window — unlike an energy quantity (MWh), which would need summing instead.

VOLTSTACK METHODOLOGY GUIDE§2–4 · ARCHIVE & PRICES
05 — Realized Volatility

Why not implied volatility: no freely redistributable options data exists for European power or gas, so a strike/tenor implied-vol surface cannot be built honestly. Voltstack publishes a realized measure derived from its own settled day-ahead archive instead, and labels it as such.

Why not log returns: EU day-ahead prices go negative routinely — every zone Voltstack tracks has real negative-price hours on record. ln(P_t / P_t−1) is undefined the moment either price is zero or negative, so the equities-style annualized log-return vol is unusable here — not merely fragile.

vol(w, d) = sample std dev ( ΔP over the trailing w real trading days ending at d )
where ΔP = (day-N daily baseload average) − (day-N−1 daily baseload average), in ccy/MWh
06 — The Five-Year Storage Band

The EU gas-storage "normal range" is computed, not simulated. For each display day, the band is the min / max / average of the same calendar month-day across the five years strictly before that day's own year:

07 — Why LNG Send-Out Has No Band

Underground storage follows a repeatable seasonal shape (inject in summer, withdraw in winter), which is what makes a five-year band a meaningful "normal range". LNG send-out does not: it is driven by spot-arbitrage economics — inter-basin price spreads, freight, and terminal slot availability. A min/max/avg band over that series would dress noise up as a norm, so the LNG history endpoint publishes the real trend only.

VOLTSTACK METHODOLOGY GUIDE§5–7 · DERIVED MEASURES
08 — The Merit-Order Supply Stack

The merit-order curve is assembled from three measured inputs plus one clearly-labeled modeled layer:

InputSourceRole
Installed capacity per fuelENTSO-E A68 (yearly)Block widths, per reference year
Active deratesENTSO-E A77 + A80 outage messagesUnavailable MW, subtracted per fuel
Latest actual loadENTSO-E A65 (hourly)The demand line
Marginal costsModeled assumptionBlock heights — never a market quote

Reference-year rule

One reference year is chosen per country — the most recent calendar year any fuel reports capacity for — and only fuels with a row in that year enter the stack. Taking each fuel's own all-time-latest row independently would resurrect retired fleets (Germany's nuclear exit is the live example: a per-fuel-latest read shows a phantom ~4 GW nuclear block from pre-shutdown years). Excluding a retired fuel entirely is the honest behavior; carrying a stale figure forward is not.

Derates and the AND-gate

Available MW per fuel = installed − the sum of currently active derates (latest version per outage message), floored at zero. Derate collection covers all eight merit-order countries (DE, FR, ES, IT, NL, NO, SE, PL). The AND-gate still applies: a zero derate read only counts as real for a country the collector actually asks about — the stack is marked live only where capacity, derates and demand are all real, and falls back otherwise.

Modeled marginal costs

FuelEUR/MWhFuelEUR/MWh
wind0biomass25
solar0coal42
hydro5gas68
nuclear8oil120

Fixed short-run assumptions for ordering the stack, carried with a permanent "costs: modeled" label in the terminal regardless of live status. The indicated clearing price is the modeled cost of the marginal fuel where cumulative availability meets demand — an illustration of the stack, not a price forecast. Fuels are eight buckets: ENTSO-E reports one MW figure per production type, so gas cannot be split into CCGT/OCGT cost tiers on real data.

09 — Caching & Freshness

Server-side cache TTLs are matched to each upstream's true publication cadence — polling faster than the TTL returns the cached value with cached: true, and meta.dataAgeSeconds keeps counting from the real ingestion timestamp either way. TTLs per domain are tabulated in the API Specification §7.

Degree days: HDD/CDD are computed at read time from the persisted forecast against a base of 18°C (EU) / 65°F (US) by default. An optional per-request base (°C, clamped 5–30) re-bases both; the base joins the cache key so different bases never share a cached value.

10 — Simulated Data

Where a real input does not exist yet, the terminal falls back to simulation — and says so. The Data Sources panel groups every connector by honesty tier (Live · Awaiting Access · Simulated · Enterprise, plus an Available slot for tenant-configured custom REST integrations) so the first question it answers is what is real. A payload is either entirely real or a declared fallback; measured and simulated values are never blended inside one figure.

Methodology as at 2026-07-31. v1.3 · 2026-07-31: document version and date published as machine-readable meta tags (voltstack-doc-version, voltstack-doc-updated) and printed in the page header; the PDF edition is served alongside the HTML at /docs/. v1.2 — 2026-07-31: archive-depth table extended to the constraint & event layer, point-in-time capture section added, degree-day base documented, connector tier list completed. No derivation or model assumption changed in this revision; changes to any derivation or model assumption ship with a revision of this guide. © 2026 Voltstack.
VOLTSTACK METHODOLOGY GUIDEdata@voltstack.energy