When Should a Battery Discharge? The Stored Megawatt-Hour Has an Opportunity Cost
At hour 17 the price is $78/MWh. The battery is full. Should it sell?
No. The best price still to come that day is $95, at hour 18. Selling at $78 forgoes $95, so the stored energy is worth $95 — and $78 is a loss of $17 against holding for sixty more minutes.
A stored megawatt-hour is never worth the current price. It is worth the best price still available, and that number changes every hour as the day runs out.
That is the difference between the charge decision and the discharge decision. Charging compares a price against a cost. Discharging compares a price against an alternative use of the same energy, which means it needs a view of the future in a way the charge rule does not.
This post builds the discharge decision: what the stored energy is worth, why threshold rules fail, and the concept borrowed from hydro that makes the whole thing tractable.
ℹ️ Note: The price shape is the representative day used throughout this series. Real dispatch operates on forecasts rather than on known prices — the gap between the two is the subject of the final post.
What Is the Discharge Decision?
Whether to convert stored energy into cash now, or keep it for a better hour later. It is an allocation problem across time, not a price test.
The energy in the battery is a finite resource with competing future uses. Selling it now means it is not available at the evening peak. So the decision rule is a comparison, not a threshold:
Discharge now if: Price_now ≥ Value_of_holding
Everything then turns on what Value_of_holding is.
The Value of Stored Energy
For a single day with known prices, it is simply the best price remaining:
Value_of_holding(hour h) = MAX(prices from h+1 to end of day)
Run that against the representative day, over the evening:
| Hour | Price | Best still to come | Decision | Margin |
|---|---|---|---|---|
| 14 | $14 | $95 | HOLD | −$81 |
| 15 | $26 | $95 | HOLD | −$69 |
| 16 | $48 | $95 | HOLD | −$47 |
| 17 | $78 | $95 | HOLD | −$17 |
| 18 | $95 | $88 | SELL | +$7 |
| 19 | $88 | $64 | SELL | +$24 |
| 20 | $64 | $45 | SELL | +$19 |
| 21 | $45 | $33 | SELL | +$12 |
| 22 | $33 | $27 | SELL | +$6 |
| 23 | $27 | — | SELL | +$27 |
The rule refuses $78 and accepts $33. That is not a mistake — it is the whole point. At hour 17 there was something better coming. At hour 22 there was not.
The value of holding falls as the day runs out. By hour 23 there is no future left, so any positive price beats holding. This is why a flat threshold cannot work: the correct threshold is a declining function of time remaining.
Why Threshold Rules Fail
A simple rule — "sell above $60" — would have sold in hours 17, 18, 19 and 20 on this day.
The optimal four-hour discharge window is hours 18, 19, 17 and 20 — the same set, in this instance. So on this particular day the threshold rule performs well.
It fails in three predictable circumstances, and each is common.
When the price level shifts. A $60 threshold in a market that reprices to a $90 average sells nothing at all, and in one that drops to $25 sells everything immediately. The rule encodes a price level rather than a relationship.
When the peak is early. If the day's best hour comes at 08:00 and a threshold rule holds out for something better, it discharges into a declining afternoon. The rule has no way to know the best hour has passed.
When the battery is not full. A threshold rule says nothing about how much to sell. With two hours of energy and four hours above the threshold, the rule gives no guidance on which two — and picking the first two rather than the best two is a common and expensive default.
The Water Value
The concept that makes this tractable comes from hydro scheduling, where the same problem has been solved for decades.
A reservoir operator faces exactly this question: release water now to generate, or hold it for a higher price later. The answer is expressed as a water value — the marginal value of a unit of stored water, given everything expected to happen for the rest of the season.
Once you have a water value, the operating rule becomes trivially simple:
Generate whenever the market price exceeds the water value.
All the difficulty moves into computing the value, which is where it belongs. A battery's stored megawatt-hour has exactly the same structure, with a shorter horizon:
Storage_Value(SoC, time) = expected marginal value of one stored MWh
given state of charge and time remaining
Discharge if: Price_now ≥ Storage_Value + Degradation_Cost
Note that the degradation cost from the previous post appears here too. Discharging consumes throughput regardless of when it happens, so it sits on the discharge side of the comparison as well.
Two properties of the storage value are worth knowing, because they drive the behaviour that distinguishes good dispatch from mediocre dispatch.
It falls as time runs out. With no future hours left, holding is worthless and any price clears.
It falls as state of charge rises. A nearly empty battery holds its last megawatt-hour for the very best hour. A full one has energy to spare and can afford to sell into merely good hours. The marginal unit is worth less when there are more of them — which is why the rule must depend on the state of charge, the subject of the next post.
The Horizon Problem
How far ahead should the rule look?
Too short and it sells into a local peak, missing a better one just beyond the window. Too long and it holds energy for a price so distant that the forecast supporting it is worthless.
Practical dispatch models scale the horizon to the asset. One published approach sets the optimisation window by duration:
| Duration | Look-ahead window |
|---|---|
| Up to 4 hours | 24 hours |
| 4–6 hours | 48 hours |
| Above 6 hours | 72 hours |
The logic is that longer-duration batteries need a longer look-ahead so the optimiser can plan full charge and discharge cycles across multiple days. A ten-hour asset physically cannot complete two cycles inside a day, so a 24-hour window would systematically mis-schedule it.
That scaling has a consequence worth noting: longer assets are more exposed to forecast error, because more of their value depends on prices further out. The duration decision from earlier in this series therefore carries a hidden operational cost that the marginal-hour calculation does not capture — and it is a reason the practical optimum may sit slightly shorter than the theoretical one.
The Multi-Day Case
Where the horizon extends beyond a day, a further effect appears that single-day analysis misses entirely.
Energy can be held across days. A battery facing a weak Tuesday and a volatile Wednesday should arrive at Wednesday charged, which may mean declining perfectly acceptable Tuesday spreads. The storage value on Tuesday evening is set by Wednesday's expected peak, not by Tuesday's remaining hours.
That is genuinely counterintuitive in operation: the asset sits idle through hours that clear the minimum spread from the previous post, because a better use of the same throughput is coming. It looks like underperformance and is the opposite.
It also connects back to the cycle budget. With a finite number of cycles a year, the question is never merely "is this spread profitable" but "is this spread among the best uses of a scarce cycle." The storage value framework answers both at once, which is its main advantage over a threshold.
The Storage Value Is Your Bid Curve
The most useful operational consequence, and the point at which this stops being theory.
A battery does not usually decide hour by hour whether to discharge. It submits offers into a day-ahead or real-time market and the market decides. So the question is not "should I sell now" but "at what price am I willing to sell" — which is exactly what the storage value is.
Offer to sell at: Storage_Value(h, SoC) + Degradation_Cost
If the market clears above that, the offer is taken and selling was the right decision. If it clears below, the offer is not taken and holding was the right decision. The rule executes itself, without anyone needing to forecast whether the peak has arrived.
That is a considerable practical advantage over a threshold. A fixed offer price is a bet on the market level; an offer at the storage value is a statement of indifference — the price at which selling and holding are equally good — and indifference prices do not need to be right about anything.
Three refinements follow naturally.
The offer curve has multiple steps, one per megawatt-hour of stored energy. Because the storage value falls as state of charge rises, the first megawatt-hour is offered high and the last is offered low. A full battery submits a downward-sloping offer curve rather than a single price, and the market takes as much as clears.
Charging works identically in reverse. The bid to buy is the storage value plus what the energy would be worth stored, adjusted for efficiency — a rising bid curve, taking more energy as the price falls.
The curve is recomputed every interval. As time passes and the horizon shortens, the storage value falls, and the offers follow it down automatically. No intervention, no judgement about whether the peak has passed.
This is why the valuation framing matters more than the rule. A storage value produces an offer curve; a threshold produces a number. Markets take curves.
Being Wrong Is Not Symmetrical
Worth understanding, because it should bias the rule slightly.
Two ways to be wrong. Selling too early means missing a higher price that came later. Holding too long means selling into a declining market, or not selling at all.
They are not equally costly, and the reason is the shape of the price distribution.
Electricity prices have a fat upper tail. Most hours cluster in a narrow band; a small number of hours are extraordinary. The Series C posts documented scarcity events at thousands of dollars per megawatt-hour against a typical range in the tens.
So the cost of selling too early is drawn from a distribution with a long right tail — occasionally you miss something enormous. The cost of holding too long is drawn from the body of the distribution — you sell at $33 instead of $45, and the loss is bounded by the ordinary spread.
Holding therefore carries option value beyond its expected value, and a rule computed on expected prices alone will discharge slightly too early.
Two practical responses.
Compute the storage value on the distribution, not the mean. The value of holding is the expected value of the maximum of remaining prices, and the maximum of a fat-tailed distribution sits well above its mean.
Reserve a slice of capacity for scarcity. Some operators hold a portion of state of charge back specifically for extreme events, accepting a lower base case in exchange for the tail. Whether that is worth doing depends on how often the node actually produces scarcity — which is a question the price history answers directly.
The general form: a storage value computed on average conditions is a lower bound on the true value of holding, and the gap is the tail.
How Fast, Not Just When
One more dimension the hour-by-hour framing hides: the battery chooses a rate as well as a timing.
A 100 MW battery with 400 MWh does not have to discharge at 100 MW. It can deliver 50 MW across eight hours, or 100 MW across four, or 25 MW across sixteen. The storage value framework handles this automatically — each megawatt-hour is offered at its own value, and the market takes what clears — but the consequences are worth drawing out.
Spreading discharge captures more hours at lower prices. Concentrating it captures fewer hours at higher prices. Which is better depends entirely on the shape of the peak: a sharp single-hour spike rewards concentration, a broad evening plateau rewards spreading.
The power rating caps concentration, not spreading. As the power-sizing post established, a battery can always go slower. It can only go faster up to its inverter rating — which is why the power decision is about the ability to concentrate into the very best hours.
Rate affects degradation. Discharging at full power runs the asset at its maximum C-rate, generating more heat and, for most chemistries, more degradation per megawatt-hour than a gentler discharge. So a strictly optimal rule would price the throughput cost as a function of rate rather than as a constant.
That last point is usually ignored, and defensibly so — the effect is second-order compared with the price spreads being captured. But it is the reason a warranty specifies a maximum C-rate as well as a cycle count, and it means an operating strategy that habitually discharges at full power is consuming its warranty faster than the cycle count alone suggests.
The practical treatment is to let the offer curve determine the rate implicitly, and to monitor realised C-rate against the warranty assumption as an operating metric rather than trying to optimise it directly.
How Do You Build the Discharge Rule in Excel?
As a backward recursion over the horizon, which is simpler than it sounds.
The single-day version
For the last hour of the horizon:
Storage_Value(T) = 0 (no future left)
Working backwards from T−1 to now:
Storage_Value(h) = MAX( Price(h+1) − Degradation, Storage_Value(h+1) )
Decision at hour h:
Discharge if Price(h) − Degradation ≥ Storage_Value(h)
That recursion is a single column in a spreadsheet, filled upward, and it produces the optimal policy for a known price path.
The state-of-charge extension
Storage_Value(h, SoC) — a table rather than a column
For each hour and each level of charge:
value of the marginal MWh given how many are left
This is where the calculation becomes two-dimensional and where the next post picks it up.
The outputs to publish
PF_StorageValueCurve by hour, over the horizon
PF_DischargeHours which hours the rule selects
PF_ForegoneRevenue value of hours declined
PF_HorizonSensitivity result at 24h vs 48h vs 72h look-ahead
The last is a genuine robustness test. If the answer changes materially between a 24-hour and a 48-hour horizon, the strategy depends on forecasts at a distance where they are unreliable — which is information about the risk in the revenue, not just about the dispatch.
ℹ️ Note: Build the discharge rule as a comparison against a computed storage value, never as a price threshold. A threshold is a storage value frozen at one price level, and it silently becomes wrong the moment the market moves.
To build the storage value curve, the backward recursion and the horizon sensitivity, prompt Dezzmond with your price series, duration and degradation cost.
What Do Operators and Lenders Actually Check?
- Is the discharge rule a threshold or a computed storage value?
- What look-ahead horizon is used, and does it scale with duration?
- How much does the answer change between a 24- and 48-hour horizon?
- Does the rule account for degradation on the discharge side as well as the charge side?
- Can energy be held across days, and does the model permit it?
- Does the storage value fall with state of charge? It must.
- What revenue is being declined, and is declining it deliberate?
Frequently Asked Questions
What is a stored megawatt-hour worth?
The best price still available within the horizon, less the degradation cost of delivering it. Not the current price — which is why a battery should refuse $78 at hour 17 if $95 is coming at hour 18.
Why do price threshold rules fail?
Because they encode a price level rather than a relationship. They break when the market reprices, when the day's peak comes early, and they give no guidance on how much to sell when fewer hours of energy are available than hours above the threshold.
What is a water value?
The marginal value of stored water in hydro scheduling, given everything expected for the rest of the season. The operating rule becomes "generate when price exceeds the water value," and a battery's stored energy has the same structure over a shorter horizon.
How far ahead should a dispatch model look?
Scaled to duration. A published approach uses 24 hours up to four-hour assets, 48 hours for four to six, and 72 hours above six — because longer assets need to plan cycles across multiple days.
How does the storage value become a market offer?
Directly. Offer to sell at the storage value plus degradation cost and the market decides — clearing above means selling was right, clearing below means holding was. Because the value falls with state of charge, a full battery submits a downward-sloping offer curve rather than a single price.
Is selling too early as costly as holding too long?
No. Electricity prices have a fat upper tail, so missing a high hour is drawn from a distribution with occasional extreme values while selling into a declining market is bounded by the ordinary spread. Holding therefore carries option value, and a rule built on average prices discharges slightly too early.
Why does the storage value fall as the battery fills?
Because the marginal unit is worth less when there are more of them. A nearly empty battery saves its last megawatt-hour for the very best hour; a full one can afford to sell into merely good ones.
Closing: The Price Is Not the Question
The charge decision and the discharge decision look symmetrical and are not. Charging compares a price against a known cost — the efficiency loss and the throughput consumed — and both terms are computable today. Discharging compares a price against a forgone alternative, and the alternative is in the future.
That asymmetry is why discharge is the harder half, and why the useful framing is not a rule at all but a valuation. Compute what the stored energy is worth, and the rule becomes trivial: sell when the price beats it. All the analytical effort moves into the valuation, which is where it should be, and the operating policy becomes a single comparison that a control system can execute without a view on anything.
It also reframes what good dispatch looks like from the outside. A battery running the storage-value rule will decline hours that clear every profitability test in the previous post, and will sit idle through spreads that look attractive in isolation. That is not caution or malfunction. It is an asset with a finite resource declining to spend it on the third-best use when the best one is still coming.
The next post takes the constraint that makes all of this a scheduling problem rather than an hourly calculation: you cannot sell what you did not store, and state of charge links every hour to every other one.
Sources: Modo Energy — Battery Dispatch Model · Modo Energy — ERCOT: The Value of a Cycle for Battery Energy Storage Systems · Flex Power — Battery Storage Optimization: Value Stacking Explained · Timera Energy — What Battery Durations Are Investable?