In short: Every megawatt hour pushed through the cells consumes a finite quantity of battery life, so battery storage dispatch carries a cost inside each trade that never appears on the trade ticket. Pricing that cycle cost gives a break-even spread the trade has to clear once round trip efficiency is included, and a model that omits it takes too many cycles at too small a margin. The revenue stack competes with itself, because arbitrage, frequency response and reserve all draw on the same power capability and state of charge headroom. A backtest run on historical prices with the whole year visible produces the perfect foresight solution, which is an upper bound rather than an achievable operating result.
The optimiser recommends charging at 03:00 at 22 and discharging at 18:30 at 96. Seventy-four points of spread, twenty megawatt hours, and the trade looks obvious enough that nobody interrogates it. Run that logic for a year and the asset produces a revenue number that matches the business case, and a state of health at the first annual test that does not.
The gap is a cost that sits inside the trade and never appears on the trade ticket. Every megawatt hour you push through the cells consumes a finite quantity of cell life, that quantity has a market value because it could have been spent on a better spread later, and a dispatch model that omits it will take too many cycles at too small a margin.
The dispatch decision written down
Strip the problem to its structure and it is small. For each period in the horizon you have a charge quantity and a discharge quantity, both bounded by the inverter's power rating and by the length of the period. You have a state of charge that carries between periods: today's closing state equals yesterday's closing state, plus charging times the charging efficiency, minus discharging divided by the discharging efficiency. The state has to stay between an operating floor and ceiling. The objective is the revenue from discharging minus the cost of charging minus the cost of the degradation you caused.
Written this way it is a linear program with an intertemporal coupling constraint, and the coupling is the whole difficulty. Without the state of charge equation each period is independent and the answer is trivial. With it, a decision to charge at 03:00 removes the ability to charge at 04:00 if the battery is already full, so the value of any single action depends on the entire path.
That structure has two implications worth stating plainly. The dual variable on the state of charge constraint in each period is the marginal value of a unit of stored energy at that moment, which is the most useful diagnostic output the model produces and is almost never shown to anyone. And the problem is solved over a horizon, so the horizon length and what you assume about the value of energy left in the battery at the end of it will move the answer materially.
What a cycle costs before you take it
Begin with the crude version, because it gets you most of the way and takes two minutes.
Take a 20 MWh system with an installed cost of 250,000 per MWh, so 5 million of capital in the storage itself. The supplier warrants a throughput to end of life of 6,000 full equivalent cycles before capacity falls to a defined retention level. Six thousand cycles at 20 MWh is 120,000 MWh of discharged energy across the asset's life.
Divide. Every megawatt hour you discharge consumes about 41.70 of capital. That is the first-order degradation cost per MWh delivered, and it belongs in the objective function as a charge on discharging, not in a depreciation schedule that the optimiser cannot see.
Some operators object that capital is sunk and marginal cycling is therefore free. That argument holds only if you would otherwise never reach the throughput limit. If the asset is throughput-constrained rather than calendar-constrained over its economic life, every cycle taken today is a cycle unavailable in a later, better year, and the cost is an opportunity cost rather than a cash one. The way to tell which regime you are in is to project total throughput at your current dispatch intensity against the warranted figure. If you will exhaust the warranty before the calendar life, the cycle has a price.
The spread that has to clear
Now put the efficiency in and get the number that should govern every trade.
Round trip efficiency of 86 percent at the point of connection means delivering 1 MWh requires charging 1.163 MWh. So a discharge at price D covers its costs when D exceeds 1.163 times the charge price, plus the 41.70 degradation charge, plus any variable operating and market fees.
At a charge price of 30, the break-even discharge price is 34.90 plus 41.70, which is 76.60. The required spread is roughly 47 per MWh. Every spread narrower than that destroys value however positive it looks on a simple subtraction, and a naive optimiser that sees a 40 point spread and takes it is paying for the privilege.
Two things fall out of that arithmetic that are worth checking against your own operation.
The number of profitable trading opportunities in a year is much smaller than the number of positive spreads, and the distribution of daily spreads has a long right tail. Most of the annual revenue comes from a modest number of days. That shape means a strategy that cycles hard on ordinary days can arrive at a high-spread day with warranty headroom already consumed, which is the failure this whole calculation exists to prevent.
And the break-even spread is a lever the commercial team can act on. Halving the degradation charge, whether through a longer warranty, a cheaper augmentation plan or a chemistry with more throughput, moves the threshold from 47 to 26 and roughly doubles the number of days the asset can trade.
The revenue stack competes with itself
Storage assets are sold on stacking: energy arbitrage, frequency response, capacity payments, network deferral, ancillary reserve. The stack is presented as additive and it is not, because the layers compete for the same two scarce resources, which are power capability and state of charge headroom.
A frequency response obligation requiring the ability to move in either direction at full power means holding the state of charge in a band away from both ends. Reserve a quarter of usable capacity above and a quarter below, and the range left for arbitrage is halved, which halves the energy you can shift on any given cycle. The frequency service has to pay more than the arbitrage revenue it displaces, and whether it does depends on the day.
The correct treatment is to solve the allocation across services jointly rather than committing to a service and dispatching the remainder. That means one optimisation with the state of charge shared across all products, availability constraints for each service, and penalties for failing to deliver a committed service. The output is a schedule that switches between products across the day rather than a fixed split.
The reason most operators do not do this is that the products have different gate closure times and different commitment horizons. You commit frequency response before you know the intraday energy prices, which makes the joint problem a stochastic one rather than a deterministic one. That is the honest description and it points at the next section.
Backtests with hindsight prices are a sales document
Every storage optimiser demonstration I have seen runs on historical prices with the whole year visible. That produces the perfect foresight solution, which is a genuine upper bound and a completely unachievable operating result.
The gap is large and it is measurable. Re-run exactly the same optimiser in a rolling horizon, where at each decision point it sees only a price forecast for the next horizon and the actual prices are revealed afterwards, then compare realised revenue. The difference between the two runs is the cost of not knowing the future, and it is the honest version of the number in the business case. In the stochastic programming vocabulary set out by Birge and Louveaux in Introduction to Stochastic Programming, the difference between the perfect information solution and the solution under uncertainty is the expected value of perfect information, and it bounds what any forecasting improvement could ever be worth to you.
A second comparison is worth running alongside it. Solve the rolling horizon using the expected price path only, then solve it against a set of price scenarios, and compare. That difference is the value of the stochastic solution, and it tells you whether modelling the uncertainty explicitly is worth the complexity for your price regime. In volatile markets with fat-tailed spreads it usually is, because a plan built on the mean systematically fails to hold charge for the tail events that carry the year.
Insist on both numbers before signing anything. A vendor who can only show the hindsight run has not established that their optimiser beats a simple threshold rule under real conditions.
Degradation beyond a flat per-MWh charge
The 41.70 figure treats every megawatt hour as equally damaging, which is a useful approximation and a wrong one.
Cell ageing has a calendar component that accrues whether you cycle or not, and a cycling component that depends on depth of discharge, average state of charge, temperature and rate. Shallow cycles are disproportionately cheap per unit of energy moved, high average state of charge accelerates calendar ageing, and heat accelerates everything. Xu, Oudalov, Ulbig, Andersson and Kirschen published a semi-empirical model in IEEE Transactions on Smart Grid in 2018 that decomposes these effects and uses rainflow cycle counting, borrowed from metal fatigue analysis, to identify cycles within an irregular state of charge trajectory.
Bringing that into a dispatch optimiser has a catch worth knowing before you commit engineering time. Rainflow counting is a path-dependent, non-convex function of the state of charge trajectory, so it cannot be dropped into a linear program directly. The workable approaches are a piecewise linear approximation of degradation against depth of discharge, or an outer loop that dispatches with a flat charge, evaluates the true degradation of the resulting trajectory, and updates the charge until it converges.
Whether that refinement earns its cost depends on how much of your dispatch consists of shallow cycles. An asset doing one deep cycle a day is described adequately by the flat figure. An asset providing frequency response with hundreds of shallow excursions is not, and the flat charge will overstate its degradation substantially, causing the optimiser to decline services it should be taking.
The limit
The whole calculation rests on a warranted throughput figure and a degradation model that come from the supplier, and both are estimates about a chemistry operating in conditions the test programme approximated. The uncertainty on the cycle life number is wide enough that the break-even spread computed above should be treated as a range rather than a threshold. Run it at the warranted figure, at seventy percent of it, and at a hundred and thirty percent, and if your dispatch strategy changes materially across that range, you have found the thing worth measuring on your own asset.
Measuring it is slow. State of health is established by capacity tests that take the asset out of the market, so the feedback loop between how you dispatch and what it did to the cells runs at whatever cadence your testing regime allows, which is usually annual. For the first two years you are operating on a model you cannot yet validate.
There is a connection constraint sitting underneath all of it too. An asset whose export is capped below its inverter rating, or whose energisation date depends on a queue position, has a dispatch envelope set by something other than the price curve, and that is a separate problem covered in CC5.
Take your last twelve months of actual dispatch, count the megawatt hours discharged, divide by rated capacity to get full equivalent cycles, and compare that against the annual rate your warranty allows.