Source: https://databento.com/docs/datasets/xeee-eobi


# European Energy Exchange

**Dataset ID**: [XEEE.EOBI]($PLATFORM_HOSTNAME/catalog/xeee/XEEE.EOBI)

European Energy Exchange (EEX) disseminates full depth-of-book data for their exchange through their EOBI (Enhanced Order Book Interface) feed, which Databento receives over UDP multicast in our FR2 data center. The `XEEE.EOBI` dataset does not disseminate data for EEX spot market, only for derivatives market.

The latest [EOBI Specification](https://www.eurex.com/resource/blob/4417682/52249af896465e10295f4203d25fef91/data/T7_R.13.1_%20EOBI_Manual_Version_3.pdf) is available from Eurex website.

### Trading hours

The base [trading hours](https://www.eex.com/fileadmin/EEX/Downloads/Trading/Trading_Hours/20250701_Trading_Hours_on_EEX_Derivatives_Markets_.pdf) on the EEX derivatives take place on weekdays from 08:00:00 CET to 17:00:00 CET. These trading hours can vary depending on the type of market.

EEX [Japanese power futures](https://www.eex.com/en/markets/power/japanese-power-market) trading hours are from 16:00 JST to 18:00 JST (08:00 CET to 10:00 CET).

[EEX](https://www.eex.com/en/trading-resources/trading-information/calendar) provides holiday calendars across different market types.

### Timestamps

EEX EOBI messages received by Databento include multiple timestamps with nanosecond precision.
As with all of our datasets, we also collect a `ts_recv` timestamp when the packet was received by our capture server. More details about our timestamps are available in our [timestamping guide](https://databento.com/docs/architecture/timestamping-guide.md).

| Databento Field | EEX EOBI Field | Description |
| `ts_recv` | N/A | The capture-server-received timestamp. |
| `ts_event` | RequestTime, TransactTime | RequestTime (Gateway request in timestamp) when available. TransactTime otherwise. |
| `ts_in_delta` | TransactTime from PacketHeader | The exchange matching-engine processing time. |

EOBI `RequestTime` field is not available for the off-market trades (EOBI message `TES Trade Report`), manual and auction trades (EOBI message `Trade Report`), and cross request (EOBI message `Cross Request`). Thus `ts_event` is populated with `TransactTime` field, which corresponds to the time when the transaction was processed by the exchange's matching engine.

The `ts_event` for passive trade messages (EOBI messages `Partial Order Execution` and `Full Order Execution`) is populated with the `RequestTime` from the aggressive order.

### Definition normalization

Definition records are sourced daily from [Reference Data Interface](https://www.eurex.com/resource/blob/4417678/b4ce595ef44d7959f2aca306eaab85a8/data/T7_R.13.1_%20EMDI_MDI_RDI_Manual_Version_3.pdf) snapshot. Definition records for intra-day instruments are sourced from EOBI incremental feed.

| Databento Field | EEX RDI Field | Description |
| `appl_id` | PartitionId | Identifies the instrument's partition. |
| `asset` | MarketSegment | Identifies the instrument's market segment. This field is used by parent and continuous [symbology](https://databento.com/docs/conventions/symbology.md). |
| `group` | MarketId | Market identifier code specified in ISO 10383. |
| `raw_symbol` | SecurityDesc | Instrument identifier (See **Symbology** section below). |
| `secsubtype` | ProductComplex | Identifies the type of instrument (See **Symbology** section below). |
| `underlying` | MarketSegment | The market segment of the underlying (if there is an underlying). |

The `MarketSegment` field from EEX message is truncated to fit into `asset` field in `InstrumentDefMsg` (size of `ASSET_CSTR_LEN`).

### Symbology

Raw symbols are sourced from `SecurityDesc` string field. The semantics varying according to the type of instrument (`secsubtype` in the normalized message). The table below describes each instrument type, based on the venue's [documentation](https://www.eurex.com/resource/blob/4417678/b4ce595ef44d7959f2aca306eaab85a8/data/T7_R.13.1_%20EMDI_MDI_RDI_Manual_Version_3.pdf).

| Value | Instrument type | Format |
| `1` | Simple Instrument | `PROD SI YYYYMMDD SM ES C/P StrikePrice VN` |
| `2` | Standard option strategy | `PROD.O.YYMMDD.IST.SEQ-NO` |
| `3` | Non-standard option strategy | `PROD.O.YYMMDD.IST.SEQ-NO` |
| `4` | Volatility strategy | `PROD.V.YYMMDD.IST.SEQ-NO` |
| `5` | Futures spread | `PROD.S.MONYY.MONYY.SPD` |
| `6` | Inter-product spread | `PROD.I.YYMMDD.IST.SEQ-NO` |
| `7` | Standard futures strategy | `PROD.F.YYMMDD.IST.SEQ-NO` |
| `8` | Pack and bundle | `PROD.B.MONYY.IST` |
| `9` | Strip | `PROD.T.YYMMDD.SEQ-NO` |
| `10` | Flexible instrument | `PROD FI YYYYMMDD SM ES C/P StrikePrice VN` for options. `PROD FI YYYYMMDD SM` for futures. |
| `11` | Commodity strip | `PROD.C.YYMMDD.IST.SEQ-NO` |
| `12` | Scaled simple instrument | `PROD SI YYYYMMDD SM ES C/P StrikePrice VN QSF` |
| `13` | Non-standard volatility strategy | `PROD.D.YYYYMMDD.SEQ-NO` |
| `14` | Total return future strategy | `PROD.R.YYYYMMDD.IST.SEQ-NO` |

The acronyms from the table above correspond to:

* `SM`: Settlement method (`CS` for cash, `PS` for Physical).
* `ES`: Exercise style (`EU` for European, `AM` for American).
* `VN`: Version number of an option. The version changes as a result of corporate events.
* `IST`: Standard strategy type for complex instrument, as detailed in the [Trading parameters document](https://www.eurex.com/ex-en/data/trading-files/product-information).
* `SEQ-NO`: Unique sequence number of 6 characters per product.
* `QSF`: Quantity scaling factor of scaled simple instruments.
* `YYYYMMDD`: Contract date.
* `MONYY`: Contract month-year.
* `YYMMDD`: Creation date.
* `O`, `N`, `V`, `D`, `F`: Identify different strategy types.
* `I`: Identify inter-product spreads instruments.
* `T`: Identify strip instruments.
* `C`: Identify commodity strip instruments.

### Expirations

EEX only provides date-granularity expiration data in `MaturityDate` field from the reference data.
As a result, the `expiration` field in the [definition schema](https://databento.com/docs/schemas/instrument-definitions.md) will always be at UTC midnight, even when the instrument expires during or after the trading day.

EEX also provides the `MaturityMonthYear` field in the reference data, which corresponds to the instrument expiration month, and may be in a different month than the `MaturityDate` field.
The `MaturityMonthYear` field is mapped to the fields `maturity_year` and `maturity_month` in the definition schema (`maturity_day` is not populated).

### Statistics normalization

Databento provides the following statistics:
* Opening price: First trade price of the trading session.
* Trading session high price: Highest trade price of the trading session.
* Trading session low price: Lowest trade price of the trading session.
* Close price: Last trade price of the trading session.
* Cleared volume: Total on-exchange trading volume.
* Final Settlement price: Published daily around 19:25:00 CET.
* Open Interest: Published daily around 21:10:00 CET.

Settlement price and open interest are only provided for options and futures outrights that are currently active and tradable in EEX's trading system. Settlement price and open interest are not provided for Freight Futures and Options.

Trading session high price, low price, close price, and cleared volume are published daily around 22:00:00 UTC, and only account for on-exchange trades.

On-exchange trades manually entered by [T7 Market Supervision](https://www.eurex.com/resource/blob/4417682/52249af896465e10295f4203d25fef91/data/T7_R.13.1_%20EOBI_Manual_Version_3.pdf) do not affect price statistics.

### Off-market trades

Trades reported in `TES Trade Report` EOBI message are considered off-market. Off-market trades with the price field set to `UNDEF_PRICE` contain the non-disclosed trade volume during the day.

Off-market trades have their `publisher_id` set to `XEEE.EOBI.XOFF` to distinguish them from on-exchange trades, which have their `publisher_id` set to `XEEE.EOBI.XEEE`.

This distinction is also reflected on the OHLCV schemas - if an interval contains both on-market and off-market trades for an instrument, two OHLCV messages will be published for that instrument on that interval, one with `XEEE.EOBI.XEEE` as the `publisher_id` and one with `XEEE.EOBI.XOFF`.

### Order Identifier

EOBI does not provide an order identifier (`order_id`) field. Instead, it relies on two fields to uniquely identify an order of a given instrument: `TrdRegTSTimePriority` (priority timestamp) and `Side`.

Databento normalizes the `order_id` field in [MBO schema](https://databento.com/docs/schemas/mbo.md) by combining both priority timestamp and side. To extract the priority timestamp from the `order_id`, the most-significant bit can be masked, as below:

```python
priority_timestamp = order_id & 0x7FFFFFFFFFFFFFFF
```

### Data prior to 2025-03-09

Data prior to 2025-03-09 was not normalized from EEX full depth-of-book captures, but from [EEX Market Data API](https://www.eex.com/fileadmin/EEX/Downloads/Market_Data/EEX_Group_DataSource/API/EEX_Market_Data_-_API_User_Guide_v021.pdf). The `definition`, `statistics`, `ohlcv-1d`, and `trades` schemas are available prior to this date for options and futures.

The reported volume (in `statistics` and `ohlcv-1d`) and `size` (in `trades`) correspond to the number of traded contracts/lots reported by [EEX Market Data API](https://www.eex.com/fileadmin/EEX/Downloads/Market_Data/EEX_Group_DataSource/API/EEX_Market_Data_-_API_User_Guide_v021.pdf).

The `raw_instrument_id` field from `definition` schema is not populated, as it is not provided by the venue. The `group` field is populated according to the [EEX instrument's commodity class](https://www.eex.com/fileadmin/EEX/Downloads/Market_Data/EEX_Group_DataSource/API/EEX_Market_Data_-_API_User_Guide_v020.pdf): `POWER`, `NATGAS`, `AGRI`, `EMISSIONS`, and `FREIGHT`.

The following `statistics` are published: Opening price, trading session high price, trading session low price, close price, cleared volume, open interest, and settlement price. Cleared volume accounts for on and off-exchange traded volume.

Implied trades have no price reported by the venue, thus price will be `UNDEF_PRICE` (`0x7fffffffffffffff`, `9223372036854775808`).

Due to not being generated from packet captures, both `ts_event` and `ts_recv` fields are set to midnight UTC, except:
* For `trades`, where both `ts_event` and `ts_recv` report the trade timestamp.
* For `ohlcv-1d`, where `ts_event` marks the start of the bar.

### Flags normalization

The `F_PUBLISHER_SPECIFIC` flag provides no additional meaning in this dataset and can be safely ignored.
