Market Steps

A market_step in the LTM represents a contract where the load/generation or sales/purchaces can be turned on and off depending on the spot price (Group 4 in the .enmd-files). Multiple such contracts can be defined for each area in the model.

The market_steps parameters are listed below.

To define a market step in the API, the following fields may be provided:

Parameters name, capacity are obligatory, while price or exogenous_price are obligatory and there others are optional.

MarketStep Parameters

Parameter

Datatype

Unit

name

string

Object/area name

capacity (MW)

Txy

The capacity of the contract.

price (€/MWh)

Txy, optional

Price time series.

capacity_vv

Txy, optional

Capacity time series used for the water value calculation.

exogenous_price

Txy, optional

Exogenous price time series.

price_series_coefficients

price_series_coeff_type_optional

Coefficients for price series.

secondary_price_series_name

string, optional

Name of connected seconday price series.

#comment

string, optional

Optional comment

area_name

string

output, Market step is connected to area

load_name

string

output, market step is connected to the load name, used for repurchases

id

int

Output

metadata

json

Output

The contract types available are sales, purchaces and repurchases.

  • Sales/purchaces contracts can be an export/import option defined by a time-dependent capacity and a time-dependent price.

  • Repurchases of loads can been seen as a mild form of curtailment (rationing).

  • Thermal power generation unit or a Nuclear power plant with defined capacity and price can be modelled as an purchace contract.

  • Excess power which has no load/buyer is dumped to a market step with a very low price. The excess power market step is automatically added to all areas.

  • Curtailment step is market step with a very high price (the highest defined price). The curtailment market step is automatically added to all areas.

Below are examples of market_steps for a thermal power generation unit, an export or sales option and and import or purchase option. All have defined capacities and prices.

Thermal power generation, export and import examples
"market_steps": [
    {
        "name": "Thermal power generation unit",
        "price": {
            "timestamps": [
                "2023-01-01T00:00:00Z",
                "2024-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    70,
                    100
                ]
            ]
        },
        "capacity": {
            "timestamps": [
                "2023-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    150
                ]
            ]
        }
    },
    {
        "name": "export",
        "price": {
            "timestamps": [
                "2023-01-01T00:00:00Z",
                "2024-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    70,
                    60
                ]
            ]
        },
        "capacity": {
            "timestamps": [
                "2023-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    -40
                ]
            ]
        }
    },
    {
        "name": "import",
        "price": {
            "timestamps": [
                "2023-01-01T00:00:00Z",
                "2024-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    20,
                    10
                ]
            ]
        },
        "capacity": {
            "timestamps": [
                "2023-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    20
                ]
            ]
        }
    }
],

Repurchases

Repurchases can be seen as a mild curtailment.

It is possible to define several repurchase market steps for one load obligation. The sum of repurchase market step capacities must be lower than the load’s capacity.

In the following example (collapsed, press the arrow-head) a repurchase on the load named Seasonal is added to the market step repurchase. This allows for a time-varying repurchase of 4.99 - 9 MW of the load at a time-dependent price between 55 - 70 €/MWh.

Repurchase example
"loads": [
    {
        "name": "Seasonal",
        "capacity": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-03-01T00:00:00Z",
                "2024-06-01T00:00:00Z",
                "2024-09-01T00:00:00Z",
                "2024-12-01T00:00:00Z",
                "2025-01-01T00:00:00Z",
                "2025-03-01T00:00:00Z",
                "2025-06-01T00:00:00Z",
                "2025-09-01T00:00:00Z",
                "2025-12-01T00:00:00Z",
                "2026-01-01T00:00:00Z",
                "2026-03-01T00:00:00Z",
                "2026-06-01T00:00:00Z",
                "2026-09-01T00:00:00Z",
                "2026-12-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    13.0,
                    10.48,
                    8.99,
                    14.48,
                    18.0,
                    13.0,
                    10.48,
                    8.99,
                    14.48,
                    18.0,
                    13.0,
                    10.48,
                    8.99,
                    14.48,
                    18.0
                ]
            ]
        }
    },
]
"market_steps": [
    {
        "name": "repurchase",
        "load_name": "Seasonal",
        "price": {
            "#comment": "type: time series / txy",
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-03-01T00:00:00Z",
                "2024-06-01T00:00:00Z",
                "2024-09-01T00:00:00Z",
                "2024-12-01T00:00:00Z",
                "2025-01-01T00:00:00Z",
                "2025-03-01T00:00:00Z",
                "2025-06-01T00:00:00Z",
                "2025-09-01T00:00:00Z",
                "2025-12-01T00:00:00Z",
                "2026-01-01T00:00:00Z",
                "2026-03-01T00:00:00Z",
                "2026-06-01T00:00:00Z",
                "2026-09-01T00:00:00Z",
                "2026-12-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    60,
                    58,
                    60,
                    56,
                    55,
                    59,
                    60,
                    55,
                    70,
                    65,
                    50,
                    70,
                    62,
                    61,
                    57
                ]
            ]
        },
        "capacity": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-03-01T00:00:00Z",
                "2024-06-01T00:00:00Z",
                "2024-09-01T00:00:00Z",
                "2024-12-01T00:00:00Z",
                "2025-01-01T00:00:00Z",
                "2025-03-01T00:00:00Z",
                "2025-06-01T00:00:00Z",
                "2025-09-01T00:00:00Z",
                "2025-12-01T00:00:00Z",
                "2026-01-01T00:00:00Z",
                "2026-03-01T00:00:00Z",
                "2026-06-01T00:00:00Z",
                "2026-09-01T00:00:00Z",
                "2026-12-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    7.0,
                    5.48,
                    4.99,
                    7.48,
                    9.0,
                    7.0,
                    5.48,
                    4.99,
                    7.48,
                    9.0,
                    7.0,
                    5.48,
                    4.99,
                    7.48,
                    9.0
                ]
            ]
        }
    },
]

Exogenous prices

Note

The use of exogenous prices is licensed, contact SINTEF for license questions.

For areas without fundamental modelling of the power system exogenous price series, or price forecasts, can be applied to set the power price. In addition, secondary exogenous price series can be defined together with price series coefficients. They allow for having different power prices in areas with exogenous prices series. The main exogenous price series and the secondary price series are used simultaneously following a weighted linear relation according to the equation below, to represent the area power price:

(1)\[X_a = a X_{mps} + b X_{sps} + c \qquad [\text{€/MWh},\ \text{cent/kWh}]\]

where \(X_a\) = modified price used in the simulations, \(a\) = conversion factor for the price forecast (p, u), \(X_{mps}\) = prices stored in the price forecast, \(b\) = conversion factor for the price forecast for other uncertainties (p, u), \(X_{sps}\) = prices stored in the price forecast for other uncertainties and \(c\) = fixed additions or reductions to the original price.

Example using exogenous prices below (collapsed, press the arrow-head).

Exogenous prices example
"market_steps": [
    {
        "name": "ms_exo_direct",
        "capacity": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-01-03T00:00:00Z"
            ],
            "scenarios": [
                [
                    10.0,
                    20.0
                ]
            ]
        },
        "exogenous_price": {
            "timestamps": [
                "2023-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    10.0
                ],
                [
                    11.0
                ],
                [
                    12.0
                ],
                [
                    13.0
                ],
                [
                    14.0
                ],
                [
                    15.0
                ],
                [
                    16.0
                ],
                [
                    17.0
                ]
            ]
        }
    },
    {
        "name": "ms_exo_ref",
        "capacity": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-01-03T00:00:00Z"
            ],
            "scenarios": [
                [
                    10.0,
                    20.0
                ]
            ]
        },
        "price_series_coefficients": {
            "a": 0.2,
            "b": 0.5,
            "c": 1.2
        },
        "secondary_price_series_name": "sps1"
    }
],
"price_series_main": [
    {
        "name": "HOVEDPRISREKKE.csv",
        "series": {
            "timestamps": [
                "2024-01-01T00:00:00Z",
                "2024-01-08T00:00:00Z",
                "2024-01-15T00:00:00Z",
                "2024-01-22T00:00:00Z",
                "2024-01-29T00:00:00Z",
                "2024-02-05T00:00:00Z",
                "2024-02-12T00:00:00Z",
                "2024-02-19T00:00:00Z",
                "2024-02-26T00:00:00Z",
                "2024-03-04T00:00:00Z"
            ],
            "scenarios": [
                [
                    0.0,
                    10.0,
                    20.0,
                    30.0,
                    40.0,
                    50.0,
                    60.0,
                    70.0,
                    80.0,
                    90.0
                ],
                [
                    1.0,
                    11.0,
                    21.0,
                    31.0,
                    41.0,
                    51.0,
                    61.0,
                    71.0,
                    81.0,
                    91.0
                ],
                [
                    2.0,
                    12.0,
                    22.0,
                    32.0,
                    42.0,
                    52.0,
                    62.0,
                    72.0,
                    82.0,
                    92.0
                ],
                [
                    3.0,
                    13.0,
                    23.0,
                    33.0,
                    43.0,
                    53.0,
                    63.0,
                    73.0,
                    83.0,
                    93.0
                ],
                [
                    4.0,
                    14.0,
                    24.0,
                    34.0,
                    44.0,
                    54.0,
                    64.0,
                    74.0,
                    84.0,
                    94.0
                ],
                [
                    5.0,
                    15.0,
                    25.0,
                    35.0,
                    45.0,
                    55.0,
                    65.0,
                    75.0,
                    85.0,
                    95.0
                ],
                [
                    6.0,
                    16.0,
                    26.0,
                    36.0,
                    46.0,
                    56.0,
                    66.0,
                    76.0,
                    86.0,
                    96.0
                ],
                [
                    7.0,
                    17.0,
                    27.0,
                    37.0,
                    47.0,
                    57.0,
                    67.0,
                    77.0,
                    87.0,
                    97.0
                ]
            ]
        }
    }
],
"price_series_secondary": [
    {
        "name": "sps1",
        "series": {
            "timestamps": [
                "2024-01-01T00:00:00Z"
            ],
            "scenarios": [
                [
                    0.0
                ],
                [
                    1.0
                ],
                [
                    2.0
                ],
                [
                    3.0
                ],
                [
                    4.0
                ],
                [
                    5.0
                ],
                [
                    6.0
                ],
                [
                    7.0
                ]
            ]
        }
    }
],
"connections": [
    {
        "from": "ms_exo_direct",
        "to": "numedal"
    },
    {
        "from": "ms_exo_ref",
        "to": "numedal"
    }
]

Output Files

The API generates .enmd files for each area, each containing a market_steps entry (group 4). The categories created in the file are 10, 11, 12, 13, 14, 20 and 40. (purchase timeseries, sales timeseries, purchace spot market priceseries, sales spot market priceseries, repurchase timeseries, excess power and curtailment).

Connections

Each market step must be connected to an area.

Notes

  • All time series must fully align with the dataperiod.