Release 0.8.8#


UDP Publish/Subscribe#

Gateways can now optionally publish market data using an open UDP protocol (reference design described here).

This protocol is useful when market data updates are needed in a different geographical location and one has access to a very fast network, e.g. microwave transmission.

A remote subscriber can be set up so it looks like any regular gateway, although read-only.

Batched Order Requests#

The Binance (spot) gateway now supports batched cancel-create order requests.

This makes it possible to optimize the use of the exchange’s rate limiter.


The exchange’s cancel-create request type is not the same as an order modification request.

Market by Price#

Gateways can now optionally compute Market by Price (MbP) checksum.

This is a debugging tool allowing clients to automatically validate if updates have been applied correctly.

The feature is enabled by setting the --cache_mbp_checksum flag on the gateway. When enabled, clients will automatically validate the checksum.


The checksum algorithm computes a hash for all price levels. This has significant performance impact and is the reason for this only being recommended as a debugging tool.


Simulation has been improved

  • Dynamic buffer sizing has been implemented to support exchanges publishing very deep order book updates, e.g. Binance and KuCoin.

  • Simulated order matching now deals with fractional quantities. This was an oversight and due to the simulated matching engine having been implemented for futures.


The roq-reduce tool now has flags to exclude certain event types.

This may be useful when trimming event-logs used for simulation purposes.

License Management#

We have started the process of enforcing specific public/private key pairs for each usage pattern.

For example, you should register two distinct key pairs if you have both production and UAT environments.

A new tool has been introduced to manage these key pairs: roq-auth.


Milestone on GitHub.


  • TradeSummary to include exchange sequence and taker/maker order id’s (#279).

  • UDP/multicast bridge (#276).

  • MarketByPriceUpdate should include a checksum (#74).

  • Tool to manage licenses (Tools) (#272).

  • Support cancel-replace requests (Binance) (#271).


  • roq-reduce now has optional flags to exclude certain event-types (Tools) (#274).

  • Simulation buffers should have dynamic sizing (Core) (#273).

  • Optimize the cache::MarketByPrice interface (API) (#267).


  • Simulated order matching did not use ReferenceData (Client) (#280).

  • OrderAck didn’t populate all fields for CreateOrder rejects (Server) (#278).

  • --client_listen_address is a required argument (Server) (#277).

  • MbP wasn’t being updated correctly when using max depth (Core) (#275).

  • MbP update incorrectly could pass external data straight through (Core) (#270).