Back to blog

June 30, 2026

Stop Bidding P50: The Newsvendor Logic of Renewable Day-Ahead Offers

renewable biddingCAISOday-ahead marketforecastingnewsvendor

Ask a renewable operator how they bid into the day-ahead market and the most common answer is some version of "we offer our best forecast." The best forecast usually means the median: the P50, the number the plant is as likely to beat as to miss.

It feels safe. It is almost never optimal.

The bid is a decision, not a forecast

A day-ahead offer is a financial commitment. If you commit 50 MWh for an hour and deliver 40, you buy the missing 10 back at the real-time price. If you deliver 60, you sell the extra 10 at the real-time price. Either way, your deviation settles in real time, and your commitment settles at day-ahead.

That means the economics of your bid are governed by the difference between the two prices: the DA-RT spread. When day-ahead is expected to clear rich relative to real-time, over-committing is cheap and under-committing leaves money behind. When real-time is at risk of spiking, the penalty for a shortfall is severe and a conservative bid is worth its cost.

This is a classical problem. Operations researchers call it the newsvendor problem: choose a quantity before demand is known, facing asymmetric costs for overage and underage. The solution is not the median of your forecast. It is a quantile, and which quantile depends on the asymmetry.

Three corrections that move the answer

The textbook newsvendor gets you started. Three market realities move the optimal quantile further from P50.

The spread is conditional. The unconditional average DA-RT spread is close to zero, because convergence bidders arbitrage away any persistent gap. The value is in conditioning: system regime, weather, the shape of the solar ramp, expected congestion at your node. The spread distribution around a tight evening ramp looks nothing like a mild midday hour, and your bid should not either.

Your forecast error is correlated with the market. In a solar-heavy system this correction is not a footnote. On the days when every solar plant in the region over-produces, real-time prices sink, and they sink exactly when you have surplus to sell. On the days the fleet under-produces, you are buying back your shortfall into a tight market. This covariance between your production error and the spread systematically punishes aggressive bids, and the optimizer has to price it.

The floor is part of the bid. Renewable offer behavior at the bottom of the price range is set by tax credits: a plant earning a production credit is paid per MWh generated, so it rationally produces at negative prices down to roughly the negative of the credit value, while a plant on an investment credit typically floors near zero. In a market where midday negative prices and economic curtailment are routine, where your floor sits changes which hours are a bidding decision at all, and the optimizer needs to know it.

What this demands from the forecast

None of this works with a single-number forecast. Committing "the P65" only means something if your P65 is honest: if actuals fall below your stated P10 about ten percent of the time, below your P50 about half the time, and so on. That property is called calibration, and it is checked, not assumed.

Miscalibration converts one-for-one into settlement losses, because the entire strategy is "commit quantile q." A forecast with a great average error and dishonest tails will lose money for a quantile-bidding plant.

So the stack a renewable bidder actually needs has three parts: a calibrated probabilistic forecast of the plant's own production, a conditional distribution of the DA-RT spread at the plant's settlement node, and an optimizer that combines them, hour by hour.

The P50 bid ignores all three. It is the right answer only in a market with no spread, no covariance, and no floor. That market does not exist.