ED.CAPTURE.RANGE
Capture price (EUR/MWh) or capture rate (%) time series by technology.
Signature
ED.CAPTURE.RANGE([tech], [start], [end], [agg], [unit], [zone], [headers], [noDate], [method], [tz])Description
Capture price time series. Pair with ED.GEN.RANGE (production volumes) and ED.OMIE.RANGE (spot reference) on the same dates and agg to build a complete revenue picture.
Aggregation is controlled by agg: 0=native, 5min/10min/15min, 1=hourly, 2=daily (default), 3=monthly, 4=quarterly, 5=semiannual, 6=annual, 7=total.
With unit="pct" the spill returns the **capture rate** (capture / baseload × 100, %) gen-weighted in each bucket — the AFRY/EMBER/Aurora number.
**Granularity floor:** the underlying capture_daily series is daily by construction — there is no hourly capture price. Aggregations finer than daily (agg=0/RAW, "5min", "15min", "30min", or agg=1/H) are silently promoted to daily rather than rejected.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| tech | 1-6 | string | 1 (solar_pv) | Tech code or name (see table below). Capture is only computed for the 6 main techs. |
| start | date | — | Start. Defaults: omit end for today (Madrid, with a small overnight cutoff), omit start for 30 days before end. |
| end | date | — | End. Omit for today. |
| agg | 2-7 | string | 2 (daily) | Aggregation is controlled by agg: 0=native, 5min/10min/15min, 1=hourly, 2=daily (default), 3=monthly, 4=quarterly, 5=semiannual, 6=annual, 7=total. Sub-daily aggregations (0/RAW, 5min, 15min, 30min, 1/H) are accepted but silently promoted to daily — the metric has no sub-daily resolution. |
| unit | "" | "pct" | "" (EUR/MWh) | Output unit. Default returns capture price in EUR/MWh per bucket. "pct" returns the capture rate (capture / baseload × 100, %). |
| zone | "ES" | "PT" | "ES" | MIBEL zone. |
| headers | 0 | 1 | 0 | Set 1 for header row. |
| noDate | 0 | 1 | 0 | Set 1 to omit the period column. |
| method | 0 | 1 | 0 (realized) | 0=realized, 1=PBF (ES only). |
| tz | 0 | 1 | 2 | "madrid" | Accepted for parity with the other range functions, but **no-op here**: capture_daily is computed once per Madrid civil day, so the period buckets are the same regardless of tz. |
Valid values for tech
| Code | English alias | Description |
|---|---|---|
| 1 | solar_pv, solar, pv | Solar PV (uses gen_solar_pv as production weight). |
| 2 | wind, eolica | Onshore wind. |
| 3 | nuclear | Nuclear. |
| 4 | hydro, hidraulica | Reservoir + run-of-river hydro. |
| 5 | combined_cycle, ccgt, gas | Combined-cycle gas (CCGT). |
| 6 | coal, carbon | Coal-fired thermal. |
The add-in accepts either the canonical Spanish code or the English alias — both are equivalent.
Returns
Spill array — [period, value] rows. Value is EUR/MWh by default, or % when unit="pct".
Examples
=ED.CAPTURE.RANGE(2, "2025-01-01",, 6)— Wind annual capture price=ED.CAPTURE.RANGE(1, "2025-01-01", "2025-12-31", 3, "pct")— Solar monthly capture RATE (%) — the AFRY/EMBER series=ED.CAPTURE.RANGE(1, "2025-01-01", "2025-12-31", 3, , "ES", 1)— Solar monthly EUR/MWh with headers=ED.CAPTURE.RANGE("solar", "2024-01-01",, 3, , , 1, 0, 1)— Solar monthly PBF (ex-ante), EUR/MWh, with headersNotes
- **BREAKING in v8.0.0 (manifest 8.0.0.0)**: the
unitparameter was inserted betweenaggandzone. Calls that passedzone/headers/noDate/method/tzpositionally need an empty slot forunit. Example: v7=ED.CAPTURE.RANGE(1, A1, A2, 3, "ES", 1, 0, 1)(method=PBF) becomes v8=ED.CAPTURE.RANGE(1, A1, A2, 3, , "ES", 1, 0, 1). Calls that only passed the first four args are unaffected. - Capture rate (
unit="pct") per bucket is gen-weighted: SUM(capture × gen) / SUM(baseload × gen) × 100 — equivalent to the AFRY/EMBER/Aurora definition. - Granularity floor is daily — sub-daily
aggvalues are promoted, not rejected. If you need hourly EUR/MWh weighted prices, build them yourself viaED.OMIE.RANGE × ED.GEN.RANGEon hourly buckets. tzis a no-op for the same reason: the daily bucket is identical under Madrid / CET / UTC interpretation.