Skip to main content

Millennium ITCH Market Data Connector

Not an Aggregator/Universe Configurator plugin

Unlike the other connectors listed in this section, the Millennium ITCH connector is not a pluggable Aggregator/Universe Configurator data connector. It is delivered as a standalone, specialized Docker container that consumes a venue's Millennium ITCH (MITCH) market data feed directly and writes it straight into TimeBase streams. There is no pluginKey, no Aggregator model configuration, and no Universe Configurator integration for this component.

MITCH is the market data protocol of LSEG Technology's Millennium Exchange matching platform (originally developed by Millennium IT Software, now part of London Stock Exchange Group). The connector ingests either the Market By Order (MBO) or Market By Price (MBP) MITCH feed of a venue running on Millennium Exchange and replicates it into TimeBase as full order book streams (not just top-of-book/BBO). One deployment of the connector handles exactly one of the two feed types; running both MBO and MBP for the same venue requires two separate container instances. In addition, the connector reads the MITCH Symbol Directory messages and maintains a securities (instrument reference data) stream in TimeBase — the MBO connector is the intended source of truth for this, since MBO carries the full instrument list.

Internally, the connector is built around EPAM's B2BITS MITCH Handler component, which implements the MITCH protocol's UDP multicast real-time channel together with the TCP Replay and Snapshot (recovery) channels.

This page documents a deployment based on a UDP MITCH Specification, v1.17 (Platform Version 7.10.25). MITCH is a market-specific protocol — field layouts, message sets, and enumerations can differ between venues that license the Millennium Exchange platform, so a deployment for a different venue should be validated against that venue's own MITCH specification and platform version.

Features

N/A (standalone container)Connector Key
Instrument Types
EQUITYBONDFUTUREOPTION
Asset Class
EquityFixed IncomeDerivatives
Technology
Custom API (UDP Multicast + TCP)
Feed Mode
Real-Time
Order Book Update Mode
SnapshotIncremental Updates
Order Book Type
MBO: Order-Level (L3)MBP: Aggregated (L2)
Message Types
Level 1
Level 2
Level 3
Trades
Funding Rates

Architecture

The MITCH feed is organized per market data group; instruments are load-balanced across groups and an instrument stays in the same group for the whole trading day. For each configured market data group, the connector consumes four data sources:

  • UDP Multicast primary channel — Real-Time channel, main site.
  • UDP Multicast secondary channel — Real-Time channel, backup site (identically sequenced to the primary; used to detect/recover gaps).
  • TCP Replay channel — retransmits a bounded window of recent Real-Time channel messages, for small/short data-loss recovery.
  • TCP Snapshot (recovery) channel — serves full order book, instrument, statistics, and trade snapshots, for large-scale data loss (e.g., late join or an outage).

The connector maintains per-symbol sequence numbers derived from the Real-Time channel to detect gaps:

  • Small gap (within what the Replay channel can still serve): the connector connects to the Replay channel and requests the missing sequence range. Fresh UDP messages are buffered rather than dropped while replay is in progress. Once the gap is closed, buffered messages are processed in order and a full order book snapshot is pushed to TimeBase.
  • Large gap (beyond the Replay channel's retransmission window): the connector falls back to the Snapshot/recovery channel, requesting snapshots in this order — Instruments → Book-Level Statistics (per segment) → Order Books (per segment) → Symbol Statuses (per segment) → Trades (per segment). UDP traffic is buffered during recovery, and a full order book snapshot is pushed to TimeBase once recovery completes.

Because the connector has no data source other than the four MITCH channels, it cannot independently distinguish "no trading activity" from "UDP feed problem" — a gap can only be detected (and repaired) once the Real-Time channel resumes and a sequence discontinuity becomes visible.

The Symbol Directory message is required to arrive before any index, trade, order book, or price point message for an instrument; the Snapshot channel's recovery sequence (Instruments first) guarantees this, and it is standard behavior for the venue's Real-Time channel as well.

Only the regular sub book is processed; other sub book types defined by the protocol (off-book, odd lot, block trade, early settlement, bulletin board, auction, all-or-none) are ignored by the connector.

Configuration

The connector is configured entirely through container environment variables and three mounted files — there are no Aggregator/Universe Configurator settings.

Environment Variables

VariableRequiredDescription
TIMEBASE_URLYesTimeBase connection URL, e.g. dxtick://localhost:8011.
TIMEBASE_STREAMYesTarget TimeBase stream for the market data feed (order books, trades, statistics, etc.). The stream's schema must already exist — the connector will not create it and will fail to start if it is missing.
TIMEBASE_SECURITIES_STREAMYesTarget TimeBase stream for instrument reference data derived from Symbol Directory messages. Set to NONE to disable broadcasting a securities stream. Only one connector instance (normally the MBO instance) should broadcast securities at a time.
ORDERBOOK_MODEYesMBO or MBP — selects which MITCH channel/feed this instance consumes.
ORDERBOOK_DEPTHYesOutput order book depth. 0 = unlimited. For MBP, should match the depth configured on the exchange side (this spec is written for 5 price levels by default).
PROMETHEUS_ENDPOINT_PORTYesPort to bind the Prometheus metrics endpoint on, or 0 to disable it. The container also always exposes port 8080 for this endpoint.
MITCH_TIMEZONEYesIANA timezone used to interpret MITCH local-time fields (Time, Date fields in the protocol are venue-local, not UTC). Should be set to the venue's local timezone.
TIMEBASE_PERIODIC_SNAPSHOT_INTERVAL_SECNoInterval, in seconds, between periodic full order-book snapshots pushed to TimeBase. Default 600.

Mounted Files

PathDescription
/app/engine.licenseLicense file for the underlying B2BITS MITCH Handler.
/app/conf/AppConfig.xmlMITCH connection configuration — real-time (primary/secondary), replay, and recovery channel addresses/ports, LocalAddress (the network interface that receives the UDP multicast traffic), reconnect/attempt limits, and MaxNumReplayMessages (must not exceed the venue's actual Replay channel message cache size).
/app/<UserName>.passPassword file for the MITCH session, named after the UserName configured in AppConfig.xml. Contains ChangeOnNextLogin, CurrentPassword, and NextPassword.

Optionally, three more files may be mounted under /app/conf/ to override the default supported index/market/sector lists used when populating the securities stream and broadcasting Consolidated Statistics / Index messages:

  • index_list.txt — one entry per line, index_name[:index_description]. The name must match the Symbol field of MITCH Index messages.
  • market_list.txt — one entry per line, market_name[:market_description]. The name must match the Symbol field of MITCH Consolidated Statistics messages (Statistics Type = Market).
  • sector_list.txt — one entry per line, sector_name[:sector_description]. The name must match the Symbol field of MITCH Consolidated Statistics messages (Statistics Type = Sector).

Operational Notes

  • TimeBase stream schemas must exist before the connector starts; the connector will wait for TimeBase to become available on startup, but will not create schemas itself.
  • MBO Symbol Directory data is the authoritative source of instrument reference data forwarded to TimeBase; MBP-side symbol information is only used internally by the MBP connector and is not forwarded.
  • Logs are written to MitClient.log under /app/logs.
  • The host's /usr/share/zoneinfo directory can optionally be mounted read-only into the container to keep timezone data current (the image ships its own tzdata package and does not strictly require this).

Protocol Coverage

Based on the MITCH specification v1.17 (Platform Version 7.10.25):

  • Transport: Real-Time channel over UDP multicast (IPv4); Replay and Snapshot channels over TCP.
  • Sequencing: Per-market-data-group sequence numbers on the Real-Time/Replay channels, reset to 1 daily (and on failover/restart).
  • Application messages consumed: Time, System Event, Symbol Directory, Symbol Status, Add Order, Add Attributed Order, Order Deleted, Order Modified, Order Book Clear, Order Executed, Order Executed With Price/Size, Trade, Auction Trade, Off-Book Trade, Trade Break, Recovery Trade, Auction Info, Statistics, Extended Statistics, Consolidated Statistics, Index, AON Info, News, Update Price Point, Delete Price Point, Top of Book, Exercised Turnover.
  • Order/Trade ID conversion: MITCH binary Order IDs and Trade IDs are derived from the venue's own base-62 (Order ID) / base-36 (Trade ID) encoded ASCII identifiers, per the conversion logic in the specification. This lets recipients recognize their own orders/trades without breaking anonymity for others.

Symbology

Instrument identifiers follow the venue's own Symbol field (up to 25 ASCII characters) as published in Symbol Directory messages, together with the venue's Segment (e.g. Main Board, Secondary Board, etc.) and instrument identification number (ISIN/CUSIP/etc.).

Troubleshooting

  • No fresh data reaching TimeBase: check MitClient.log for repeating Replay/Recovery channel errors — these usually indicate wrong credentials or an exhausted daily reconnect/request limit on the venue side. If no errors appear at all, the UDP multicast traffic is most likely not reaching the container; check firewall/routing/network configuration. A small Python script using IP_ADD_MEMBERSHIP can be used to confirm multicast traffic is visible on the host (see the container README).
  • Corrupted/inconsistent data: verify that the real-time channel and the replay/recovery channel(s) configured in AppConfig.xml all point at the same venue instance.
  • Connector fails to start: check MitClient.log for a license error near the top of the log; if the license is invalid or expired, contact SupportFIXAntenna@epam.com.
  • Missing index/market/sector data in the securities stream or statistics broadcast: verify the corresponding index_list.txt, market_list.txt, or sector_list.txt entries match the exact Symbol values used by the venue's MITCH feed.

Logging

Logs are written to MitClient.log in the container's /app/logs directory; there is no gflog.xml-based logger configuration since this connector runs outside the Aggregator/QuantServer process model.