Release 0.9.3#

2023-03-20

This release was primarily about adding drop-copy support and to validate (and adjust) the implementation of the new CME L3 order book implementation.

Gateways#

Binance#

Preliminary support for the new WebSocket API. Must be enabled with the --ws_api=true flag.

Note

This is WORK IN PROGRESS. Please reach out if you want to use this new feature.

Binance, Binance Futures and Deribit#

Now possible to capture trades from orders not managed by the gateways.

These trades will always be captured into the event-log and it is possible to connect drop-copy clients to the gateway making it possible to monitor external activity.

CME#

CME’s TradeSummary messages were not previously used to update the L3 order book.

Adding support for these message types required a breaking change to the way Market by Order objects are being updated (sometimes we don’t get the side of an order).

The cache::MarketByOrder interface now also offers various analytics methods.

API Changes#

Market by Order#

The MarketByOrderUpdate and MBOUpdate structs have been changed to support CME’s TradeSummary messages where order side can potentially be missing.

Warning

This is a BREAKING CHANGE if you have previously been collecting MbO market data.

Exchange Time / Sending Time#

Market data messages have been updated to better reflect the various timestamps used by the exchanges.

  • exchange_time_utc should be the (UTC) timestamp from a matching engine, aka. transaction time.

  • sending_time_utc should be the (UTC) timestamp attached to the message from an exchange service external to the matching engine.

Warning

This is a POTENTIALLY BREAKING CHANGE if you previously relied on exchange_time_utc. This particular field may no longer be populated when the timestamp is likely to be a sending time and there is no available timestamp which is likely to originate from the matching engine.

Note

In many cases it’s unclear what the origin of a timestamp is. We will generally assign a timestamp to exchange_time_utc when there’s no definition can be found. This will ensure some continuity for historical data.

Drop-Copy#

Clients can now get visibility to all order and trade updates managed by a gateway.

  • Clients may opt-in by using the --drop_copy flag.

  • Gateway must have the drop_copy option (TOML configuration) set for the clients allowed to become drop-copy.

This is described in the drop-copy design document.

Trades#

The trade-cache was reviewed and changed. It is now possible, for drop-copy clients, to receive current snapshot of trades having external origin.

CHANGELOG#

Milestone on GitHub.

Added#

  • WebSocket API (Binance) (#327).

  • Drop-copy support (API) (#254).

  • Download trade history (Binance Futures) (#321).

  • Capture external trades (Server) (#320).

Changed#

  • Add sending_time_utc to market data messages (API) (#326).

  • Trade cache review (Server) (#324).

  • The --color flag now has "auto" as default value (Logging) (#318).

Fixed#

  • utils::invert(side) didn’t work for side == UNDEFINED (API) (#325).

  • roq-reduce failed for very large messages (Tools) (#323).

  • SBE TradeSummary wasn’t used for MarketByOrderUpdate (CME) (#322).

  • Unknown event-types GRID_UPDATE and STRATEGY_UPDATE (Binance Futures) (#319).

  • Simulator must dispatch MarketByOrder to client::Handler (Client) (#317).

Other#