ED.BESS.RANGE
Battery spread time series — backtest BESS economics over time.
Signature
ED.BESS.RANGE([hours], [start], [end], [agg], [zone], [headers], [noDate])Description
Historical BESS spread aggregated over a window. Each underlying daily spread is SUM(N priciest hours) - SUM(N cheapest hours); the aggregation averages across days within the period.
Meaningful aggregations: 2=daily, 3=monthly, 4=quarterly, 5=semiannual, 6=annual, 7=total. Sub-daily aggregations (agg=0/RAW, "5min", "15min", "30min", or agg=1/H) are silently promoted to daily — the metric is daily by construction.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| hours | 1-12 | 4 | Battery duration in hours. |
| 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 | 2 (daily) | 2=daily, 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. |
| 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. |
Returns
Spill array — [period, EUR/MWh] rows.
Examples
=ED.BESS.RANGE(4, "2025-01-01",, 3)— 4h spread monthly average=ED.BESS.RANGE(8, "2025-01-01", "2025-12-31", 6)— 8h spread annual=ED.BESS.RANGE(2, "2024-01-01",, 7)— 2h total over the periodNotes
- DST fall-back day: the duplicate 02:XX civil hour is collapsed (AVG'd) so the day has 24 buckets instead of 25. Effect on the daily spread is typically <1%; spring-DST is unaffected (23 hours, no duplicate).