Skip to content
Vitali Giggy
Back to Work

107

ERCOT DART spreads

Year
2026
Status
Complete
With
Travis Giggy

VerdictStrong link, no predictive edge

Question

Can the day-ahead vs real-time power price spread at ERCOT be predicted from publicly observable forecast errors?

Why it matters

Texas power is priced twice: in a day-ahead auction, and again in real time. The difference, DART, is what virtual traders bet on. Day-ahead clears above real-time about 59% of the hours at every hub; that day-ahead premium is the thing any strategy has to beat.

If public forecasts of load, wind and solar could predict the spread before the auction closes, that would be an edge anyone could check. The second question was whether anyone actually makes money doing it.

Data

110,208 hourly observations: four ERCOT hubs (Houston, North, West, South) over 38 months, from 2023-06-10 to 2026-07-31, with day-ahead and real-time prices and the load, wind and solar forecasts that were published before each auction closed. The sample spans two market designs: the ECRS era, and RTC+B from 2025-12-05.

The spread is nowhere near normal. Excess kurtosis is about 450, and the top 1% of hours carry 30% of all absolute spread, so medians and rank statistics are used throughout.

The hub study was led by Travis Giggy. My part was reproducing it independently and running follow-up studies on it.

Method

An anti-lookahead audit gates everything: it checks that every forecast in the panel was published before the 10:00 CT day-ahead close it is used against. It first reported 96 violations; all were a daylight-saving bug in the audit's own date arithmetic, not in the data.

Stage A asks whether forecast errors explain the spread. Stage B asks whether anything known at bid time predicts it. Training ran from 2025-12-05 to 2026-04-30 (n = 14,108), testing from 2026-05-01 to 2026-07-31 (n = 8,832), strictly in time order, with model settings fixed in advance and never revisited. Ridge and gradient-boosting models on twelve bid-time features had to beat simple rules: always short the spread, always long, random sign. Edges were compared on the same hours with a 10,000-draw paired bootstrap, and standard errors were clustered by day, because hours within a day are not independent.

A second phase gave "more data" its best shot: train on the whole ECRS era (86,980 rows), test on the whole RTC+B era (22,940 rows), after checking with a day-block bootstrap that the mechanism was stable across the boundary.

Result

Stage A is a genuine positive result. Net-load forecast error has a Spearman correlation of −0.31 to −0.48 with the spread, with the sign physics predicts, and median spread falls almost monotonically across error deciles. But forecast error is only known on the operating day, after bids close, so it explains the spread without predicting it.

Stage B found nothing. Against "always short", ridge's edge was +0.048 $/MWh with a 95% interval of [−0.059, +0.164]; every model's interval straddles zero. Out-of-sample R² was −31.1 for ridge and −24.4 for boosting. With the larger training set, both models' hit rates fell below the 59.4% base rate. The models had learned "short the spread", which was already known.

The baseline itself does not survive. Over 12 months, clustering by day drops its t-statistic to 1.49, and removing the best 1% of hours flips its mean to −$0.28/MWh. Over 38 months the t-statistic rises to 2.50, but removing the best 1% of hours takes the mean to −$2.16/MWh.

Median spread by net-load forecast-error decile in two market eras. It falls from about $7.7 and $7.6 per MWh when the system is looser than forecast to negative when tighter: a strong link, but the error is only known after bids close.
Cumulative profit in the May to July 2026 test period. The ridge model tracks the naive "always short" line almost exactly and boosting ends below it: no model separates from the baseline.

Verdict

Strong explanatory link, no predictive edge. The causal channel is real and strong, but it is not predictable at hourly hub resolution from public forecasts, and the benchmark a model would have to beat is not robustly profitable either.

More data did not help, and a different market regime did not explain it away: the mechanism was stable across the boundary and 6.2 times the training data changed nothing. In a follow-up I pre-registered, trading only the hours with the biggest spreads failed even with perfect foresight of their size: in the primary sample it earned less than "always short" at every threshold tested.

What I’d try next

Stop asking whether the average spread is reliably positive: with a payoff this concentrated in a few days, studies of that question cannot tell an edge from noise at any obtainable sample size. The excess return that did show up in the data points at congestion modelling and information close to physical assets, which none of these studies was designed to test.

The other open route is beating ERCOT's own forecast rather than using it, since the market already prices the public one.

Code