Battery revenue simulator
A linear program over a synthetic year of hourly prices1, and what it says about how long a battery should be.
A grid battery makes its living the way a hibernating ground squirrel does. It takes in more than it needs when the taking is good, sits on the surplus, and spends it when nothing else is available. The squirrel's constraint is how much fat it can carry. The battery's is how many hours of energy it can hold. The question is the same in both cases. At what point does carrying more stop paying for itself?
What the model finds
| Duration | Net revenue, $/kW-year | Equivalent cycles | Hours at rated output |
|---|---|---|---|
| 2 hours | 98.1 | 1,361 | 1.85 |
| 4 hours | 107.1 | 786 | 3.71 |
| 8 hours | 111.0 | 424 | 7.42 |
Doubling from two hours to four buys about nine per cent more revenue. Doubling again from four to eight buys under four. On energy arbitrage alone the value of duration flattens hard past four hours2. The reason is unglamorous. There are only so many hours in a day when the price spread is worth crossing, and a longer battery cannot manufacture more of them.
The longer battery also cycles far less, which matters for a warranty argument even where it does not matter for revenue. The eight-hour case turns over about a third as many equivalent cycles as the two-hour case.
The same three durations, read as increments: the second four hours add well under half what the first two did. The panel on the right sets the best of them against an annualised capital cost3 — a scale to read the revenue against, not a verdict, since arbitrage is only one of the things a battery is paid for.
A summer week of dispatch. Charging fills the solar belly of the day; discharge meets the evening peak.
The same year, by month. Revenue is not spread evenly: July earns 2.4 times what January does, and June through September together take 43 per cent of the year from a third of its days. The battery is paid for the weeks when the spread is wide, which is the same reason the duration curve above bends where it does.
Sensitivity to round-trip efficiency and degradation cost.
The synthetic price series: duration curve and average daily shape.
Method
This model dispatches a one-megawatt battery against 8,760 hourly prices by linear programming4, in monthly blocks with the state of charge carried across the joins. Every megawatt hour of throughput is charged a cycling cost5, so the optimiser cannot trade for free, and round-trip efficiency is split symmetrically as the square root per leg.
The price year is synthetic. It is 8,760 hours generated from a fixed seed and calibrated to the shape of ERCOT's day-ahead prices — the daily and seasonal swing, and the scarcity spikes that carry most of the revenue. It is not a record of any real year, and every number and figure here is a figure of that series.
The code
Python reference implementation using an open solver, a JuMP and HiGHS port, an Octave port, and the dispatch workbook. The archive holds the source only: no generated figures, no bulk
data. Each model runs from its own README.md.
Sources
- ERCOT, Day-Ahead Market Settlement Point Prices, historical archive.The price shape the synthetic year is calibrated to reproduce.
- Denholm et al., The Four-Hour Challenge, National Renewable Energy Laboratory, 2019.Why duration value flattens past four hours.
- NREL, Annual Technology Baseline 2024, utility-scale battery storage, 4-hour duration, Moderate scenario, Market case.The capital cost the right-hand panel compares against: $1,938/kW capex (overnight cost, grid connection and construction finance) plus $44/kW-yr fixed operations, annualised over the dataset's own twenty-year capital recovery period at an eight per cent real discount rate, for about $242/kW-yr. A representative figure for scale, not a quote for any particular project.
- Sioshansi, Denholm, Jenkin & Weiss, Energy Economics, 2009 - estimating the value of electricity storage under perfect foresight.The perfect-foresight dispatch formulation and its upper-bound character.
- Mongird et al., Grid Energy Storage Technology Cost and Performance Assessment, Pacific Northwest National Laboratory, 2020.Degradation cost per megawatt hour of throughput, and round-trip efficiency.