Release 0.9.4#


This release was primarily about adding support for Bybit’s v5 protocol. New features have also been added to the Binance gateway, including support for multiple connections per account, each binding to a specific network interface.




The --event_log_symlink gateway flag will now default to true.


This flag should not be used anymore as it will be removed with a future release.


We now recommend Mambaforge due to lower memory requirements when installing packages.


Cancel Restrictions#

The gateway now supports cancelRestrictions.

The TOML configuration must then include something similar to this


  cancel_restrictions = "ONLY_NEW"

  cancel_restrictions = "ONLY_PARTIALLY_FILLED"

CancelOrder::request_template will then accept either of the labels ON or OPF.

Multiple Connections per Account#

The gateway now supports multiple connections per account.

Depending on the --ws_api flag, one of the --rest_network_interfaces and --ws_api_network_interfaces flags can be used to specify a comma-separated list of network interface names.

This makes it possible to bind each connection to a local network interface supporting an internet gateway and, by extension, a potentially different public IP address.

Bybit v5#

A new gateway is being developed to support Bybit’s v5 protocol.


This gateway will eventually be renamed to roq-bybit and replace existing (separate) solutions for spot and futures.

API Changes#

Order Requests#

The request_template field is now available on all of CreateOrder, ModifyOrder and CancelOrder.

The interpretation of this field is gateway specific and intended to support exchange request fields that do not oterhwise fit into a standard request template. These additional request fields can then be specified in the gateway TOML configuration file.


This is a POTENTIALLY BREAKING CHANGE due to CreateOrder::request_template renamed from order_template.

Order Update#

OrderUpdate.order_template has been removed. This was done to avoid confusion with the newly introduced request_template field from CreateOrder, ModifyOrder and CancelOrder.

Custom Metrics and Matrix#

A new CustomMatrix message type has been introduced to better support e.g. slow calibration by one client and fast prediction by another client.

CustomMetrics and CustomMatrix has both been reviewed to better support “age” through sending_time_utc.

CustomMatrix also includes a version number which could be used to synchronize the updating of multiple matrices.

Both message types are now collected into the private event-log.


Minimal Ansible scripts have been been added to more easily get started with devops.


Installs gateways based on YAML configuration. The project is available from GitHub.


Installs Podman, NGINX, Prometheus and Grafana. The project is available from GitHub.


Milestone on GitHub.


  • CustomMatrix (API) (#344).

  • Support multiple order-entry connections per account (Binance) (#336).

  • Install gateways using Ansible (Gateways) (#332).

  • Install Prometheus and Grafana using Ansible (Monitor) (#331).

  • Support cancelRestrictions (Binance) (#328).


  • Recommend the Mambaforge installer (instead of Miniforge3) (All) (#351).

  • The --event_log_symlink flag will now default to true (Server) (#350).

  • TopOfBook should support incremental updates (Server) (#348).

  • CustomMetrics and CustomMatrix messages should be collected into private event-log (Server) (#345).

  • ReferenceData.security_type now populated (Binance spot + futures) (#342).

  • ReferenceData now saved to both public and private event-logs (Server) (#341).

  • Review PositionUpdate and FundsUpdate to better correlate with OrderUpdate and TradeUpdate (API) (#340).

  • StreamStatus should include connection details (API) (#337).

  • Support bind to interface (IO) (#335).

  • Add request_template to order request structs (API) (#329).


  • CustomMetrics and CustomMatrix sending should be blocked while downloading (Client) (#352).

  • Experimental completion handler could cause segfault (IO) (#349).

  • Bind to unix socket already in use should result in failure (IO) (#347).

  • Broken price-caching for L2 books (BitMEX) (#339).

  • OrderUpdate incorrect for MBOUpdate with changed price and quantity (CME) (#338).

  • Unable to parse HTTP status 418 (Web) (#334).

  • Possible CancelOrder race-condition (Binance) (#333).


  • Drop OrderUpdate.order_template (API) (#330).