March 10, 2026
Following One Battery Trade From Forecast to Settlement
If you come to power markets from machine learning, the natural assumption is that the hard part is the forecast. Predict prices well, and the rest is plumbing. I spent some time tracing what actually happens to a single battery trade in the California ISO (CAISO), from bid construction through settlement, and I came away with the opposite conclusion. The forecast is one component in a long chain, and most of the engineering effort lives in the chain itself: bid formats, market timelines, telemetry, state of charge accounting, and settlement reconciliation.
Here is the lifecycle, using a concrete resource: a battery registered as 100 MW / 400 MWh, meaning it can charge or discharge at up to 100 MW and holds 400 MWh of usable energy. Under CAISO's non-generator resource convention, negative MW means charging, positive means discharging.
Before any bid: the registered machine
The battery cannot redefine itself in each bid. Its physical envelope is registered in advance: minimum and maximum operating levels, stored-energy limits in MWh, ramp rates, charging and discharging efficiencies, and ancillary-service capability. Every downstream system, from the market optimizer to the settlement engine, works against this static model. Getting it right is unglamorous configuration work with real financial consequences.
Constructing the bid
The night before the operating day, the operator solves an internal optimization: maximize expected energy and capacity revenue, minus charging cost, degradation, risk penalties, and nonperformance exposure. State of charge (SOC, the energy currently stored) couples every hour to every other hour, so the 24 hourly bids must be built jointly, not independently.
The output is not a schedule. It is a set of price and quantity preferences: for each trading hour, one monotone step curve with up to ten segments spanning the full range from maximum charge to maximum discharge. A curve might say: charge at 100 MW only if the price is below negative 20 dollars per MWh, sit idle between 30 and 80 dollars, discharge 25 MW around 100 dollars, and release the final block only above 400 dollars. That high final offer is not marginal cost. It is continuation value: the option value of keeping finite stored energy for a possible scarcity event later.
Translating a probabilistic price forecast into ten monotone segments per hour, validated against CAISO's bid rules, is itself a nontrivial encoding problem. A great forecast expressed as a bad curve loses money.
Day-ahead clearing
Bids close at 10:00 the day before. CAISO co-optimizes the entire next day: power balance, transmission constraints, ramp limits, battery SOC limits, ancillary services, and, since the 2026 Day-Ahead Market Enhancements, imbalance reserve and reliability capacity products. Around 13:00 the awards arrive: an hourly energy schedule (say, charge 80 MW at 14:00, discharge 60 MW at 18:00), capacity awards, and nodal prices.
Two distinctions matter here. The award is a forward financial position, not a physical command. And a capacity award does not inject energy; it reserves operating range and creates an obligation to keep that range available in real time.
Real-time rebidding and five-minute dispatch
Real-time bids close 75 minutes before each trading hour, one hour at a time. By then the operator knows more: actual SOC (perhaps 15 MWh below plan because midday charging was curtailed), a transmission outage, revised forecasts. Storage resources can also submit an end-of-hour SOC range, telling the market where inventory should finish, information a price curve cannot express.
CAISO then reuses that hourly bid repeatedly. The Fifteen-Minute Market produces financially binding quarter-hour schedules, and Real-Time Dispatch runs a security-constrained economic dispatch every five minutes, issuing a signed MW target called a Dispatch Operating Target (DOT). The same unchanged bid curve can yield dispatches of 25, 70, 40, then 100 MW across consecutive intervals, because the network state changes even when the bid does not.
The plant controller now has its own job: follow the DOT along a ramp trajectory while enforcing cell voltage, temperature, inverter limits, and regulation headroom, and stream SOC telemetry back to CAISO (received every four seconds, fed to the market roughly every minute). Quietly deviating from an instruction is not a rounding error; it creates uninstructed-imbalance exposure and compliance risk.
Settlement: four layers, not one
The trade is settled in layers, conceptually at five-minute granularity. The day-ahead schedule settles at the day-ahead price. The difference between the fifteen-minute schedule and the day-ahead position settles at the fifteen-minute price. The difference between the five-minute instruction and the fifteen-minute schedule settles at the five-minute price. Finally, any gap between metered output and expected instructed output settles as uninstructed imbalance energy.
A worked interval makes this tangible. Day-ahead 60 MW at 120 dollars, fifteen-minute schedule 75 MW at 165, five-minute expected output 70 MW at 180, metered 68 MW. The layers come to 600, plus 206.25, minus 75 (instructed down, so buying back 5 MW), minus 30 (the 2 MW underdelivery), for roughly 701 dollars in that five minutes. Real invoices add charge codes, no-pay rules, bid-cost recovery, and other adjustments on top.
Attribution closes the loop
This layered structure is exactly why settlement-grade P&L attribution matters. The operator should decompose results into forecast quality, optimization value, congestion and location effects, capacity revenue, degradation cost, dispatch slippage, and uninstructed deviations. Without that decomposition, a profitable day can hide poor dispatch performance, and a losing day can reflect a rational hedge against tail risk rather than a bad forecast. For anyone trying to train or evaluate models against this market, attribution is the label-generation process. If you settle P&L sloppily, you are fitting to noise.
The data engineering follows directly: keep bids, awards, instructions, telemetry, and versioned settlement statements as separate objects with publication timestamps, and never overwrite preliminary values with revisions, or your backtests leak the future.
The compact version of the whole lifecycle: register the machine, price the flexibility hourly, let CAISO clear tomorrow, rebid each hour with fresh information, follow signed five-minute targets, meter what actually happened, and settle every layer separately. The model sits in step two. Everything else is why the model's output means anything at all.