Australia's National Electricity Market (NEM) sets a price by stacking every generator's bids from cheapest to dearest, then reading off where forecast demand lands on the stack. This is done every 5-minutes. We think the best way to learn is to see it yourself, so try using the tool below.
VRE Coal Gas Storage Demand forecast Solved spot price
How to read it
The NEM is an energy-only market, meaning generators earn only from the energy they actually dispatch, with no separate payment just for being available like you'd get in a capacity market. This makes energy-only markets much more volatile. Generators bid their output at a price; those offers are stacked cheapest-first (the merit order); and the spot price is set where demand meets the stack.
Everything to the left of the demand line is dispatched: those units are told to generate. The key thing is they all get paid the same spot price, not the price they bid. A coal unit or battery that offered well below the clearing price still earns the full spot price; its low bid just won it a place in the dispatch, and the gap between that price and its own running cost is its margin. (As always, the real market adds wrinkles, so it isn't always quite this clean.)
This is just one interval
Keep in mind this is a teaching tool, so it's deliberately simple. It shows a single interval: one snapshot of one region under one set of conditions. A real forecast is that same solve run at scale, with the network flows solved alongside it. Half-hourly across a year is 17,520 intervals; run that out to 25 years, across up to 5 scenarios (macro assumptions, like coal-retirement timing) and up to 15 reference years (weather-year variations, so different wind, solar and demand shapes), and a big forecast is north of 30 million intervals, with the weather kept correlated across every one of them.
Can you validate it on history?
We've been asked whether we check the model against history. It's a fair question, and yes, we do. But leaning on history is risky for longer-term forecasts, because the market itself keeps changing: more storage, more interconnection, shifting bidding behaviour. A model trained only on the past can't see a change it has never encountered, which is exactly why we build up from the fundamentals instead.