Release 0.8.7#




The gateway now has market data support.


An overnight build process is now responsible for pushing updates to the unstable channel. All packages will have their (git revision) version number increased to ensure all packages are built against latest conda-forge whilst retaining historical immutability.

Rate Limiter#

Using high/low water mark is optional and can be enabled by using the high_water_mark and low_water_mark fields when configuring rate limiters in the gateway config. For example


    type = "ORDER_ACTION"
    aggregate = true
    request_limit = 50
    monitor_period = "120s"
    ban_period = "5m"
    high_water_mark = 40
    low_water_mark = 25

The RateLimitTrigger event has two new added fields: buffer_capacity and remaining-requests.

As before, when a rate limiter has been triggered, an event will be published now including buffer_capacity == BufferCapacity::FULL and remaining_requests == 0.

In addition, an event can be published when the rate limiter gets near the trigger. The event will include buffer_capacity == BufferCapacity::HIGH_WATER_MARK and remaining_requests == (request_limit - high_water_mark). This event can only be triggered by a new order action.

The low water mark can only be triggered after the rate limiter has detected HIGH_WATER_MARK or FULL. The event will include buffer_capacity == BufferCapacity::LOW_WATER_MARK and remaining_requests == (request_limit - low_water_mark). This event will normally be triggered by a timer.

Finally, when configured, the following must hold true: 0 < low_water_mark < high_water_mark < request_limit.


The authentication message now includes the kernel name and release (same as uname -sr from the command-line). This information is necessary to centrally monitor when it’s possible to initiate the work on io_uring.


We are now linking against abseil-cpp from conda-forge.


It is no longer necessary to downgrade the compiler to C++14 on macOS. This was previously the reason for separating flags into a separate static library.


Some methods have been deprecated from the cache::MarketByPrice interface. This is required to experiment with other storage formats than the currently used vector storage.


Please pay attention to any deprecation warnings and feel free to reach out if you have questions about alternative methods to use.


Milestone on GitHub.


  • client::EventLogMultiplexer (Client) (#266).

  • Market data support (CME) (#255).

  • Authentication now includes kernel name + release (Server) (#260).

  • Strategy parameters (API) (#258).


  • Update to the 1.5.0 SBE/multicast protocol (Deribit) (#269).

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

  • MbP updating optimized to also support Binance’s conflated feed (Core) (#265).

  • Now using abseil-cpp from conda-forge (API) (#261).

  • Make the RateLimiter public (API) (#259).

  • Drop fixed 12 decimal digits (FIX Bridge) (#256).

  • Support ExecutionInstruction.PARTICIPATE_DO_NOT_INITIATE (Binance) (#253).

  • Add notional fields to ReferenceData (API) (#252).

  • Rate limiter should publish alerts using high/low water marks (Server) (#251).


  • Using an invalid account causes crash (Server) (#268).

  • MbP dispatching was broken (FIX Bridge) (#263).

  • Issues with LIMIT_MAKER orders (Binance) (#257).

  • Excessive logging (FIX Bridge) (#250).


  • Some methods on cache::MarketByPrice are deprecated and will be removed (#266).

  • Overnight build for the unstable channel (Conda) (#264).