gridstatus icon indicating copy to clipboard operation
gridstatus copied to clipboard

ERCOT - Add ORDC Price Data

Open xmattyshea opened this issue 3 years ago • 3 comments

The 15-Minute Settlement Price Point (SPP) is comprised of the time-weighted, 5-minute LMP, as well as the RTRSVPOR and RTRDP scarcity price adders.

  • Real-Time 15-Min ORDC: https://www.ercot.com/mp/data-products/data-product-details?id=NP6-324-CD

ERCOT also publishes per-SCED data and annual historical archives.

  • Real-Time 5-Min: https://www.ercot.com/mp/data-products/data-product-details?id=NP6-323-CD
  • Historical 5-Min: https://www.ercot.com/mp/data-products/data-product-details?id=NP6-792-ER
  • Historical 15-Min: https://www.ercot.com/mp/data-products/data-product-details?id=NP6-793-ER

I think it makes sense to start with the 15-minute data for now as the 15-Minute RT market is already supported.

xmattyshea avatar Feb 27 '23 22:02 xmattyshea

What API would you suggest?

right now, every new data set gets a method like get_lmp, get_load, etc. We could continue to do this, but once we get into more specific datasets, not sure there is much value in have the method named like that.

I'm wonder about something like

iso.get_dataset(dataset_name, date, start, end, kwargs)

so in this case

iso = gridstatus.ERCOT()
iso.get_dataset(iso.ORDC_15_MIN, start="2022-01-01", end="today")

Gridstatus would have to handle using the real time or historical dataset as necessary.

If done correctly, I think we could use this approach to scale out to nearly every ERCOT dataset

kmax12 avatar Feb 28 '23 21:02 kmax12

I think the get_dataset() approach is definitely more maintainable and would be much easier to scale. It would also allow for the following:

iso = gridstatus.ERCOT()
supported_datasets = iso.supported_datasets()

that could all reference a single data structure (dict?). Also, in the case where there are different granularities for single datatypes:

iso = gridstatus.ERCOT()
ordc = iso.get_supported_granularity(iso.ORDC_15_MIN) # don't love the method name here but

This approach could also support passing multiple datasets in the same function call. Only problem I might see arising is the amount of checks you'd have to do once you start getting more and more unique datasets. Overall though I think the pros outweigh the cons. Will have to start tinkering with it to really get a sense, tho.

xmattyshea avatar Mar 01 '23 14:03 xmattyshea