max(0, HSL − Base Point),
summed to MWh per hour. HSL = declared capability; Base Point = ERCOT dispatch instruction.
Captures congestion and oversupply curtailment even at positive prices.
Source: ERCOT 60-Day SCED Disclosure data — available ~61+ days in the past.
Rates, not levels: SCED switched ~Dec 2025 from 15-min to 5-min intervals. Prefer % of Potential for year-over-year. Absolute MWh are sampling estimates.
Dec 2025 triad — three unrelated changes near 2025-12-05; do not conflate:
Full write-up: Curtailment Report.
| Year | Q1 | Q2 | Q3 | Q4 |
|---|---|---|---|---|
| Loading… | ||||
sced_curtailment.py --start YYYY-MM-DD --end YYYY-MM-DD to backfill historical data.Solid lines = output | Dotted lines = curtailment / charging | Units: GW
Generation-weighted average real-time price (solar capture). Dropdown now includes nodes (e.g. GREGORY_RN) once downloaded.
Unweighted real-time hub price by clock hour, hourly capture-price spread (Wind − Solar $/MWh), and annual value factor (capture ÷ demand-weighted avg). CT approximated as UTC−6 (CST).
Gross downside $M = max(0, grid_avg − capture) × gen MWh. Curtailment pain $M = curtailed_MWh × HB_SOUTH DAM (hub proxy). Pain ratio > 1 ⇒ cannibalization dominates. 2026 = YTD/partial.
PRICE-PROXY buckets: voluntary = curtailed at DAM < 0; involuntary = DAM ≥ 0. Not ERCOT intent or nodal settlement. Hub fixed HB_SOUTH DAM.
Saturation = curtailment in belly hours (net load < 20 GW) ÷ total curtailment. Rising index with flat belly-hour share = same hours, much worse. See also monthly belly depth.
Net load = Demand − Wind − Solar (EIA hourly). Leading indicator of forced curtailment. WATCH when min < 15 GW. Yearly concentration: .
How renewable the grid was vs how hard RE was curtailed.
Monthly points: x = RE% of demand (EIA), y = combined curtailment rate (SCED). Steepening above ~45% RE = absorption limit.