Market Configurations

Market Configurations#

The market configuration allows an extensive configuration of multiple bidding options. A full list of configurations and explanation of the assume.common.market_objects.MarketConfig() is given here.

market config item



string name


energy or capacity or heat


list of available products to be traded


recurrence rule of openings


time delta

market mechanism

name of method used for clearing


max allowed bidding price


min allowed bidding price


the largest valid volume for a single bid


list of additional fields to base bid


step increments of volume


step increments of price


string for visualization of volume


string for visualization of price




max allowed change between bids


function checking if agent is allowed to trade here


additional dict with params for grid and other configs

Here, a description of all options and the usage is given.

The opening_hours is a recurrence rule which defines when the market is open. The opening_duration is a timedelta which defines how long the market is open. This can be used to leave time for negotiation in the agents. The market_mechanism is the name of the clearing method used for this market, and is mapped to the actual clearing_function in the initialization. The minimum_bid_price, maximum_bid_price and maximum_bid_volume are constraints for bids. All Bids of the sent orderbook are rejected and not considered for clearing if one or more are not in these bounds. An agent receives a “Rejected” message if this is the case. The additional_fields is a list of additional fields which are used to base the bid on. The price_tick and volume_tick is the step increment of volume, which ensures that only integers are used for calculation. The price_unit and volume_unit are strings for visualization of price. The supports_get_unmatched is a boolean which defines if the market supports the handle_get_unmatched method, which allows agents to look into the current market orderbook, as it is the case, mostly on continuous markets. The maximum_gradient is the maximum allowed change between bids from one hour to the next one - only relevant if the count of market products is greater than 1.

Most important, the market_products are a list of MarketProduct objects.


Each assume.common.market_objects.MarketProduct() contains the three informations:

  • duration (a relative timedelta or recurrency rule)

  • count (how many consecutive products are available for trading)

  • first_delivery (a relative timedelta of the first delivery in relation to market start)

  • only_hours (tuple of hours from which this product is available, on multi day products)

For example, if the duration is 1 hour, the count is 4 and first_delivery is 2 hours, then a market which opens at 12:00 will have the following products:

  • 14:00 - 15:00

  • 15:00 - 16:00

  • 16:00 - 17:00

  • 17:00 - 18:00

It then makes sense to reschedule the market clearing all 4 hours, but it would also be possible to schedule the same clearing interval an hour later too, which would look like this:

   title Market Schedule Simple count 4
   dateFormat  YYY-MM-DD HH:mm
   axisFormat %H:%M
   section First
   Bidding00 EOM          :a1, 2019-01-01 12:00, 1h
   Delivery01 EOM         :2019-01-01 14:00, 1h
   Delivery02 EOM         :2019-01-01 15:00, 1h
   Delivery03 EOM         :2019-01-01 16:00, 1h
   Delivery04 EOM         :2019-01-01 17:00, 1h
   section Second
   Bidding10 EOM          :a2, 2019-01-01 13:00, 1h
   Delivery11 EOM         :2019-01-01 15:00, 1h
   Delivery12 EOM         :2019-01-01 16:00, 1h
   Delivery13 EOM         :2019-01-01 17:00, 1h
   Delivery14 EOM         :2019-01-01 18:00, 1h

Example Configuration - CRM Market#

An example of a EOM and CRM market is shown here. It is possible to trade at the EOM and sell positive capacity on the CRM too:

   operator: EOM_operator
   product_type: energy
   start_date: 2019-01-01 01:00
     - duration: 1h
       count: 1
       first_delivery: 1h
   opening_frequency: 1h
   opening_duration: 1h
   market_mechanism: pay_as_clear

   operator: CRM_operator
   product_type: capacity_pos
   start_date: 2019-01-01 00:00
     - duration: 4h
       count: 1
       first_delivery: 2h
   opening_frequency: 4h
   opening_duration: 30m
   market_mechanism: pay_as_bid

Due to the configuration of the market opening frequency and duration, the timetable for the opening and closing of the markets, as well as the delivery periods are shown below

   title Market Schedule
   dateFormat  YYY-MM-DD HH:mm
   axisFormat %H:%M
   section EOM
   Bidding01 EOM          :a1, 2019-01-01 01:00, 1h
   Delivery01 EOM         :2019-01-01 01:00, 1h
   Bidding02 EOM          :a2, 2019-01-01 02:00, 1h
   Delivery02 EOM         :2019-01-01 02:00, 1h
   Bidding03 EOM          :a3, 2019-01-01 03:00, 1h
   Delivery03 EOM         :2019-01-01 03:00, 1h
   Bidding04 EOM          :a4, 2019-01-01 04:00, 1h
   Delivery04 EOM         :2019-01-01 04:00, 1h
   section CRM
   Bidding CRM            :crm01, 2019-01-01 00:00, 30m
   Delivery CRM           :crm02, 2019-01-01 01:00, 4h
   Bidding CRM            :crm03, 2019-01-01 04:00, 30m
   Delivery CRM           :crm04, 2019-01-01 05:00, 4h