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


# Eurex

**Dataset ID**: [XEUR.EOBI]($PLATFORM_HOSTNAME/catalog/xeur/XEUR.EOBI)

Eurex Exchange 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 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 [regular trading hours](https://www.eurex.com/ex-en/trade/trading-hours) for Eurex are:
* 08:00 CET to 17:30 CET (European hours)
* 17:30 CET to 22:00 CET (U.S. hours)

The [extended trading hours](https://www.eurex.com/ex-en/trade/trading-hours) for Eurex are:
* 01:00 CET to 08:00 CET (Asian hours)

Extended (Asian) trading hours only include a [subset of instruments](https://www.eurex.com/ex-en/trade/trading-hours/thx), including European indices, interest rate futures, and cryptocurrency futures.

### Timestamps

Eurex 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 | Eurex 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 | Eurex 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). |

### 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

Eurex 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.

Eurex 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.
* Settlement price: Published during the day, as soon as they are available. Different products have different schedules.
* [Adjusted Open Interest](https://www.eurex.com/resource/blob/3974454/ff664ad26b898adf33e78a310bcce01e/data/C7%20Derivatives%20Clearing%20Functional%20Reference%20Guide.pdf): Published daily around 13:30 CE(S)T, it considers the previous day's open interest and adjusts it by subtracting the current day's closed contracts.

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.

**Stat flags**

Settlement price statistics normalize the field [tag 731-SettlPriceType](https://www.eurex.com/resource/blob/4332354/8a3ed0147bbbb5e5f7452fad509289b5/data/T7_R.13.1_EMDS_-_Trade_Prices-_Settlement_Prices_and_Open_Interest_Data_Manual_Version_1.pdf)
to the `stat_flags` field.

| Value | Decimal | Description |
| `1 << 0` | 1 | Final settlement |
| `1 << 1` | 2 | Theoretical (daily) settlement |

### 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 `XEUR.EOBI.XOFF` to distinguish them from on-exchange trades, which have their `publisher_id` set to `XEUR.EOBI.XEUR`.

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 `XEUR.EOBI.XEUR` as the `publisher_id` and one with `XEUR.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
```

### Flags normalization

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