Yes Energy
This topic explains how the Yes Energy source works
Yes Energy
The Yes Energy Source provides data from Yes Energy. The connector takes three arguments, datatype and object ID, and aggregation. The available datatypes and objects fall into the list of categories below.
Category | Subcategory |
---|---|
Prices | LMP |
Prices | Ancillary Services |
Prices | Congestion |
Prices | Energy |
Prices | Loss |
Load | Forecast |
Load | Actual |
Generation | Forecast |
Generation | Actual |
Generation | Scheduled |
Weather | Forecast |
Weather | Actual |
Finding the Right Datatypes and Object IDs
The full list of available datatypes and object IDs for ERCOT and CAISO can be found in this spreadsheet. Information on additional ISOs can be found in individual spreadsheets this folder. All spreadsheets can be filtered by datatype to find corresponding object IDs. We have also found the following list of datatypes useful to get started. The data in the spreadsheet is confidential and proprietary market information provided by Yes Energy LLC.
Load Datatypes
- LOAD_FORECAST_2DAY
- RTLOAD (actuals)
LMP Prices Datatypes
- DALMP
- RTLMP
- DARTLMP
Generation Datatypes
- WINDDATA (actuals)
- WIND_FORECAST
- SOLARGEN_HOURLY (actuals)
- SOLAR_FORECAST
Client Library
The code below shows an example of how to create the Yes Energy source in the Client Library. See the Create a Price Forecast Model tutorial for more details on Yes Energy usage within a NoTS.
yes_energy_source = project.create_source(
title="Yes Energy",
connector=yes_energy.YesEnergy(
items=[yes_energy.YesEnergyItem(datatype="DALMP", object_id=10000697078)],
stat=yes_energy.YesEnergyAggregation.AVG,
),
)
Vintaging with Yes Energy
Vintaging allows you to pull historical forecasts with varying as of times. This is useful for backtesting with data that would have been available when forecasts were made.
The Yes Energy source connector takes a vintaging offset argument to accomplish vintaging. The format is DD:HH:MM indicating that the forecasts to be queried should be available DD days before the forecasted time at or before HH:MM. For example an offset of "01:09:00" will query forecasts available as-of the prior day to the datetime being forecasted, at or before 09:00 local time.
Layering in the Myst Platform allows you to use the most recent Yes Energy forecast moving forward in time while using vintaged data for backtests. The client library script below builds a Yes Energy source with vintaged and non-vintaged data, time series for both signals, and a final layered time series holding both signals. The top layer will be the latest available forecasts, while the bottom layer will be the forecasts available as of the previous day at 09:00 local time.
import myst
from myst.connectors.source_connectors import yes_energy
myst.authenticate()
project = myst.Project.get(uuid="<project uuid>")
DATATYPE="LOAD_FORECAST"
ERCOT_LOAD_ZONE = 10000712973
FORECAST_VINTAGE_OFFSET = "01:09:00"
LOAD_FORECAST = yes_energy.YesEnergyItem(datatype=DATATYPE, object_id=ERCOT_LOAD_ZONE)
LOAD_FORECAST_BEFORE_DAM = yes_energy.YesEnergyItem(
datatype=DATATYPE,
object_id=ERCOT_LOAD_ZONE,
forecast_vintage_offset=FORECAST_VINTAGE_OFFSET,
)
# Create the Yes Energy target and feature time series.
yes_energy_source = project.create_source(
title="Yes Energy",
connector=yes_energy.YesEnergy(
items=[LOAD_FORECAST, LOAD_FORECAST_BEFORE_DAM],
stat=yes_energy.YesEnergyAggregation.AVG,
),
)
# Create two time series for the two Yes Energy items
load_forecast_ts = yes_energy_source.create_time_series(
title="ERCOT LOAD FORECAST",
sample_period=myst.TimeDelta("PT1H"),
label_indexer=f"{DATATYPE}_{ERCOT_LOAD_ZONE}",
)
load_forecast_pre_dam_ts = yes_energy_source.create_time_series(
title="ERCOT PRE DAM LOAD FORECAST",
sample_period=myst.TimeDelta("PT1H"),
label_indexer=f"{DATATYPE}_{ERCOT_LOAD_ZONE}@{FORECAST_VINTAGE_OFFSET}",
)
# Create Layered Time Series
layered_time_series = project.create_time_series(title="Spliced Load Forecast", sample_period=myst.TimeDelta("PT1H"))
# The start timing ensures that this layer's data will only be used when making forecasts into the future.
layered_time_series.create_layer(
node=load_forecast_ts,
order=0,
start_timing=myst.TimeDelta("PT1H"),
)
# The end timing ensures that this layer's data will only be used when backcasting, e.g. during a backtest.
layered_time_series.create_layer(
node=load_forecast_pre_dam_ts,
order=1,
end_timing=myst.TimeDelta("PT0H"),
)
Previously, Yes Energy users were able to specify market timings via Yes Energy-specific aliases. These, however, are not currently supported. Below is a list of market timings aliases and their translation to vintage offsets.
ISO | VINTAGENAME | VINTAGEOFFSET |
---|---|---|
AESO | BID CLOSE | 1:10:00 |
CAISO | PRIMARY | 1:09:00 |
CAISO | DELTA | 0:00:00 |
CAISO | EXTENDED | 2:17:00 |
CAISO | LATEST | 0:00:00 |
CAISO | BID CLOSE | 1:10:00 |
CAISO | ORIGINAL | 1:17:00 |
ERCOT | PRIMARY | 1:09:00 |
ERCOT | ENDOFDAY | 1:17:00 |
ERCOT | EXTENDED | 2:17:00 |
ERCOT | BID CLOSE | 1:10:00 |
ERCOT | LATEST | 0:00:00 |
ERCOT | ORIGINAL | 1:14:00 |
ERCOT | DELTA | 0:00:00 |
IESO | LATEST | 0:00:00 |
IESO | PRIMARY | 1:09:00 |
IESO | BID CLOSE | 1:10:00 |
IESO | ORIGINAL | 1:17:00 |
MISO | LATEST | 0:00:00 |
MISO | PRIMARY | 1:09:00 |
MISO | EXTENDED | 2:17:00 |
MISO | DELTA | 0:00:00 |
MISO | ORIGINAL | 1:17:00 |
MISO | BID CLOSE | 1:10:00 |
MX-BCA | BID CLOSE | 1:11:00 |
MX-BCA | DELTA | 0:00:00 |
MX-BCA | ENDOFDAY | 1:17:00 |
MX-BCA | EXTENDED | 2:17:00 |
MX-BCA | LATEST | 0:00:00 |
MX-BCA | ORIGINAL | 1:17:00 |
MX-BCA | PRIMARY | 1:09:00 |
MX-BCS | BID CLOSE | 1:11:00 |
MX-BCS | DELTA | 0:00:00 |
MX-BCS | ENDOFDAY | 1:17:00 |
MX-BCS | EXTENDED | 2:17:00 |
MX-BCS | LATEST | 0:00:00 |
MX-BCS | ORIGINAL | 1:17:00 |
MX-BCS | PRIMARY | 1:09:00 |
MX-SIN | BID CLOSE | 1:11:00 |
MX-SIN | DELTA | 0:00:00 |
MX-SIN | ENDOFDAY | 1:17:00 |
MX-SIN | EXTENDED | 2:17:00 |
MX-SIN | LATEST | 0:00:00 |
MX-SIN | ORIGINAL | 1:17:00 |
MX-SIN | PRIMARY | 1:09:00 |
NEISO | PRIMARY | 1:09:00 |
NEISO | BID CLOSE | 1:12:00 |
NEISO | ORIGINAL | 1:17:00 |
NEISO | DELTA | 0:00:00 |
NEISO | ENDOFDAY | 1:17:00 |
NEISO | EXTENDED | 2:17:00 |
NEISO | LATEST | 0:00:00 |
NYISO | PRIMARY | 1:09:00 |
NYISO | DELTA | 0:00:00 |
NYISO | EXTENDED | 2:17:00 |
NYISO | LATEST | 0:00:00 |
NYISO | BID CLOSE | 1:05:00 |
NYISO | ORIGINAL | 1:17:00 |
PJMISO | PRIMARY | 1:09:00 |
PJMISO | ORIGINAL | 1:17:00 |
PJMISO | BID CLOSE | 1:10:00 |
PJMISO | LATEST | 0:00:00 |
PJMISO | EXTENDED | 2:17:00 |
PJMISO | DELTA | 0:00:00 |
PJMISO | ICE CLOSE | 1:18:00 |
SPP | ORIGINAL | 1:17:00 |
SPP | BID CLOSE | 1:10:00 |
SPPISO | BID CLOSE | 1:09:30 |
SPPISO | ENDOFDAY | 1:17:00 |
SPPISO | PRIMARY | 1:09:00 |
SPPISO | DELTA | 0:00:00 |
SPPISO | LATEST | 0:00:00 |
SPPISO | ORIGINAL | 1:17:00 |
SPPISO | EXTENDED | 2:17:00 |
Updated about 2 years ago