Release 0.9.3#


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



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


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


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.


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.


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.


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.


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


Milestone on GitHub.


  • WebSocket API (Binance) (#327).

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

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

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


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


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