Release 0.9.7#


A TUI tool was added to support CME’s somewhat manual certification process. The CME gateway has successfully passed CME’s certification tests.

This release contains a number of changes meant to support order routing. More advanced features will be added with the upcoming releases.

API Changes#


The order_id’s are now 48 bits wide and must therefore be specified as uint64_t.


This is a BREAKING CHANGE. You MUST update your order management code to use uint64_t for order_id’s.


A new client_order_id field has been added to all order messages. This field contains the initial ClOrdID sent to the exchange.


A new strategy_id field has been added to all order messages. This field can be used to identify a strategy or a client (in the case of order routing).


Future changes will allow a more dynamic approach to routing order events based on the strategy_id.

Gateway Changes#


The protocol (encoding/decoding) has changed to accomodate the wider order_id range.

New fields have been added to OrderAck and OrderUpdate to communicate the initial client_order_id used by the gateway to identify the order.

See also



A future release will no longer append routing_id to the generated ClOrdID.

There will be alternative solutions to persist this field for mapping purposes.


It is now possible to use a shared file containing secrets for many gateways

Lookup is by name, e.g.

A1 = "some_secret"

A1 = "another_secret"


The iLink implementation has passed CME’s certification tests.


Please note that OrderRequestID no longer can pack the request version number. This could potentially have an impact when pipelining multiple order modification requests.


The market data (WS) connection now uses authenticated subscriptions.

FIX Proxy#

A new project making it possible to implement a front to the FIX Bridge.

This project will likely have to be forked for custom integration work. This is the primary reason why it has been open sourced.

Risk Management#


This is currently an EXPERIMENTAL feature.

Support for custom external risk service (drop-copy) using gateway sequence number to synchronize risk limit updates.

See also


A SBE schema has been designed almost 1:1 with the C++ API.

A SBE multicast publisher has also been added.

See also


A TUI (Terminal User Interface) has been added allowing easy order management directly from your terminal.

See also


Milestone on GitHub.


  • Front-end to FIX Bridge (FIX Proxy) (#400).

  • Publish SBE market data messages using multicast (SBE Publisher) (#399).

  • SBE encode/decode library (SBE Codec) (#398).

  • Risk Manager template project (Risk Manager) (#343).

  • New TUI (Terminal User Interface) to manage orders (Tools) (#395).

  • strategy_id added to order and trade (fill) messages (API) (#375).


  • Complete rewrite. New sub-projects for Roq services and monitoring solution. (Ansible) (#404).

  • Move order book utilities (from roq-core) (Utils) (#403).

  • Library to encode/decode Roq’s FlatBuffers messages (FIX Codec) (#402).

  • Library to encode/decode Roq’s FIX messages (FIX Codec) (#401).

  • ExecutionReport.order_id (37) will now match Order{Ack|Update}.client_order_id (FIX Bridge) (#394).

  • ExecutionReport.order_id (37) will now always contain a non-empty string (FIX Bridge) (#393).

  • Market data (WS) connections now require authentication (Coinbase-PRO) (#391).

  • Adding OrderAck.client_order_id and TradeUpdate.client_order_id (API) (#389).

  • Secrets file should support by-name (Server) (#385).

  • Prefer conda to mamba (Scripts) (#382).

  • OrderRequestID has no space for version after order_id increased to 48 bits (CME) (#379).

  • ClOrdID change due to order_id changes (Server) (#378).

  • order_id must be uint64_t (API) (#377).

  • MBO snapshot could not be released if no incremental updates were received (CME) (#376).


  • roq-import did not validate MarketByPriceUpdate (Tools) (#406).

  • TCP fragmentation could cause freeze (CME) (#392).

  • Incorrect HTTP request parsing when body sent on different TCP segment (Web) (#390).

  • CancelAllOrders could cause unhandled exception (CME) (#387).

  • roq-import silently failed due to incorrect read-buffering (Tools) (#386).

  • Missing multiplier when downloading trades (Deribit) (#374).